我正在尝试使用Nifi将Oracle中的表插入HDFS。 Oracle中的源表有一个名为timestamp(6)
的{{1}}数据类型字段。
Nifi有以下处理器:
sd_timestamp
数据类型为String。sd_timestamp
的字符串。当摄取完成后我从目标配置单元表中执行sd_timestamp
时,我得到select *
作为值而不是时间戳。请帮忙。
答案 0 :(得分:1)
以下是我为使其工作所做的工作的详细信息。不需要ConvertAvroSchema
步骤。
Oracle表格
CREATE TABLE my_table
(
entry_name varchar(10),
sd_timestamp timestamp(6)
);
填充一些数据
insert into my_table values('e-1',CURRENT_TIMESTAMP);
insert into my_table values('e-2',CURRENT_TIMESTAMP);
insert into my_table values('e-3',CURRENT_TIMESTAMP);
验证数据
SELECT * FROM my_table;
ENTRY_NAME SD_TIMESTAMP
e-1 09-MAY-18 06.45.24.963327000 PM
e-2 09-MAY-18 06.45.39.291241000 PM
e-3 09-MAY-18 06.45.44.748736000 PM
NiFi Flow
验证HDFS上的结果
$ hadoop fs -ls /oracle-ingest
/oracle-ingest/50201861895275.orc
创建Hive表以使用hive.ddl值查询数据并向其添加位置
hive> CREATE EXTERNAL TABLE IF NOT EXISTS my_oracle_table
(
ENTRY_NAME STRING,
SD_TIMESTAMP STRING
)
STORED AS ORC
LOCATION '/oracle-ingest';
查询Hive表
hive> select * from my_oracle_table;
e-1 2018-05-09 18:45:24.963327
e-2 2018-05-09 18:45:39.291241
e-3 2018-05-09 18:45:44.748736
答案 1 :(得分:1)
我可以通过将以下java参数添加到Nifi / Conf目录中的bootstrap.conf文件来解决错误
-Doracle.jdbc.J2EE13Compliant =真