gpt4 book ai didi

cloudera-cdh - 确保 Impala 查询得到具体化

转载 作者:行者123 更新时间:2023-12-05 01:17:01 27 4
gpt4 key购买 nike

是否有任何可靠且有效的方法来确保 impala 查询结果得到完全具体化,而无需将结果打印到控制台?作为示例,我将使用 INNER JOIN 查询。

具体化查询结果的明显方法是创建表作为选择

CREATE TABLE t3 STORED AS PARQUET AS SELECT t1.* FROM t1 INNER JOIN t2 ON t1.id=t2.id;

它的问题是它写入磁盘因此效率低下。我正在寻找执行查询并确保结果具体化的最有效方式。

例如,在 Spark 中,我可以使用 .cache 方法,然后使用 .count 来确保实现查询。

val t3 = t1.join(t2, "id")
t3.cache
t3.count

我可以尝试使用子查询来解决问题。

SELECT COUNT(*) FROM (SELECT t1.* FROM t1 INNER JOIN t2 ON t1.id=t2.id) t3;

但我仍然需要确保子查询被具体化,如果查询优化器发现我只对总数感兴趣,这并不明显。也许有一些提示可以强制执行该操作或其他技巧?

最佳答案

据我所知,你不能用 Impala 做到这一点,而且永远也做不到。
Cloudera 专门设计该工具以支持 BI 工具,例如 Tableau、Qlik、MicroStrategy 等,但不支持 ad hoc ETL 脚本。

另一方面,Hive 现在附带一个可能满足您需要的“HPL-SQL”过程语言包装器。注意事项:

  • 需要 Hive 2.0+
  • 需要在 HPL-SQL 解释器内部运行整个脚本,而不是基本的 Hive 客户端(也不是标准的 JDBC 连接)

HPL-SQL 工具声称它也支持 Impala 查询,但我从未调查过该声明。可以解决您的问题,作为一种笨拙的解决方法。

引用资料:
HIVE-11055 (PL/HQL 工具贡献了 Hive 代码库)
HPL/SQL website


说到解决方法,为什么不按照您自己的建议使用 Spark?您可以使用 Spark 原生 Parquet 库或使用与 Impala 守护程序的自定义 JDBC 连接来阅读 Impala/Hive 表。从本质上讲,它类似于 HPL/SQL 解决方案。

关于cloudera-cdh - 确保 Impala 查询得到具体化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38402974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com