Sqoop:如何从配置单元联合中导出 table
Sqoop: How to export table from hive union resulting
我的用例是我尝试使用union all
在配置单元(外部table)中合并两个table,但问题是这个联合生成了两个目录(SUB_DIR_1 和 SUB_DIR_2) 而不是文件 (SUCCES_, 0000, 0001),它使用 (export-dir).
使 Sqoop export 复杂化
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 命令时出现错误:
/user/foo/test.SUB_DIR_1 is not file
作为可能的解决方法,您可以通过添加 DISTRIBUTE BY
:
在加载 table 时触发减速器步骤
INSERT OVERWRITE TABLE test
SELECT *
FROM
(
SELECT * FROM test-1
UNION ALL
SELECT * FROM test-2
)
DISTRIBUTE BY ID;
这将加载到没有子目录的 table 位置。
我的用例是我尝试使用union all
在配置单元(外部table)中合并两个table,但问题是这个联合生成了两个目录(SUB_DIR_1 和 SUB_DIR_2) 而不是文件 (SUCCES_, 0000, 0001),它使用 (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 命令时出现错误:
/user/foo/test.SUB_DIR_1 is not file
作为可能的解决方法,您可以通过添加 DISTRIBUTE BY
:
INSERT OVERWRITE TABLE test
SELECT *
FROM
(
SELECT * FROM test-1
UNION ALL
SELECT * FROM test-2
)
DISTRIBUTE BY ID;
这将加载到没有子目录的 table 位置。