所以有一列是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'
1条答案
按热度按时间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查询中:配置单元表定义: