cloudera cdh - 确保 Impala 查询具体化



有什么可靠和有效的方法来确保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;

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

AFAIK 你不能用黑斑羚做到这一点,也永远做不到。
Cloudera专门设计该工具来支持BI工具,如Tableau,Qlik,MicroStrategy等 - 但不支持临时ETL脚本。

另一方面,Hive现在附带了一个"HPL-SQL"过程语言包装器,可能适合你的需求。警告:

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

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

引用:
  HIVE-11055(PL/HQL工具为Hive代码库做出了贡献)
  HPL/SQL 网站


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

相关内容

  • 没有找到相关文章

最新更新