Ren*_*van 5 hadoop hive impala
我正在改进表的性能.
说这个表:
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;
Run Code Online (Sandbox Code Playgroud)
我打算通过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;
Run Code Online (Sandbox Code Playgroud)
该表将使用Hive创建并加载,并从Impala中查询...
我想知道的是,这个表是否能够提高impala查询的性能 - 我不确定impala如何与存储桶一起工作.
我尝试通过Hive创建分桶表和非分桶表(这是一个大小为6GB的表)
我尝试对两者的结果进行基准测试。有轻微/没有差异。
我还尝试分析这两个查询的配置文件,但没有显示出太大差异。
所以答案是,Impala 不知道表是否已分桶,因此它不会利用它(IMPALA-1990)。它了解表中分区和文件的唯一方法是使用COMPUTE STATS
顺便说一下,对 Impala 使用的表进行存储并不是浪费。如果我们必须限制表中小文件的数量,我们可以对其进行分桶并开启Hive 事务(从 Hive 0.13.0 开始提供)