Загрузка поля Timestamp из Oracle в HDFS с использованием NIFI - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь вставить таблицу из Oracle в HDFS, используя Nifi. Исходная таблица в Oracle имеет поле типа данных timestamp(6) с именем sd_timestamp. Нифи имеет следующий процессор:

  1. QueryDatabase: Это запрашивает базу данных Oracle.
  2. CovertAVROSchema: У этого есть входные и выходные схемы. Схемы ввода и вывода имеют тип данных sd_timestamp в виде строки.
  3. ConvertAvroToOrc
  4. PutHDFS: Таблица, созданная в Hive, также имеет тип данных в виде строки для sd_timestamp. Когда загрузка завершена, и я делаю select * из таблицы улья назначения, я получаю oracle.sql.timestamp@23aff4 в качестве значения вместо отметки времени.

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Я могу устранить ошибку, добавив следующий java-аргумент в файл bootstrap.conf, находящийся в каталоге Nifi / Conf *

-Doracle.jdbc.J2EE13Compliant = истина

0 голосов
/ 10 мая 2018

Вот детали того, что я сделал, чтобы заставить его работать. Не требует шага 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

Flow Design 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
...