我的用例是我尝试使用 union all
合并 hive(外部表)中的两个表,但问题是这个联合生成两个目录(SUB_DIR_1 和 SUB_DIR_2)而不是文件(SUCCES_, 0000, 0001),它使 Sqoop 复杂化使用 (export-dir) 导出 。
CREATE EXTERNAL TABLE test(id INT, name STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION /user/foo/test;
INSERT OVERWRITE TABLE test SELECT * FROM (
SELECT * FROM test-1
UNION ALL
SELECT * FROM test-2
);
测试-1
id name
1 coco
2 bango
测试 2
id name
3 goo
4 boo
测试
id name
1 coco
2 bango
3 goo
4 boo
Sqoop 命令:
sqoop export –connect jdbc:mysql://db.example.com/foo --table test --export-dir /user/foo/test
当我执行 Sqoop 命令时出现错误:
最佳答案
作为可能的解决方法,您可以通过添加 DISTRIBUTE BY
在加载表时触发 reducer 步骤:
INSERT OVERWRITE TABLE test
SELECT *
FROM
(
SELECT * FROM test-1
UNION ALL
SELECT * FROM test-2
)
DISTRIBUTE BY ID;
这将加载到没有子目录的表位置。
关于hadoop - Sqoop:如何从 hive 联合导出表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57879828/