确保实现Impala查询

时间:2016-07-15 18:32:21

标签: cloudera-cdh impala bigdata

有没有可靠有效的方法来确保impala查询结果完全实现而不将结果打印到控制台? 例如,我将使用INNER JOIN查询。

实现查询结果的显而易见的方法是将表创建为选择

.cache

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

例如,在Spark中,我可以使用.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;

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

var chart = new Chart(ctx, {
        type: 'bubble',
        data: bubbleChartData,
        options: {
            scales: {
                xAxes: [
                {
                    ticks: {
                        min: -10,
                        max: 100
                    }
                }]
            }
        }
    });

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

1 个答案:

答案 0 :(得分:1)

AFAIK你不能用 Impala 做到这一点,而且永远无法做到。
Cloudera专门设计了该工具,以支持Tableau,Qlik,MicroStrategy等BI工具,但不支持 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解决方案类似。