确保实现impala查询

zi8p0yeb  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(523)

有没有可靠而有效的方法来确保impala查询结果在不将结果打印到控制台的情况下完全具体化?例如,我将使用内部连接查询。
实现查询结果的明显方法是创建select表。

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

它的问题是,它写入磁盘,因此效率低下。我正在寻找执行查询并确保结果具体化的最有效方法。
例如,在spark中,我可以使用 .cache 方法后跟 .count 以确保查询是具体化的。

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

我可以尝试子查询的解决方法。

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

但我仍然需要确保子查询是具体化的,如果查询优化器发现我只对total count感兴趣,这一点就不明显了。也许有一些提示来加强这一点或其他技巧?

qlvxas9a

qlvxas9a1#

你不能用 Impala 来做,而且永远也做不到。
cloudera专门设计了这个工具来支持bi工具,比如tableau、qlik、microstrategy等等,但不支持特殊的etl脚本。
另一方面,hive现在附带了一个“hplsql”过程语言 Package 器,可以满足您的需要。注意事项:
需要配置单元2.0+
需要在HPLSQL解释器中运行整个脚本,而不是在基本配置单元客户端(也不是标准的jdbc连接)中运行
hplsql工具声称它也支持impala查询,但我从未调查过这种说法。可以解决你的问题,作为一种笨拙的解决方法。
参考文献:
  hive-11055(pl/hql工具提供了hive代码库)
  hpl/sql网站
说到解决方法,为什么不像你建议的那样使用spark呢?您可以阅读impala/hive表,可以使用spark本机parquet库,也可以使用到impala守护进程的自定义jdbc连接。本质上,它类似于hpl/sql解决方案。

相关问题