使用Sqoop进行Hive表动态分区加载

时间:2016-08-26 12:41:07

标签: hive sqoop

我有一个名为dept的MySQL表,我将其加载到Hive EXTERNAL表dept表,作为基于时间戳列ts的增量附加检查列最后一个值。

这很好用,现在我想根据deptdept_name列为我的hive表ts添加动态分区。

我知道我可以在sqoop之外创建表动态分区,但需要帮助将数据加载到动态分区。我看到了一个使用--hive-partition-key& --hive-partition-value,但价值是硬编码的。如果没有对hive-partition-values进行硬编码,我可以使用SQOOP(dept1,timestamp1 / dept1,timestamp2..etc)和(dept2,timestamp1 / dept2,timestamp2 ......等)自动将数据加载到相应的分区吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以将已创建的外部表中的数据加载到动态分区表中,而无需对分区值进行硬编码。

假设您的外部表externalDept已包含值,并且您已创建分区表dept,则可以使用以下内容:

INSERT OVERWRITE TABLE dept 
PARTITION (dept_name, ts)
SELECT ..., ed.dept_name, ed.ts
FROM externalDept ed

它不是您的问题的一部分,但您也可以混合静态和动态分区。例如,如果您想为timestamp指定动态值,但为dept指定静态值,则可以执行以下操作:

INSERT OVERWRITE TABLE dept 
PARTITION (dept_name = 'Math', ts)
SELECT ..., ed.dept_name, ed.ts
FROM externalDept ed
WHERE ed.dept_name = 'Math'