使用NIFI将时间戳字段从Oracle提取到HDFS

时间:2018-05-09 11:54:44

标签: oracle hadoop timestamp unix-timestamp apache-nifi

我正在尝试使用Nifi将Oracle中的表插入HDFS。 Oracle中的源表有一个名为timestamp(6)的{​​{1}}数据类型字段。 Nifi有以下处理器:

  1. QueryDatabase: 这将查询OracleDatabase。
  2. CovertAVROSchema: 这个有输入和输出模式。输入和输出模式都有sd_timestamp数据类型为String。
  3. ConvertAvroToOrc
  4. PutHDFS: 在Hive中创建的表的数据类型也为sd_timestamp的字符串。当摄取完成后我从目标配置单元表中执行sd_timestamp时,我得到select *作为值而不是时间戳。
  5. 请帮忙。

2 个答案:

答案 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

流程设计 enter image description here

QueryDatabaseTable配置 enter image description here

ConvertAvroToOrc配置 enter image description here

PutHDFS配置 enter image description here

LogAttribute查看hive.ddl属性值 enter image description here

验证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 =真