sqoop增量

xoefb8l8  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(387)

在数据类型为的加载时间的基础上,是否可以通过sqoop对teradata进行增量加载 timestamp(6) ? 在hdfs中加载时如何处理格式:
sql语句exxeption:- expecting 某物'('和')。

vqlkdk9b

vqlkdk9b1#

所以有一列是loadtime[type timestamp(6)]。
在将数据拉入hdfs时,您必须创建一个三步流程。还要在hdfs端创建分区。
我更喜欢这种方式,因为你不想弄乱旧的数据。
但你可以用 --incremental sqoop中的选项。
获取hdfs中存在的最大加载时间。如果这是第一次传递一个默认值 0000-00-00 00:00:00.000000 在通过sqoop拉取数据时,添加一个条件 WHERE loadtime > ${max_of_loadtime_in_hdfs} . 你会通过的 max_of_loadtime_in_hdfs 作为论据。
将数据保存在较新的分区中
现在,teradata和hive的时间戳格式将不同。
最好在保存到Hive的同时将其转换为字符串。
因此,在使用配置单元loadtime(字符串类型)检查loadtime时,必须转换回timestamp(6)。
因此,在您的sqoop环境中,end将是(这对您一直有效):
WHERE loadtime > CAST(${max_of_loadtime_in_hdfs} AS TIMESTAMP(6)) WHERE loadtime > TO_TIMESTAMP(${max_of_loadtime_in_hdfs}, 'yyyy-mm-dd hh24:mi:ss.ff6') hdfs中的最大加载时间是这样的 2020-12-31 23:59:59.999999 在最后一个sqoop查询中:

SELECT
    column_A,
    column_B,
    ...
    column_N,
    to_char(loadtime, 'yyyy-mm-dd hh24:mi:ss.ff6') loadtime
FROM teradata_table
WHERE loadtime > TO_TIMESTAMP(${max_of_loadtime_in_hdfs}, 'yyyy-mm-dd hh24:mi:ss.ff6') 
AND $CONDITIONS --this is for sqoop don’t remove this

配置单元表定义:

CREATE EXTERNAL TABLE teratable_in_hive (
    column_A <column_A_datatype>,
    column_B <column_B_datatype>,
    ...
    column_N <column_N_datatype>,
    loadtime string
)
PARTITIONED BY (pull_seq_no <type can be int or string>)
STORED AS <file_format TEXTFILE / PARQUET>
LOCATION 'hdfs:///<some-path>/teratable_in_hive'

相关问题