使用nifi将时间戳字段从oracle摄取到hdfs

klr1opcd  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(402)

我正在尝试使用nifi将一个表从oracle插入hdfs。oracle中的源表具有 timestamp(6) 调用的数据类型字段 sd_timestamp . nifi具有以下处理器:
querydatabase:查询oracle数据库。
covertavroschema:这个有输入和输出模式。输入和输出模式都具有 sd_timestamp 数据类型为字符串。
转换器
puthdfs:在配置单元中创建的表的数据类型也为string sd_timestamp . 当摄入完成后,我做了一个 select * 从目标Hive表,我得到 oracle.sql.timestamp@23aff4 作为值而不是时间戳。
请帮忙。

ef1yzkbh

ef1yzkbh1#

我可以通过向nifi/conf目录中的bootstrap.conf文件添加以下java参数来解决这个错误
-doracle.jdbc.j2ee13compliant=真

cbeh67ev

cbeh67ev2#

下面是我做了什么使它工作的细节。不需要 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流
流程设计

querydatabasetable配置

convertavrotoorc配置

puthdfs配置

logattribute查看hive.ddl属性值

验证hdfs上的结果

$ hadoop fs -ls /oracle-ingest
/oracle-ingest/50201861895275.orc

创建配置单元表以使用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> 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

相关问题