BROKER LOAD
説明
StarRocksは、MySQLベースのロード方法であるBroker Loadを提供します。ロードジョブを送信すると、StarRocksは非同期でジョブを実行します。SELECT * FROM information_schema.loadsを使用してジョブの結果をクエリできます。この機能はv3.1以降でサポートされています。背景情報、原則、サポートされているデータファイル形式、単一テーブルロードと複数テーブルロードの実行方法、ジョブ結果の表示方法については、loading overviewを参照してください。
StarRocks テーブルにデータを ロード できるのは、これらの StarRocks テーブルに対して INSERT 権限を持つユーザーのみです。INSERT 権限を持っていない場合は、 GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに INSERT 権限を付与してください。
構文
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はロードジョブのラベルを指定します。
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_port: 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データをロードしたい一時パーティションの名前を指定します。複数の一時パーティションを指定することができ、カンマ(,)で区切る必要があります。
-
COLUMNS TERMINATED BYデータファイルで使用される列区切り文字を指定します。デフォルトでは 、このパラメータを指定しない場合、このパラメータは
\t(タブ)にデフォルト設定されます。このパラメータを使用して指定した列区切り文字は、実際にデータファイルで使用されている列区切り文字と同じである必要があります。そうでない場合、データ品質が不十分なためロードジョブが失敗し、そのStateはCANCELLEDになります。Broker LoadジョブはMySQLプロトコルに従って送信されます。StarRocksとMySQLはどちらもロードリクエストで文字をエスケープします。したがって、列区切り文字がタブのような不可視文字である場合、列区切り文字の前にバックスラッシュ(\)を追加する必要があります。たとえば、列区切り文字が
\tの場合は\\tと入力する必要があり、列区切り文字が\nの場合は\\nと入力する必要があります。Apache Hive™ファイルは\x01を列区切り文字として使用するため、データファイルがHiveからのものである場合は\\x01と入力する必要があります。注意
- CSVデータの場合、カンマ(,)、タブ、またはパイプ(|)のようなUTF-8文字列をテキストデリミタとして使用できますが、その長さは50バイトを超えてはなりません。
- Null値は
\Nを使用して示されます。たとえば、データファイルが3つの列で構成され、そのデータファイルのレコードが最初と3番目の列にデータを保持し、2番目の列にデータがない場合、この状況では2番目の列にNull値を示すために\Nを使用する必要があります。これは、レコードを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以降でサポートされています。次の表はオプションを説明しています。
| Parameter | Description |
|---|---|
| skip_header | CSV形式のデータファイルの最初の行をスキップするかどうかを指定します。タイプ: INTEGER。デフォルト値: 0。一部のCSV形式のデータファイルでは、最初の行はメタデータ(列名や列データ型など)を定義するために使用されます。 skip_headerパラメータを設定することで、StarRocksがデータロード中にデータファイルの最初の行をスキップできるようになります。たとえば、このパラメータを1に設定すると、StarRocksはデータロード中にデータファイルの最初の行をスキップします。データファイルの最初の行は、ロード文で指定した行区切り文字を使用して区切られている必要があります。 |
| trim_space | CSV形式のデータファイルから列区切り文字の前後のスペースを削除するかどうかを指定します。タイプ: BOOLEAN。デフォルト値: false |