Проблема с внешней таблицей базы данных Oracle. ORA-29913, ORA-29400 и KUP-04004 - PullRequest
1 голос
/ 13 мая 2019

РЕДАКТИРОВАТЬ: я решил некоторые проблемы с classpath, и теперь я получаю следующую ошибку в файле журнала, который генерируется при выполнении «SELECT *»

UP-04004: ошибка чтения файла /home/oracle/tweet-dataloc/nosql.dat

KUP-04017: Сообщение операционной системы: ошибка 0

KUP-04017: сообщение операционной системы: / home / oracle / processor / nosql_stream: строка 4: java: такого файла или каталога нет

Обратите внимание, что этот файл находится именно в этом пути и имеет 777 разрешений. Конец редактирования

Я создаю внешнюю таблицу, указывающую на базу данных Oracle NoSQL, в которой данные хранятся в виде пар ключ-значение.

Обратите внимание, что для этого примера я помещаю каждый каталог в / tmp, к которому могут получить доступ все пользователи на уровне ОС, поэтому мы устраняем любые проблемы, связанные с разрешениями ОС

Сначала я создаю два виртуальных каталога в SQL-разработчике, предоставляю разрешения моему пользователю (nosqluser) и, конечно, создаю внешнюю таблицу:

CREATE DIRECTORY ext_tab AS '/tmp/tweet-dataloc';
CREATE DIRECTORY nosql_bin_dir AS '/tmp/processor';
GRANT READ, WRITE ON DIRECTORY ext_tab TO nosqluser;
GRANT READ, EXECUTE ON DIRECTORY nosql_bin_dir TO nosqluser;

А потом я создаю таблицу следующим образом:

CREATE TABLE "NOSQLUSER"."TWEETS3" 


("CREATED_AT" VARCHAR2(80 BYTE), 
    "ID_STR" VARCHAR2(80 BYTE), 
    "TEXT" VARCHAR2(200 BYTE), 
    "NAME" VARCHAR2(80 BYTE), 
    "LOCATION" VARCHAR2(80 BYTE), 
    "VERIFIED" VARCHAR2(80 BYTE), 
    "FOLLOWERS_COUNT" NUMBER, 
    "FRIENDS_COUNT" NUMBER, 
    "LISTED_COUNT" NUMBER, 
    "FAVOURITES_COUNT" NUMBER, 
    "STATUSES_COUNT" NUMBER, 
    "CREATED_AT_USER" VARCHAR2(80 BYTE), 
    "COUNTRY" VARCHAR2(80 BYTE), 
    "COUNTRY_CODE" VARCHAR2(80 BYTE), 
    "FULL_NAME_PLACE" VARCHAR2(80 BYTE), 
    "NAME_PLACE" VARCHAR2(80 BYTE), 
    "PLACE_TYPE" VARCHAR2(80 BYTE), 
    "IS_QUOTE_STATUS" VARCHAR2(80 BYTE), 
    "QUOTE_COUNT" NUMBER, 
    "REPLY_COUNT" NUMBER, 
    "FAVORITE_COUNT" NUMBER, 
    "RETWEET_COUNT" NUMBER, 
    "FAVORITED" VARCHAR2(80 BYTE), 
    "RETWEETED" VARCHAR2(80 BYTE), 
    "FILTER_LEVEL" VARCHAR2(80 BYTE), 
    "LANG" VARCHAR2(80 BYTE), 
    "TIMESTAMP_MS" VARCHAR2(80 BYTE)
   ) 
   ORGANIZATION EXTERNAL( 
      TYPE ORACLE_LOADER
      DEFAULT DIRECTORY "EXT_TAB2"
      ACCESS PARAMETERS( 
          records delimited by newline
          preprocessor nosql_bin_dir2:'nosql_stream'
          fields terminated by '|' 
          missing field values are null 
          reject rows with all null fields 
      )
      LOCATION ('nosql.dat')
    )
   REJECT LIMIT UNLIMITED ;

Наконец, я покажу вам, как выглядят мои файлы сценариев nosql_stream и nosql.dat: / TMP / процессор / nosql_stream:

#!/bin/bash
export PATH=$PATH:/usr/java/latest/bin
export CLASSPATH=/home/oracle/processor/*
java oracle.kv.exttab.Preproc $*

/ TMP / твит-dataloc / nosql.dat:

<config version="1">
  <component name="publish" type="params" validate="true">
    <property name="oracle.kv.exttab.connection.url" value="jdbc:oracle:thin:/@//relacional:1521/ORCLPDB1.localdomain" type="STRING"/>
    <property name="oracle.kv.exttab.connection.user" value="nosqluser" type="STRING"/>
    <property name="oracle.kv.exttab.tableName" value="nosqluser.tweets2" type="STRING"/>
  </component>
  <component name="nosql_stream" type="params" validate="true">
    <property name="oracle.kv.exttab.externalTableFileNumber" value="0" type="INT"/>
    <property name="oracle.kv.exttab.totalExternalTableFiles" value="1" type="INT"/>
    <property name="oracle.kv.formatterClass" value="formatter.TweetFormatter" type="STRING"/>
    <property name="oracle.kv.hosts" value="bequi_kvlite_1:5000" type="STRING"/>
    <property name="oracle.kv.kvstore" value="kvstore" type="STRING"/>
  </component>
</config>

Этот последний файл создается с помощью функции публикации, выполняемой в конце базы данных NoSQL. Вы можете следить за процессом здесь .

Теперь, проблема даже при том, что записи обрабатываются так, как вы можете видеть здесь:

Пт 10 мая 08:16:34 +0000 2019 | 1126762942307811331 | RT @annknownityy: Будущий врач, юрист, инженер, медтехник, медсестра, кпк, психолог, дипломат, биолог, преподаватель, архитектор, в офисе? Сикамор Девушка? | Caloocan Город, Национальный Capita | false | 85 | 190 | 0 | 7804 | 3131 | Сб 21 марта 00:09:46 +0000 2015 |||||| false | 0 | 0 | 0 | 0 | false | ложная | низкая | ан | 1557476194346

Пт 10 мая 08:16:34 +0000 2019 | 1126762943347953664 | Университет Расписание занятий в школе в Ибадане (UI) на учебную сессию 2018/2019? http somelink? Учить Подробнее | OlusegunFapohunda | Земля | Ложь | 592 | 5 | 3 | 104 | 6851 | Чт 11 февраля 21:49:57 +0000 2010 |||||| ложь | 0 | 0 | 0 | 0 | ложь | ложная | низкая | ан | 1557476194594

Пт 10 мая 08:16:34 +0000 2019 | 1126762943498948609 | RT @ zinadabo1: Pls нам нужна помощь, мне только что сообщили, что Ротими Акередолу увеличил Ondo обучение в государственном университете от 35 тыс. до 150 тыс.

Данные недоступны. Когда я делаю «SELECT * FROM nosqluser.tweets3», я получаю:

RA-29913: ошибка при выполнении вызова из ODCIEXTTABLEFETCH

ORA-29400: ошибка в данных корзины

KUP-04004: ошибка чтения файла /tmp/tweet-dataloc/nosql.dat

Так как регистры показаны, я знаю, что база данных NoSQL доступна, и данные отформатированы и прочитаны правильно. На самом деле, до этого процесс должен быть завершен, так почему я не могу получить доступ к своим данным?

1 Ответ

0 голосов
/ 20 мая 2019

Файл nosql_stream должен выглядеть следующим образом:

#!/bin/bash
$JAVA_HOME/bin/java oracle.kv.exttab.Preproc $*

Другими словами, вы должны указать nosql_stream, где находится Java, даже если он уже указан в переменных среды или в файле .bashrc.

Это объясняет, почему он работает с контейнером, в котором развернут 12c, поскольку он является "родной" системой Linux и делает нас из этих переменных;тем временем через локального разработчика SQL к ним нельзя получить доступ должным образом, и, следовательно, файл не может быть правильно выполнен.

...