编辑:我解决了一些类Path的问题,现在我会在日志文件中获得以下错误,这些错误是执行"选择 *"
时生成的。UP-04004:错误阅读文件/home/oracle/tweet-dataloc/nosql.dat
KUP-04017:操作系统消息:错误0
kup-04017:操作系统消息:/home/oracle/processor/nosql_stream:第4行:java:没有这样的文件或目录
请注意,该文件正好在该路径中,并且具有777个权限。编辑的结尾
我正在制作一个指向Oracle NOSQL数据库的外部表格,其中数据存储为键值对。
请注意,在此示例中,我将所有用户都可以访问的所有用户都放置在/TMP中,因此我们将所有与OS相关的问题删除
首先,我在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/processor/nosql_stream:
#!/bin/bash
export PATH=$PATH:/usr/java/latest/bin
export CLASSPATH=/home/oracle/processor/*
java oracle.kv.exttab.Preproc $*
/tmp/tweet-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数据库结束上执行的发布函数生成最后一个文件。您可以在此处关注该过程。
现在,问题即使记录是像您可以看到的那样:
星期五5月10日08:16:34 0000 2019 | 1126762942307811331 | RT @AnnKnownyy:未来医生,律师,工程师,工程师,医疗技术,护士,CPA,心理学家,外交官,外交官,外交官,生物学家,生物学家,教师,建筑师,建筑师,Offi?Sycamore Girl?| Caloocan City,Caloocan City,National Capita | False | 85 | 190 | 0 | 7804 | 3131 | SAT MAR 21 00:09:46 0000 2015 ||||||||||| false | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | false| false | low | en | 1557476194346
星期五5月10日08:16:34 0000 2019 | 112676294347953664 |大学 伊巴丹(UI(2018/2019学术会议的学费时间表? http somelink?学习 更多| olusegunfapohunda |地球| false | 592 | 5 | 3 | 104 | 6851 | thu 2月11日 21:49:57 0000 2010 ||||||错误| 0 | 0 | 0 | 0 | 0 | false | false | low | en | 1557476194594
星期五5月10日08:16:34 0000 2019 | 1126762943498948609 | rt @zinadabo1:pls 我们需要帮助,我只是被告知Rotimi Akeredolu增加了 州立大学的学费从35K到150k。
数据无法访问。当我做一个"从nosqluser.tweets3中进行选择"时,我得到的是:
RA-29913:从ODCIEXTTABLEFETCH执行呼叫的错误
ora-29400:数据cartdrige中的错误
kup-04004:错误阅读文件/tmp/tweet-dataloc/nosql.dat
由于显示了寄存器,因此我知道NOSQL数据库可访问,并且数据格式并正确读取。实际上,到这里应该完成该过程,所以为什么我无法访问我的数据呢?
nosql_stream文件必须看起来像:
#!/bin/bash
$JAVA_HOME/bin/java oracle.kv.exttab.Preproc $*
换句话说,即使在环境变量或.bashrc文件中已经指定了Java的nosql_stream,即使它已在其中指定。
这说明了为什么它在部署12C的容器上工作,因为它是"本机" Linux系统,并使我们成为这些变量;同时,通过本地SQL开发人员无法正确访问这些开发人员,因此无法正确执行该文件。