我有一个名为dept
的MySQL表,我将其加载到Hive EXTERNAL表dept
表,作为基于时间戳列ts
的增量附加检查列最后一个值。
这很好用,现在我想根据dept
和dept_name
列为我的hive表ts
添加动态分区。
我知道我可以在sqoop之外创建表动态分区,但需要帮助将数据加载到动态分区。我看到了一个使用--hive-partition-key
& --hive-partition-value
,但价值是硬编码的。如果没有对hive-partition-values进行硬编码,我可以使用SQOOP(dept1,timestamp1 / dept1,timestamp2..etc)和(dept2,timestamp1 / dept2,timestamp2 ......等)自动将数据加载到相应的分区吗?
答案 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'