技术管理部 2019-02-22 10:06 采纳率: 0%
浏览 878

impala对百万级数据group by速度问题?

请问以下impala查询该如何优化,查询速度有点慢(5s以上)
impala查询语句:
select case when t.nl>=18 and t.nl<=25 then '18-25岁'
when t.nl>=26 and t.nl<=32 then '26-32岁'
when t.nl>=33 and t.nl<=40 then '33-40岁'
when t.nl>=41 and t.nl<=48 then '41-49岁'
when t.nl>=49 and t.nl<=55 then '49-55岁'
end as nld,count(1) jls
from
(select
case when length(sfzh)=18 then
cast(from_unixtime(unix_timestamp(xxrq,'yyyy-MM-dd'),'yyyy') as int)-cast(substr(sfzh,7,4) as int)
else cast(from_unixtime(unix_timestamp(xxrq,'yyyy-MM-dd'),'yyyy') as int)-cast(concat('19',substr(sfzh,7,2)) as int)
end as nl,xxrq,sfzh from hbase_impala.impala_table39119_1550771711308
where sfzh is not null and year(now())-year(xxrq) <=4
) t
where t.nl>=18 and t.nl<=55 group by nld order by nld;

explain结果:图片说明

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 08:50
    关注

    根据您提供的信息,我们可以从以下几方面来优化该impala查询语句的速度:

    1. 索引优化

    在impala查询语句中,where子句中的字段nl和sfzh都应该建立索引,以提高查询速度。您可以通过以下命令来创建索引:

    CREATE INDEX idx_nl ON impala_table39119_1550771711308(nl);

    CREATE INDEX idx_sfzh ON impala_table39119_1550771711308(sfzh);

    1. 减少group by列

    在查询语句中,group by列过多会导致查询速度变慢。因此,您可以尝试减少group by列以提高查询速度。在该查询语句中,我们可以尝试用别的方式来汇总数据,例如使用order by来代替group by。

    1. 数据压缩

    对于百万级数据,可以使用数据压缩来提高查询速度。Impala支持多种数据压缩类型,您可以根据数据特点选择适合的压缩算法来提高数据读取效率。

    1. 使用硬件加速

    可以使用硬件加速来提高查询速度,例如在集群中添加更多的物理节点、更高效的网络互连等方式。

    综上所述,我们可以通过索引优化、减少group by列、数据压缩和使用硬件加速来优化该impala查询语句的速度。

    评论

报告相同问题?

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64