我的用例是我尝试使用 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/

10-17 01:24