0

我正在尝试运行一个 sqoop 作业以将数据从 postgresql 摄取到 hdfs,但我被困在某个点上。

Sqoop在我的“ WHERE ”语句的末尾添加“ AND (1=0) ”,以便在摄取之前获取元数据。

sqoop import 
--connect jdbc:postgresql://randomtexthere.com:5432/test 
--username user
-P 
--query 
"
SELECT * 
FROM table1 pr 
   INNER JOIN 
   table2 fr 
   ON pr.id = fr.id 
WHERE fr.another_id > 12345 AND fr.another_id < 123456 AND \$CONDITIONS
" 
--hcatalog-database test
--hcatalog-storage-stanza "STORED AS PARQUET" 
--hcatalog-table table1--split-by  id

添加上述命令后,查询永远不会完成。(在 Sqoop 和 DBeaver 中)

但是,此查询仅在我设置 SET OPTIMIZER = ON 后才有效(在 DBeaver 中)

SET OPTIMIZER = ON;

SELECT * 
FROM table1 pr 
   INNER JOIN 
   table2 fr 
   ON pr.id = fr.id 
WHERE fr.another_id > 12345 AND fr.another_id < 123456 AND (1=0);

我正在寻找在我的 sqoop 会话中设置优化器参数的解决方案。

有没有办法做到这一点?

4

1 回答 1

0

在 jdbc 连接中传递优化器提示可以解决问题。

--connect jdbc:postgresql://randomtexthere.com:5432/test?optimizer=true
于 2021-01-04T13:45:06.203 回答