【发布时间】:2020-05-14 02:53:20
【问题描述】:
Sqoop 是否可以在数据类型为timestamp(6) 的加载时间的基础上对 teradata 进行增量加载?在 hdfs 中加载时如何处理格式:
sql exxeption:- 期待一些 '(' 和 ')。
【问题讨论】:
Sqoop 是否可以在数据类型为timestamp(6) 的加载时间的基础上对 teradata 进行增量加载?在 hdfs 中加载时如何处理格式:
sql exxeption:- 期待一些 '(' 和 ')。
【问题讨论】:
所以你有一列是 loadtime [type timestamp(6)]。
在将数据拉到 HDFS 时,您必须创建一个 3 步过程。还必须在 hdfs 端创建分区。
我更喜欢这种方式,因为您不会弄乱旧数据。
但是你可以在 sqoop 中使用--incremental 选项。
0000-00-00 00:00:00.000000
WHERE loadtime > ${max_of_loadtime_in_hdfs}。您将传递 max_of_loadtime_in_hdfs 作为参数。 现在,teradata 和 hive 的时间戳格式会有所不同。
保存到 hive 时最好转换为字符串。
因此,在使用配置单元加载时间(字符串类型)检查加载时间时,您必须 cast back 到时间戳(6)。
所以在你的情况下,sqoop 结束将是(这对你有用):
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')max_of_loadtime_in_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
hive 表定义:
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'
【讨论】: