Sqoop增量

问题描述 投票:0回答:1

Sqoop是否可以在数据类型为timestamp(6)的加载时间的基础上对Teradata进行增量加载?在hdfs中加载时如何处理格式:

sql exxeption:-期望有'('和')。

hdfs sqoop sqoop2
1个回答
0
投票

所以您有一列是loadtime [type timestamp(6)]。将数据提取到HDFS时,您必须创建3个步骤。还必须在hdfs端创建分区。我更喜欢这种方式,因为您不会弄乱旧数据。但是您可以在sqoop中使用--incremental选项。

  1. 获取hdfs中存在的最大加载时间。如果是第一次,则传递默认值,例如--incremental
  2. 通过sqoop提取数据时,将条件传递的条件设为0000-00-00 00:00:00.000000。您将传递WHERE loadtime > ${max_of_loadtime_in_hdfs}作为参数。
  3. 将数据保存在较新的分区中

现在,对于teradata和hive,时间戳格式将有所不同。最好将其转换为字符串,同时将其保存为蜂巢。

因此,在使用蜂巢加载时间(字符串类型)检查加载时间时,必须将max_of_loadtime_in_hdfs标记为时间戳(6)。因此,在sqoop结束时,您的情况将是(这对您有效):

  • cast back
  • WHERE loadtime > CAST(${max_of_loadtime_in_hdfs} AS TIMESTAMP(6))

max_of_loadtime_in_hdfs将是这样的WHERE loadtime > TO_TIMESTAMP(${max_of_loadtime_in_hdfs}, 'yyyy-mm-dd hh24:mi:ss.ff6')

所以在您的最后一个sqoop查询中:

2020-12-31 23:59:59.999999

配置单元表定义:

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
© www.soinside.com 2019 - 2024. All rights reserved.