代码之家  ›  专栏  ›  技术社区  ›  James

配置单元分区性能

  •  2
  • James  · 技术社区  · 7 年前

    我想问一下配置单元分区的性能。 为了查看分区性能,我需要多少记录(按行计算)?

    我的分区条件如下:

    • ADD PARTITION (year_month=’2017_07’)
    • ADD PARTITION (year_month=’2017_08’)
    • INSERT OVERWRITE TABLE T PARTITION (year_month='2017_07') SELECT * FROM T WHERE st_time < '2017_08_01 00:00:00.0';
    • INSERT OVERWRITE TABLE T PARTITION (year_month='2017_08') SELECT * FROM T WHERE st_time >= '2017_08_01 00:00:00.0';

    我的性能测试查询如下:

    • SELECT * FROM T WHERE st_time < '2017_08_01 00:00:00.0';
    • SELECT * FROM non_part_table WHERE st_time < '2017_08_01 00:00:00.0';

    我是否遗漏了一些重要的观点?

    此外,分区对派生列/函数有效吗?E、 g.日期格式(st\U时间,yyyy-MM)

    非常感谢您的帮助或建议。

    1 回复  |  直到 7 年前
        1
  •  2
  •   OneCricketeer    7 年前

    两个表的性能相对相同

    您忘记了针对分区的WHERE子句。分区只能在选择数据时提高性能 .

    SELECT * FROM T 
    WHERE year_month = '2017_07'
    -- AND st_time < '2017_08_01 00:00:00.0'
    ;
    

    没有这个,你仍然在扫描整张桌子 st_time 价值观

    您可以添加 EXPLAIN 以查看差异

    通过将数据转换为拼花地板或ORC,您将获得额外的性能改进