我正在改善表格的表现。
说这个表:
CREATE TABLE user_info_bucketed(user_id BIGINT, firstname STRING, lastname STRING)
COMMENT 'A bucketed copy of user_info'
PARTITIONED BY(Year int, month int)
STORED AS PARQUET;
我打算通过user_id应用bucketing,因为查询通常将user_id作为子句。
像这样CREATE TABLE user_info_bucketed(user_id BIGINT, firstname STRING, lastname STRING)
COMMENT 'A bucketed copy of user_info'
PARTITIONED BY(Year int, month int)
CLUSTERED BY(user_id) INTO 256 BUCKETS
STORED AS PARQUET;
此表将使用Hive创建并加载,并从Impala中查询...
我想知道的是,这个表是否能够提高impala查询的性能 - 我不确定impala如何与存储桶一起工作。
答案 0 :(得分:2)
我尝试通过Hive(这是一个6GB的表格)创建一个bucketed和non-bucketed表格表
我尝试对两者的结果进行基准测试。有轻微/没有区别。
我也试过分析两个查询的配置文件,但没有太大的区别。
答案是,Impala不知道某个表是否被删除,因此它没有利用它(IMPALA-1990)。了解表中分区和文件的唯一方法是使用COMPUTE STATS
顺便说一句,对Impala使用的表进行分解并不浪费。 如果我们必须限制表格中的小文件数量,我们可以将其打开并打开Hive transactions(可从Hive 0.13.0获得)