式パーティショニング (推奨)
v3.0以降、StarRocksは式パーティショニング(以前は自動パーティショニングとして知られていました)をサポートしており、より柔軟でユーザーフレンドリーで す。このパーティショニング方法は、連続する時間範囲やENUM値に基づいてデータをクエリおよび管理するなど、ほとんどのシナリオに適しています。
テーブル作成時にシンプルなパーティション式を指定するだけで済みます。データロード中、StarRocksはデータとパーティション式で定義されたルールに基づいて自動的にパーティションを作成します。テーブル作成時に多数のパーティションを手動で作成したり、動的パーティションプロパティを設定したりする必要はなくなります。
v3.4以降、式パーティショニングはすべてのパーティショニング戦略を統合し、より複雑なソリューションをサポートするようにさらに最適化されています。ほとんどのケースで推奨され、将来のリリースでは他のパーティショニング戦略に置き換わる予定です。
v3.5以降、StarRocksはストレージ効率とクエリパフォーマンスを最適化するために、時間関数に基づいた式パーティションのマージをサポートしています。詳細については、以下を参照してください。式パーティションのマージ。
シンプルな時間関数式に基づいたパーティショニング
連続する時間範囲に基づいてデータを頻繁にクエリおよび管理する場合、日付型(DATE または DATETIME)の列をパーティション列として指定し、時間関数式でパーティションの粒度として年、月、日、または時間を指定するだけで済みます。StarRocksは、ロードされたデータとパーティション式に基づいて、自動的にパーティションを作成し、パーティションの開始日と終了日または日時を設定します。
ただし、履歴データを月ごとにパーティション分割し、最近のデータを日ごとにパーティション分割するなど、一部の特殊なシナリオでは、以下を使用する必要があります。範囲パーティショニング を使用してパーティションを作成します。
PARTITION BY date_trunc(column) と PARTITION BY time_slice(column) は、式パーティショニングの形式であるにもかかわらず、範囲パーティショニングと見なされます。したがって、ALTER TABLE ... ADD PARTITION ステートメントを範囲パーティションに使用して、そのようなパー ティショニング戦略を使用するテーブルに新しいパーティションを追加できます。
構文
PARTITION BY expression
...
[ PROPERTIES( { 'partition_live_number' = 'xxx' | 'partition_retention_condition' = 'expr' } ) ]
expression ::=
{ date_trunc ( <time_unit> , <partition_column> ) |
time_slice ( <partition_column> , INTERVAL <N> <time_unit> [ , boundary ] ) }
パラメータ
expression
必須: はい
説明: を使用するシンプルな時間関数式date_trunc または time_slice 関数。time_slice 関数を使用する場合、boundary パラメータを渡す必要はありません。このシナリオでは、このパラメータのデ フォルトの有効な値は floor であり、値は ceil にはならないためです。
time_unit
必須: はい
説明: パーティションの粒度。hour、day、week、month、または year のいずれかです。パーティションの粒度が hour の場合、パーティション列は DATETIME データ型である必要があり、DATE データ型であってはなりません。
partition_column
必須: はい
説明: パーティション列の名前。
- パーティション列は
DATEまたはDATETIMEデータ型のみにできます。パーティション列はNULL値を許可します。 date_trunc関数が使用されている場合、パーティション列はDATEまたはDATETIMEデータ型にできます。time_slice関数が使用されている場合、パーティション列はDATETIMEデータ型である必要があります。- パーティション列が
DATEデータ型の場合、サポートされる範囲は[0000-01-01 ~ 9999-12-31]です。パーティション列がDATETIMEデータ型の場合、サポートされる範囲は[0000-01-01 01:01:01 ~ 9999-12-31 23:59:59]です。 - 現在、パーティション列は1つのみ指定できます。複数のパーティション列はサポートされていません。
partition_live_number
必須: いいえ
説明: 保持する最新のパーティションの数。パーティションは時系列順にソートされ、現在の日付を基準として; 現在の日付から partition_live_number を引いた日付より古いパーティションは削除されます。StarRocksはパーティションの数を管理するタスクをスケジュールし、スケジューリング間隔はFE動的パラメータ dynamic_partition_check_interval_seconds を介して設定でき、デフォルトは600秒(10分)です。現在の日付が2023年4月4日で、partition_live_number が 2 に設定されており、パーティションに p20230401、p20230402、p20230403、p20230404 が含まれているとします。パーティション p20230403 と p20230404 は保持され、他のパーティションは削除されます。将来の日付である4月5日と4月6日のデータなど、ダーティデータがロードされた場合、パーティションには p20230401、p20230402、p20230403、p20230404、p20230405、および p20230406 が含まれます。その後、パーティション p20230403、p20230404、p20230405、および p20230406 は保持され、他のパーティションは削除されます。
partition_retention_condition
v3.5.0以降、StarRocksネイティブテーブルは共通パーティション式TTLをサポートしています。
partition_retention_condition: 動的に保持するパーティションを宣言する式です。この式の条件を満たさないパーティションは定期的に削除されます。例: 'partition_retention_condition' = 'dt >= CURRENT_DATE() - INTERVAL 3 MONTH'。
- 式にはパーティション列と定数のみを含めることができます。非パーティション列はサポートされていません。
- 共通パーティション式は、リストパーティションとレンジパーティションに異なる方法で適用されます。
- リストパーティションを持つテーブルの場合、StarRocksは共通パーティション式によってフィルタリングされたパーティションの削除をサポートします。
- レンジパーティションを持つテーブルの場合、StarRocksはFEのパーティションプルーニング機能を使用してのみパーティションをフィルタリングおよび削除できます。パーティションプルーニングでサポートされていない述語に対応するパーティションは、フィルタリングおよび削除できません。