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 位置。