有没有可靠有效的方法来确保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
}
}]
}
}
});
但是我仍然需要确保子查询具体化,如果查询优化器发现我只对总计数感兴趣,这一点并不明显。也许有一些提示可以强制执行或其他技巧?
答案 0 :(得分:1)
AFAIK你不能用 Impala 做到这一点,而且永远无法做到。
Cloudera专门设计了该工具,以支持Tableau,Qlik,MicroStrategy等BI工具,但不支持 ad hoc ETL脚本。
另一方面, Hive 现在附带了一个可能符合您需求的“HPL-SQL”过程语言包装器。注意事项:
HPL-SQL工具声称它还支持Impala查询,但我从未调查过该声明。可以解决你的问题,作为一种笨拙的解决方法。
参考文献:
HIVE-11055(PL / HQL工具为Hive代码库做出了贡献)
HPL/SQL website
说到解决方法,为什么不按照自己的建议使用 Spark ?您可以使用Spark本机Parquet库或使用与Impala守护程序的自定义JDBC连接来读取Impala / Hive表。实质上它与HPL / SQL解决方案类似。