BROKER LOAD
説明
StarRocks は、MySQL ベースのロード方法である Broker Load を提供します。ロードジョブを送信すると、StarRocks は非同期でジョブを実行します。SELECT * FROM information_schema.loads を使用してジョブの結果をクエリできます。この機能は v3.1 以降でサポートされています。背景情報、原則、サポートされているデータファイル形式、単一テーブルロードと複数テーブルロードの実行方法、ジョブ結果の表示方法については、loading overview を参照してください。
You can load data into StarRocks tables only as a user who has the INSERT privilege on those StarRocks tables. If you do not have the INSERT privilege, follow the instructions provided in GRANT to grant the INSERT privilege to the user that you use to connect to your StarRocks cluster. The syntax is GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}.
構文
LOAD LABEL [<database_name>.]<label_name>
(
data_desc[, data_desc ...]
)
WITH BROKER
(
StorageCredentialParams
)
[PROPERTIES
(
opt_properties
)
]
StarRocks では、いくつかのリテラルが SQL 言語によって予約キーワードとして使用されていることに注意してください。これらのキーワードを SQL ステートメントで直接使用しないでください。SQL ステートメントでそのようなキーワードを使用する場合は、バッククォート (`) で囲んでください。Keywords を参照してください。
パラメータ
database_name と label_name
label_name はロードジョブのラベルを指定します。命名規則については、System limits を参照してください。
database_name は、宛先テーブルが属するデータベースの名前をオプションで指定します。
各ロードジョブには、データベース全体で一意のラベルがあります。ロードジョブのラベルを使用して、ロードジョブの実行ステータスを表示し、同じデータを繰り返しロードするのを防ぐことができます。ロードジョブが FINISHED 状態になると、そのラベルは再利用できません。CANCELLED 状態になったロードジョブのラベルのみが再利用可能です。ほとんどの場合、ロードジョブのラベルはそのロードジョブを再試行して同じデータをロードするために再利用され、Exactly-Once セマンティクスを実装します。
ラベルの命名規則については、System limits を参照してください。
data_desc
ロードするデータのバッチの説明です。各 data_desc ディス クリプタは、データソース、ETL 関数、宛先 StarRocks テーブル、および宛先パーティションなどの情報を宣言します。
Broker Load は、一度に複数のデータファイルをロードすることをサポートしています。1 つのロードジョブで、複数の data_desc ディスクリプタを使用してロードしたい複数のデータファイルを宣言するか、1 つの data_desc ディスクリプタを使用して、すべてのデータファイルをロードしたいファイルパスを宣言することができます。Broker Load は、複数のデータファイルをロードする各ロードジョブのトランザクションの原子性も保証します。原子性とは、1 つのロードジョブで複数のデータファイルをロードする際に、すべてのロードが成功するか失敗するかのいずれかであることを意味します。いくつかのデータファイルのロードが成功し、他のファイルのロードが失敗することはありません。
data_desc は次の構文をサポートしています:
DATA INFILE ("<file_path>"[, "<file_path>" ...])
[NEGATIVE]
INTO TABLE <table_name>
[PARTITION (<partition1_name>[, <partition2_name> ...])]
[TEMPORARY PARTITION (<temporary_partition1_name>[, <temporary_partition2_name> ...])]
[COLUMNS TERMINATED BY "<column_separator>"]
[ROWS TERMINATED BY "<row_separator>"]
[FORMAT AS "CSV | Parquet | ORC"]
[(format_type_options)]
[(column_list)]
[COLUMNS FROM PATH AS (<partition_field_name>[, <partition_field_name> ...])]
[SET <k1=f1(v1)>[, <k2=f2(v2)> ...]]
[WHERE predicate]
data_desc には次のパラメータが含まれている必要があります:
-
file_pathロードしたい 1 つまたは複数のデータファイルの保存パスを指定します。
このパラメータを 1 つのデータファイルの保存パスと して指定できます。たとえば、HDFS サーバー上のパス
/user/data/tablenameから20210411という名前のデータファイルをロードするために、このパラメータを"hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/20210411"として指定できます。また、ワイルドカード
?、*、[]、{}、または^を使用して複数のデータファイルの保存パスとしてこのパラメータを指定することもできます。Wildcard reference を参照してください。たとえば、このパラメータを"hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/*/*"または"hdfs://<hdfs_host>:<hdfs_port>/user/data/tablename/dt=202104*/*"として指定して、HDFS サーバー上のパス/user/data/tablenameのすべてのパーティションまたは202104パーティションのみからデータファイルをロードできます。注意
ワイルドカードは中間パスを指定するためにも使用できます。
前述の例では、
hdfs_hostとhdfs_portパラメータは次のように説明されています:-
hdfs_host: HDFS クラスター内の NameNode ホストの IP アドレス。 -
hdfs_host: HDFS クラスター内の NameNode ホストの FS ポート。デフォルトのポート番号は9000です。
注意
- Broker Load は、S3 または S3A プロトコルに 従って AWS S3 へのアクセスをサポートしています。したがって、AWS S3 からデータをロードする場合、ファイルパスとして渡す S3 URI のプレフィックスに
s3://またはs3a://を含めることができます。 - Broker Load は、gs プロトコルに従ってのみ Google GCS へのアクセスをサポートしています。したがって、Google GCS からデータをロードする場合、ファイルパスとして渡す GCS URI のプレフィックスに
gs://を含める必要があります。 - Blob Storage からデータをロードする場合、wasb または wasbs プロトコルを使用してデータにアクセスする必要があります:
- ストレージアカウントが HTTP 経由のアクセスを許可している場合、wasb プロトコルを使用し、ファイルパスを
wasb://<container_name>@<storage_account_name>.blob.core.windows.net/<path>/<file_name>/*として記述します。 - ストレージアカウントが HTTPS 経由のアクセスを許可している場合、wasbs プロトコルを使用し、ファイルパスを
wasbs://<container_name>@<storage_account_name>.blob.core.windows.net/<path>/<file_name>/*として記述します。
- ストレージアカウントが HTTP 経由のアクセスを許可している場合、wasb プロトコルを使用し、ファイルパスを
- Data Lake Storage Gen2 からデータをロードする場合、abfs または abfss プロトコルを使用してデータにアクセスする必要があります:
- ストレージアカウントが HTTP 経由のアクセスを許可している場合、abfs プロトコルを使用し、ファイルパスを
abfs://<container_name>@<storage_account_name>.dfs.core.windows.net/<file_name>として記述します。 - ストレージアカウントが HTTPS 経由のアクセスを 許可している場合、abfss プロトコルを使用し、ファイルパスを
abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<file_name>として記述します。
- ストレージアカウントが HTTP 経由のアクセスを許可している場合、abfs プロトコルを使用し、ファイルパスを
- Data Lake Storage Gen1 からデータをロードする場合、adl プロトコルを使用してデータにアクセスし、ファイルパスを
adl://<data_lake_storage_gen1_name>.azuredatalakestore.net/<path>/<file_name>として記述します。
-
-
INTO TABLE宛先 StarRocks テーブルの名前を指定します。
data_desc には、次のパラメータをオプションで含めることもできます:
-
NEGATIVE特定のデータバッチのロードを取り消します。これを達成するには、
NEGATIVEキーワードを指定して同じデータバッチをロードする必要があります。注意
このパラメータは、StarRocks テーブルが集計テーブルであり、そのすべての値列が
sum関数によって計算される場合にのみ有効です。 -
PARTITIONデータをロードしたいパーティションを指定します。デフォルトでは、このパラメータを指定しない場合、ソースデータは StarRocks テーブルのすべてのパーティションにロードされます。
-
TEMPORARY PARTITIONデータをロードしたい temporary partition の名前を指定します。複数の一時パーティションを指定することができ、カンマ (,) で区切る必要があります。
-
COLUMNS TERMINATED BYデータファイルで使用される列区切り文字を指定します。デフォルトでは、このパラメータを指定しない場合、このパラメータは
\t(タブ) にデフォルト設定されます。このパラメータを使用して指定した列区切り文字は、データファイルで実際に使用されている列区切り文字と同じである必要があります。そうでない場合、データ品質が不十分なためロードジョブが失敗し、そのStateはCANCELLEDになります。Broker Load ジョブは MySQL プロトコルに従って送信されます。StarRocks と MySQL はどちらもロードリクエストで文字をエスケープします。したがって、列区切り文字がタブなどの不可視文字である場合、列区切り文字の前にバックスラッシュ () を追加する必要があります。たとえば、列区切り文字が
\tの場合は\\tを入力する必要があり、列区切り文字が\nの場合は\\nを入力する必要があります。Apache Hive™ ファイルは\x01を列区切り文字として使用するため、データファイルが Hive からのものである場合は\\x01を入力する必要があります。注意
- CSV データの場合、カンマ (,) やタブ、パイプ (|) など、長さが 50 バイトを超えない UTF-8 文字列をテキスト区切り文字として使用できます。
- Null 値は
\Nを使用して示されます。たとえば、データファイルが 3 列で構成されており、そのデータファイルのレコードが最初と 3 番目の列にデータを持ち、2 番目の列にデータがない場合、この状況では 2 番目の列に\Nを使用して null 値を示す 必要があります。これは、レコードをa,\N,bとしてコンパイルする必要があることを意味し、a,,bではありません。a,,bは、そのレコードの 2 番目の列が空の文字列を持っていることを示します。
-
ROWS TERMINATED BYデータファイルで使用される行区切り文字を指定します。デフォルトでは、このパラメータを指定しない場合、このパラメータは
\n(改行) にデフォルト設定されます。このパラメータを使用して指定した行区切り文字は、データファイルで実際に使用されている行区切り文字と同じである必要があります。そうでない場合、データ品質が不十分なためロードジョブが失敗し、そのStateはCANCELLEDになります。このパラメータは v2.5.4 以降でサポートされています。行区切り文字の使用に関する注意事項については、前述の
COLUMNS TERMINATED BYパラメータの使用に関する注意事項を参照してください。 -
FORMAT ASデータファイルの形式を指定します。有効な値は
CSV、Parquet、およびORCです。デフォルトでは、このパラメータを指定しない場合、StarRocks はfile_pathパラメータで指定されたファイル名拡張子 .csv、.parquet、または .orc に基づいてデータファイル形式を決定します。 -
format_type_optionsFORMAT ASがCSVに設定されている場合の CSV 形式オプションを指定します。構文:(
key = value
key = value
...
)注意
format_type_optionsは v3.0 以降でサポートされています。次の表は、オプションを説明しています。
| パラメータ | 説明 |
|---|---|
| skip_header | データファイルが CSV 形式の場合、最初の行をスキップするかどうかを指定します。型: INTEGER。デフォルト値: 0。一部の CSV 形式のデータファイルでは、最初の行が列名や列データ型などのメタデータを定義するために使用されます。 skip_header パラメータを設定することで、StarRocks がデータロード中にデータファイルの最初の行をスキップするようにできます。たとえば、このパラメータを 1 に設定すると、StarRocks はデータロード中にデータファイルの最初の行をスキップします。データファイルの最初の行は、ロードステートメントで指定した行区切り文字を使用して区切られている必要があります。 |
| trim_space | データファイルが CSV 形式の場合、列区切り文字の前後のスペースを削除するかどうかを指定します。型: BOOLEAN。デフォルト値: false。一部のデータベースでは、データを CSV 形式のデータファイルとしてエクスポートする際に、列区切り文字にスペースが追加されます。これらのスペースは、先行スペースまたは後続スペースと呼ばれます。 trim_space パラメータを設定することで、StarRocks がデータロード中にこれらの不要なスペースを削除するようにできます。StarRocks は、 enclose で指定された文字で囲まれたフィールド内のスペース(先行スペースおよび後続スペースを含む)を削除しないことに注意してください。たとえば、次のフィールド値は、パイプ (` |
| enclose | データファイルが CSV 形式の場合、RFC4180 に従ってフィールド値を囲むために使用される文字を指定します。型: 単一バイト文字。デフォルト値: NONE。最も一般的な文字はシングルクォーテーション (') とダブルクォーテーション (") です。enclose で指定された文字で囲まれたすべての特殊文字(行区切り文字や列区切り文字を含む)は通常のシンボルと見なされます。StarRocks は、enclose で指定された文字として任意の単一バイト文字を指定できるため、RFC4180 よりも多くのことができます。フィールド値に enclose で指定された文字が含まれている場合、同じ文字を使用してその enclose で指定された文字をエスケープできます。たとえば 、enclose を " に設定し、フィールド値が a "quoted" c の場合、このフィールド値をデータファイルに "a ""quoted"" c" として入力できます。 |
| escape | 行区切り文字、列区切り文字、エスケープ文字、enclose で指定された文字などのさまざまな特殊文字をエスケープするために使用される文字を指定します。これらの文字は、StarRocks によって通常の文字と見なされ、フィールド値の一部として解析されます。型: 単一バイト文字。デフォルト値: NONE。最も一般的な文字はスラッシュ (\) で、SQL ステートメントではダブルスラッシュ (\\) として記述する必要があります。注意 escape で指定された文字は、各ペアの enclose で指定された文字の内側と外側の両方に適用されます。次の 2 つの例があります:
|
-
column_listデータファイルと StarRocks テーブルの間の列マッピングを指定します。構文:
(<column_name>[, <column_name> ...])。column_listに宣言された列は、名前によって StarRocks テーブルの列にマッピ ングされます。注意
データファイルの列が StarRocks テーブルの列に順番にマッピングされている場合、
column_listを指定する必要はありません。データファイルの特定の列をスキップしたい場合、その列を一時的に StarRocks テーブルの列名とは異なる名前にするだけで済みます。詳細については、loading overview を参照してください。
-
COLUMNS FROM PATH AS指定したファイルパスから 1 つ以上のパーティションフィールドに関する情報を抽出します。このパラメータは、ファイルパスにパーティションフィールドが含まれている場合にのみ有効です。
たとえば、データファイルが
/path/col_name=col_value/file1に保存されている場合、col_nameはパーティションフィールドであり、StarRocks テーブルの列にマッピングできます。このパラメータをcol_nameとして指定することができます。このようにして、StarRocks はパスからcol_value値を抽出し、それらをcol_nameにマッピングされた StarRocks テーブル列にロードします。注意
このパラメータは、HDFS からデータをロードする場合にのみ利用可能です。
-
SETデータファイルの列を変換するために使用したい 1 つ以上の関数を指定します。例:
- StarRocks テーブルは、順番に
col1、col2、col3の 3 つの列で構成されています。データファイルは 4 つの列で構成されており、そのうち最初の 2 つの列は StarRocks テーブルのcol1とcol2に順番にマッピングされ、最後の 2 つの列の合計が StarRocks テーブルのcol3にマッピングされます。この場合、column_listを(col1,col2,tmp_col3,tmp_col4)として指定し、SET 句で(col3=tmp_col3+tmp_col4)を指定してデータ変換を実装する必要があります。 - StarRocks テーブルは、順番に
year、month、dayの 3 つの列で構成されています。データファイルはyyyy-mm-dd hh:mm:ss形式の日付と時刻の値を収容する 1 つの列のみで構成されています。この場合、column_listを(tmp_time)として指定し、SET 句で(year = year(tmp_time), month=month(tmp_time), day=day(tmp_time))を指定してデータ変換を実装する必要があります。
- StarRocks テーブルは、順番に
-
WHEREソースデータをフィルタリングするための条件を指定します。StarRocks は、WHERE 句で指定されたフィルタ条件を満たすソースデータのみをロードします。
WITH BROKER
v2.3 以前では、使用したいブローカーを指定するために WITH BROKER "<broker_name>" を入力します。v2.5 以降では、ブローカーを指定する必要はありませんが、WITH BROKER キーワードを保持する必要があります。