全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件

使用排序键(SortKey)

更新时间:2017-12-11 17:13:55

排序键(SortKey)是表的一种属性,可以将数据按照排序键顺序存储在磁盘文件中。使用排序键的优势主要有:

  • 加速列存优化,收集的 min、max 元信息很少有重叠,过滤性好。
  • 避免对含有 order by 和 group by 等需要排序的 SQL 数据再次排序,从磁盘中直接读取出来的数据就是满足条件的有序数据。

本文介绍了排序键在不同场景下的用法。

创建表时定义排序键

使用命令 CREATE TABLE 定义一个新的表。语法如下:

  1. CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name (
  2. [ { column_name data_type [ DEFAULT default_expr ] [column_constraint [ ... ]
  3. [ ENCODING ( storage_directive [,...] ) ]
  4. ]
  5. | table_constraint
  6. | LIKE other_table [{INCLUDING | EXCLUDING}
  7. {DEFAULTS | CONSTRAINTS}] ...}
  8. [, ... ] ]
  9. [column_reference_storage_directive [, ] ]
  10. )
  11. [ INHERITS ( parent_table [, ... ] ) ]
  12. [ WITH ( storage_parameter=value [, ... ] )
  13. [ ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP} ]
  14. [ TABLESPACE tablespace ]
  15. [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]
  16. [ SORTKEY (column, [ ... ] )]
  17. [ PARTITION BY partition_type (column)
  18. [ SUBPARTITION BY partition_type (column) ]
  19. [ SUBPARTITION TEMPLATE ( template_spec ) ]
  20. [...]
  21. ( partition_spec )
  22. | [ SUBPARTITION BY partition_type (column) ]
  23. [...]
  24. ( partition_spec
  25. [ ( subpartition_spec
  26. [(...)]
  27. ) ]
  28. )

样例

  1. create table test(date text, time text, open float, high float, low float, volume int) with(APPENDONLY=true,ORIENTATION=column) sortkey (volume);

对表进行排序

命令如下:

  1. VACUUM SORT ONLY [tablename]

修改排序键

命令如下:

  1. ALTER [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name SET SORTKEY (column, [ ... ] )

注意:这个命令只会修改 catalog,不会对数据立即排序,需要使用 VACUUM SORT ONLY 命令排序。

样例

  1. alter table test set sortkey (high,low);

注意事项

一旦对表进行了更新(例如 Insert、Update、Delete),表的数据将被视为未按排序键排序,查询中不会将直接从磁盘读出的数据视为有序数据。此时,需要重新执行 VACUUM SORT ONLY 命令重新整理表数据。

本文导读目录