首页 > 解决方案 > Sqoop:如何从 hive 联合导出表

问题描述

我的用例是我尝试使用 合并配置单元(外部表)中的两个表union all,但问题是这个联合生成两个目录(SUB_DIR_1 和 SUB_DIR_2)而不是文件(SUCCES_、0000、0001),它使Sqoop 导出使用复杂化(出口目录)。

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
);

测试一

 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 不是文件

标签: hadoophivehiveqlsqoop

解决方案


作为可能的解决方法,您可以在加载表时触发减速器步骤,方法是添加DISTRIBUTE BY

INSERT OVERWRITE TABLE test 
SELECT * 
FROM 
(
  SELECT * FROM test-1
  UNION ALL
  SELECT * FROM test-2
) 
DISTRIBUTE BY ID;

这将加载到没有子目录的表位置。


推荐阅读