メインコンテンツまでスキップ

Temporary partition

一時的なパーティション

このトピックでは、一時的なパーティション機能の使用方法について説明します。

定義済みのパーティショニングルールがあるパーティションテーブル上で一時的なパーティションを作成し、これらの一時的なパーティションのために新しいデータ分散戦略を定義することができます。一時的なパーティションは、パーティション内のデータを原子的に上書きする場合や、パーティショニングやバケット戦略を調整する場合に一時的なデータキャリアとして機能します。一時的なパーティションでは、特定の要件を満たすために、パーティション範囲、バケットの数、レプリカの数、ストレージメディアなどのデータ分散戦略をリセットすることができます。

一時的なパーティション機能は、次のシナリオで使用することができます。

  • 原子的な上書き操作パーティション内のデータを書き換える必要があり、書き換えプロセス中にデータをクエリできるようにする場合、最初に元の形式パーティションを基に一時的なパーティションを作成し、新しいデータを一時的なパーティションにロードします。その後、置換(replace)操作を使用して元の形式パーティションを一時的なパーティションで原子的に置き換えることができます。非パーティションテーブルでの原子的な上書き操作については、ALTER TABLE - SWAPを参照してください。
  • パーティションデータクエリの同時実行の調整パーティションのバケット数を変更する必要がある場合、まず元の形式パーティションと同じパーティション範囲を持つ一時的なパーティションを作成し、新しいバケット数を指定します。次に、INSERT INTOコマンドを使用して元の形式パーティションのデータを一時的なパーティションにロードします。最後に、置換(replace)操作を使用して元の形式パーティションを一時的なパーティションで原子的に置き換えることができます。
  • パーティショニングルールの変更パーティションをマージしたり、大きなパーティションを複数の小さなパーティションに分割するなど、パーティショニング戦略を変更したい場合、最初に期待するマージまたは分割範囲で一時的なパーティションを作成します。次に、INSERT INTOコマンドを使用して元の形式パーティションのデータを一時的なパーティションにロードします。最後に、置換(replace)操作を使用して元の形式パーティションを一時的なパーティションで原子的に置き換えることができます。

一時的なパーティションの作成

ALTER TABLE コマンドを使用して、一度に1つ以上のパーティションを作成することができます。

構文

単一の一時的なパーティションの作成

ALTER TABLE <table_name>
ADD TEMPORARY PARTITION <temporary_partition_name> VALUES [("value1"), {MAXVALUE|("value2")})]
[(partition_desc)]
[DISTRIBUTED BY HASH(<bucket_key>)];
ALTER TABLE <table_name>
ADD TEMPORARY PARTITION <temporary_partition_name> VALUES LESS THAN {MAXVALUE|(<"value">)}
[(partition_desc)]
[DISTRIBUTED BY HASH(<bucket_key>)];

一度に複数のパーティションを作成

ALTER TABLE <table_name>
ADD TEMPORARY PARTITIONS START ("value1") END ("value2") EVERY {(INTERVAL <num> <time_unit>)|<num>}
[(partition_desc)]
[DISTRIBUTED BY HASH(<bucket_key>)];

パラメータ

partition_desc:一時的なパーティションのバケット数やレプリカ数、ストレージメディアなどのプロパティを指定します。

テーブル site_access に一時的なパーティション tp1 を作成し、その範囲を 2020-01-01 から 2020-02-01 の間として指定します。

ALTER TABLE site_access
ADD TEMPORARY PARTITION tp1 VALUES [("2020-01-01"), ("2020-02-01"));

テーブル site_access に一時的なパーティション tp2 を作成し、上限を 2020-03-01 として指定します。StarRocksは、前の一時的なパーティションの上限をこの一時的なパーティションの下限として使用し、左閉区間と右開区間 [2020-02-01, 2020-03-01) の一時的なパーティションを生成します。

ALTER TABLE site_access
ADD TEMPORARY PARTITION tp2 VALUES LESS THAN ("2020-03-01");

テーブル site_access に一時的なパーティション tp3 を作成し、上限を 2020-04-01 、レプリカ数を 1 として指定します。

ALTER TABLE site_access
ADD TEMPORARY PARTITION tp3 VALUES LESS THAN ("2020-04-01")
("replication_num" = "1")
DISTRIBUTED BY HASH (site_id);

テーブル site_accessSTART ("2020-04-01") END ("2021-01-01") EVERY (INTERVAL 1 MONTH) の範囲で一度に複数のパーティションを作成します。

ALTER TABLE site_access 
ADD TEMPORARY PARTITIONS START ("2020-04-01") END ("2021-01-01") EVERY (INTERVAL 1 MONTH);

使用上の注意

  • 一時的なパーティションのパーティション列は、一時的なパーティションを作成するための元の形式パーティションのパーティション列と同じでなければなりません。
  • 一時的なパーティションの名前は、元の形式パーティションや他の一時的なパーティションの名前と同じにすることはできません。
  • テーブル内のすべての一時的なパーティションの範囲は重複してはなりませんが、一時的なパーティションと形式的なパーティションの範囲は重なる場合があります。

一時的なパーティションの表示

SHOW TEMPORARY PARTITIONS コマンドを使用して、一時的なパーティションを表示することができます。

SHOW TEMPORARY PARTITIONS FROM [db_name.]table_name [WHERE] [ORDER BY] [LIMIT]

一時的なパーティションにデータをロードする

INSERT INTO コマンド、STREAM LOAD、またはBROKER LOADを使用して、一つ以上の一時的なパーティションにデータをロードすることができます。

INSERT INTO コマンドを使用してデータをロードする

例:

INSERT INTO site_access TEMPORARY PARTITION (tp1) VALUES ("2020-01-01",1,"ca","lily",4);
INSERT INTO site_access TEMPORARY PARTITION (tp2) SELECT * FROM site_access_copy PARTITION p2;
INSERT INTO site_access TEMPORARY PARTITION (tp3, tp4,...) SELECT * FROM site_access_copy PARTITION (p3, p4,...);

詳細な構文とパラメータの説明については、INSERT INTO を参照してください。

STREAM LOAD を使用してデータをロードする

例:

curl --location-trusted -u root: -H "label:123" -H "Expect:100-continue" -H "temporary_partitions: tp1, tp2, ..." -T testData \
http://host:port/api/example_db/site_access/_stream_load

詳細な構文とパラメータの説明については、STREAM LOAD を参照してください。

BROKER LOAD を使用してデータをロードする

例:

LOAD LABEL example_db.label1
(
DATA INFILE("hdfs://hdfs_host:hdfs_port/user/starrocks/data/input/file")
INTO TABLE my_table
TEMPORARY PARTITION (tp1, tp2, ...)
...
)
WITH BROKER
(
StorageCredentialParams
);

ここで、StorageCredentialParams は、選択する認証メソッドに応じて異なる認証パラメータのグループを表します。詳細な構文とパラメータの説明については、BROKER LOAD を参照してください。

ROUTINE LOAD を使用してデータをロードする

例:

CREATE ROUTINE LOAD example_db.site_access ON example_tbl
COLUMNS(col, col2,...),
TEMPORARY PARTITIONS(tp1, tp2, ...)
FROM KAFKA
(
"kafka_broker_list" ="<kafka_broker1_ip>:<kafka_broker1_port>,<kafka_broker2_ip>:<kafka_broker2_port>",
"kafka_topic" = "ordertest"
);

詳細な構文とパラメータの説明については、CREATE ROUTINE LOAD を参照してください。

一時的なパーティション内のデータをクエリする

SELECT ステートメントを使用して、指定した一時的なパーティション内のデータをクエリすることができます。

SELECT * FROM
site_access TEMPORARY PARTITION (tp1);

SELECT * FROM
site_access TEMPORARY PARTITION (tp1, tp2, ...);

SELECT event_day,site_id,pv FROM
site_access TEMPORARY PARTITION (tp1, tp2, ...);

JOIN句を使用して、二つのテーブルから一時的なパーティション内のデータをクエリすることもできます。

SELECT * FROM
site_access TEMPORARY PARTITION (tp1, tp2, ...)
JOIN
site_access_copy TEMPORARY PARTITION (tp1, tp2, ...)
ON site_access.site_id=site_access1.site_id and site_access.event_day=site_access1.event_day;

元の形式パーティションを一時的なパーティションで置き換える

ALTER TABLE ステートメントを使用して、元の形式パーティションを一時的なパーティションで置き換えて新しい形式パーティションを作成することができます。

注意

ALTER TABLE ステートメントで操作された元の形式パーティションと一時的なパーティションは削除され、回復することはできません。

構文

ALTER TABLE table_name REPLACE PARTITION (partition_name) WITH TEMPORARY PARTITION (temporary_partition_name1, ...)
PROPERTIES ("key" = "value");

パラメータ

  • strict_rangeデフォルト値: true。このパラメータが true に設定されている場合、すべての元の形式パーティションの範囲の和集合は、置換に使用される一時的なパーティションの範囲の和集合とまったく同じでなければなりません。このパラメータが false に設定されている場合、置換後に新しい形式パーティションの範囲が他の形式パーティションと重複しないようにする必要があります。
    • 例 1:以下の例では、元の形式パーティション p1p2p3 の範囲の和集合は一時的なパーティション tp1tp2 の範囲の和集合と同じであり、tp1tp2p1p2p3 の置換に使用することができます。

      # 元の形式パーティション p1、p2、p3 の範囲 => これらの範囲の和集合
      [10, 20), [20, 30), [40, 50) => [10, 30), [40, 50)

      # 一時的なパーティション tp1 と tp2 の範囲 => これらの範囲の和集合
      [10, 30), [40, 45), [45, 50) => [10, 30), [40, 50)
    • 例 2:以下の例では、元の形式パーティションの範囲の和集合と一時的なパーティションの範囲の和集合が異なります。パラメータ strict_range の値が true に設定されている場合、一時的なパーティション tp1tp2 は元の形式パーティション p1 を置き換えることはできません。値が false に設定されている場合、一時的なパーティションの範囲が他の形式パーティションと重複しない限り、[10, 30) と [40, 50) の範囲が一時的なパーティションで置き換えることができます。

      # 元の形式パーティション p1 の範囲 => 範囲の和集合
      [10, 50) => [10, 50)

      # 一時的なパーティション tp1 と tp2 の範囲 => これらの範囲の和集合
      [10, 30), [40, 50) => [10, 30), [40, 50)
  • use_temp_partition_nameデフォルト値: false。置換のために使用される元の形式パーティションの数が置換に使用される一時的なパーティションの数と同じ場合、このパラメータが false の場合、置換後の新しい形式パーティションの名前は変更されず、元の形式パーティションと同じ名前のままです。このパラメータが true の場合、置換後の新しい形式パーティションの名前には一時的なパーティションの名前が使用されます。以下の例では、パラメータが false に設定されている場合、新しい形式パーティションのパーティション名は p1 のままですが、関連するデータとプロパティは一時的なパーティション tp1 のデータとプロパティで置き換えられます。パラメータが true に設定されている場合、置換後の新しい形式パーティションのパーティション名は tp1 に変更されます。元の形式パーティション p1 は存在しなくなります。
    ALTER TABLE tbl1 REPLACE PARTITION (p1) WITH TEMPORARY PARTITION (tp1);
    置換する形式パーティションの数が置換に使用される一時的なパーティションの数と異なる場合、かつこのパラメータのデフォルト値 false のままの場合、このパラメータの値 false は無効です。以下の例では、置換後に新しい形式パーティションの名前が tp1 に変更され、元の形式パーティション p1p2 は存在しなくなります。
    ALTER TABLE site_access REPLACE PARTITION (p1, p2) WITH TEMPORARY PARTITION (tp1);

元の形式パーティション p1 を一時的なパーティション tp1 で置き換えます。

ALTER TABLE site_access REPLACE PARTITION (p1) WITH TEMPORARY PARTITION (tp1);

元の形式パーティション p2p3 を一時的なパーティション tp2tp3 で置き換えます。

ALTER TABLE site_access REPLACE PARTITION (p2, p3) WITH TEMPORARY PARTITION (tp2, tp3);

元の形式パーティション p4p5 を一時的なパーティション tp4tp5 で置き換え、strict_range パラメータを false に、use_temp_partition_name パラメータを true に指定します。

ALTER TABLE site_access REPLACE PARTITION (p4, p5) WITH TEMPORARY PARTITION (tp4, tp5)
PROPERTIES (
"strict_range" = "false",
"use_temp_partition_name" = "true"
);

使用上の注意

  • テーブルに一時的なパーティションがある場合、ALTERコマンドを使用してそのテーブルにスキーマ変更操作を実行することはできません。
  • テーブルのスキーマ変更操作を実行する場合、一時的なパーティションをテーブルに追加することはできません。

一時的なパーティションの削除

以下のコマンドを使用して、一時的なパーティション tp1 を削除します。

ALTER TABLE site_access DROP TEMPORARY PARTITION tp1;

以下の制限事項に注意してください。

  • DROP コマンドを使用してデータベースまたはテーブルを直接削除した場合、RECOVER コマンドを使用して一定期間内にデータベースまたはテーブルを復元することができますが、一時的なパーティションは復元できません。
  • ALTER コマンドを使用して元の形式パーティションを削除した場合、RECOVER コマンドを使用して一定期間内に復元することができます。一時的なパーティションは形式的なパーティションとは結びついていないため、一時的なパーティションに対する操作は形式的なパーティションに影響を与えません。
  • ALTER コマンドを使用して一時的なパーティションを削除した場合、RECOVER コマンドを使用して復元することはできません。
  • TRUNCATE コマンドを使用してテーブル内のデータを削除した場合、テーブルの一時的なパーティションも削除され、復元することはできません。
  • TRUNCATE コマンドを使用して形式的なパーティション内のデータを削除した場合、一時的なパーティションは影響を受けません。
  • TRUNCATE コマンドは一時的なパーティション内のデータを削除することはできません。