编辑:我解决了一些类路径问题,现在在执行“ 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 Developer中创建两个虚拟目录,向我的用户(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数据库端执行的发布功能生成的。您可以遵循流程here。
现在,问题是即使处理记录的方式如您在此处看到的一样:
5月10日星期五08:16:34 +0000 2019 | 1126762942307811331 | RT @annknownityy:未来的医生,律师,工程师,医疗技术,护士,注册会计师,心理学家,外交官,生物学家,老师,建筑师在办公室里?美国梧桐女孩?|全国人均卡卢卡城|假| 85 | 190 | 0 | 7804 | 3131 | Sat Mar 21 00:09:46 +0000 2015 ||||||假| 0 | 0 | 0 | 0 |假| false | low | zh | 1557476194346
5月10日星期五08:16:34 +0000 2019 | 1126762943347953664 | University of 伊巴丹(UI)2018/2019学年学费时间表? http somelink?学习 更多| OlusegunFapohunda |地球|假| 592 | 5 | 3 | 104 | 6851 | 2月11日星期四 21:49:57 +0000 2010 |||||| false | 0 | 0 | 0 | 0 | false | false | low | en | 1557476194594
5月10日星期五08:16:34 +0000 2019 | 1126762943498948609 | RT @ zinadabo1:请 我们需要帮助,我刚刚得知Rotimi Akeredolu增加了Ondo 州立大学的学费从35k到150k。
无法访问数据。当我执行“ SELECT * FROM nosqluser.tweets3”时,得到的是:
RA-29913:从ODCIEXTTABLEFETCH执行调用时出错
ORA-29400:数据记录错误
KUP-04004:读取文件/tmp/tweet-dataloc/nosql.dat时出错
由于显示了寄存器,所以我知道NoSQL数据库是可访问的,并且数据已格式化并可以正确读取。实际上,到目前为止,该过程应该已经完成,为什么我不能访问我的数据?
答案 0 :(得分:0)
nosql_stream文件必须类似于:
#!/bin/bash
$JAVA_HOME/bin/java oracle.kv.exttab.Preproc $*
换句话说,即使环境变量或.bashrc文件中已经指定了Java,也必须指定Java所在的nosql_stream。
这说明了为什么它是在12c部署的容器上工作的,因为它是“本机” Linux系统,并使用了这些变量;同时,无法通过本地SQL Developer正确访问这些文件,因此无法正确执行文件。