SortKey は、ディスク上のファイルに SortKey 順でデータを格納するためのテーブル属性です。SortKey には、次の利点があります。
列ストアの最適化が高速化されます。収集される最小メタ情報と最大メタ情報が重複することはほとんどなく、便利なフィルターとして使用できます。
「order by」や「group by」を使用してデータを並べ替える必要がありません。ディスクから直接読み込まれるデータは、ソート条件に従って並んでいます。
このドキュメントは、SortKey のさまざまな使用方法について説明します。
SortKey の定義
CREATE TABLE
コマンドを使用して、SortKey を含む新しいテーブルを定義できます。構文は次のとおりです。
CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name (
[ { column_name data_type [ DEFAULT default_expr ] [column_constraint [ ... ]
[ ENCODING ( storage_directive [,...] ) ]
]
| table_constraint
| LIKE other_table [{INCLUDING | EXCLUDING}
{DEFAULTS | CONSTRAINTS}] ...}
[, ... ] ]
[column_reference_storage_directive [, ] ]
)
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH ( storage_parameter=value [, ... ] )
[ ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP} ]
[ TABLESPACE tablespace ]
[ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]
[ SORTKEY (column, [ ... ] )]
[ PARTITION BY partition_type (column)
[ SUBPARTITION BY partition_type (column) ]
[ SUBPARTITION TEMPLATE ( template_spec ) ]
[...]
( partition_spec )
| [ SUBPARTITION BY partition_type (column) ]
[...]
( partition_spec
[ ( subpartition_spec
[(...)]
) ]
)
例
create table test(date text, time text, open float, high float, low float, volume int) with(APPENDONLY=true,ORIENTATION=column) sortkey (volume);
テーブルの並べ替え
コマンドは、次のとおりです。
VACUUM SORT ONLY [tablename]
SortKey の変更
コマンドは、次のとおりです。
ALTER [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name SET SORTKEY (column, [ ... ] )
注:このコマンドは、データを直接並べ替えず、カタログだけを変更します。データを並べ替えるには、VACUUM SORT ONLY
コマンドを使用する必要があります。
例
alter table test set sortkey (high,low);
注
テーブルを更新 (Insert、Update、Delete など) すると、テーブル内のデータは SortKey 順に並んでいるとはみなされず、クエリでディスクから読み込まれたデータも、SortKey 順に並んでいるとはみなされません。この場合、VACUUM SORT ONLY
コマンドを再実行し、テーブル内のデータを再度並べ替える必要があります。