STREAM LOAD
STREAM LOADを使用すると、ローカルファイルシステムまたはストリーミングデータソースからデータをロードできます。ロードジョブを送信すると、システムはジョブを同期的に実行し、ジョブの完了後にジョブの結果を返します。ジョブの結果に基づいて、ジョブが成功したかどうかを判断できます。Stream Loadのアプリケーションシナリオ、制限、およびサポートされているデータファイル形式については、以下を参照してください。Stream Loadを介したローカルファイルシステムからのロード。
この例では、StarRocks Basics クイックスタートで紹介されている Local Climatological Data (LCD) データセットを使用しています。データをロードして、自分で例を試すことができます。
v3.2.7以降、Stream Loadは転送中のJSONデータの圧縮をサポートし、ネットワーク帯域幅のオーバーヘッドを削減します。ユーザーは、パラメーターを使用して異なる圧縮アルゴリズムを指定できます。compressionおよびContent-Encoding。サポートされている圧縮アルゴリズムには、GZIP、BZIP2、LZ4_FRAME、ZSTDが含まれます。詳細については、以下を参照してください。data_desc。
v3.4.0以降、システムは複数のStream Loadリク エストのマージをサポートします。詳細については、以下を参照してください。マージコミットパラメーター。
- Stream Loadを使用してネイティブテーブルにデータをロードすると、そのテーブル上に作成されたマテリアライズドビューのデータも更新されます。
- ネイティブテーブルにデータをロードできるのは、それらのテーブルに対するINSERT権限を持つユーザーのみです。INSERT権限がない場合は、以下の指示に従って、GRANTを使用して、クラスターへの接続に使用するユーザーにINSERT権限を付与してください。
構文
curl --location-trusted -u <username>:<password> -XPUT <url>
(
data_desc
)
[opt_properties]
このトピックでは、curlを例として、Stream Loadを使用してデータをロードする方法を説明します。curlの他に、他のHTTP互換ツールや言語を使用してStream Loadを実行することもできます。ロード関連のパラメーターはHTTPリクエストヘッダーフィールドに含まれます。これらのパラメーターを入力する際は、以下の点に注意してください。
-
このトピックで示されているように、チャンク転送エンコーディングを使用できます。チャンク転送エンコーディングを選択しない場合は、
Content-Lengthヘッダーフィールドを入力して、転送されるコンテンツの長さを指定し、データの整合性を確保する必要があります。注記curlを使用してStream Loadを実行すると、システムは自動的にContent-Lengthヘッダーフィールドを追加するため、手動で入力する必要はありません。 -
Expectヘッダーフィールドを追加し、その値を100-continueと指定する必要があります。例:"Expect:100-continue"。これは、ジョブ要求が拒否された場合に、不要なデータ転送を防ぎ、リソースのオーバーヘッドを削減するのに役立ちます。
StarRocksでは、一部のリテラルがSQL言語の予約済みキーワードとして使用されることに注意してください。これらのキーワードをSQLステートメントで直接使用しないでください。SQLステートメントでそのようなキーワードを使用したい場合は、バッククォート (`) で囲んでください。詳細については、キーワード。
パラメーター
ユーザー名とパスワード
クラスターへの接続に使用するアカウントのユーザー名とパスワードを指定します。これは必須パラメーターです。パスワードが設定されていないアカウントを使用する場合は、<username>:のみを入力する必要があります。
XPUT
HTTPリクエストメソッドを指定します。これは必須パラメーターです。Stream LoadはPUTメソッドのみをサポートします。
URL
テーブルのURLを指定します。構文:
http://<fe_host>:<fe_http_port>/api/<database_name>/<table_name>/_stream_load
以下の表は、URL内のパラメーターについて説明しています。
| パラメーター | 必須 | 説明 |
|---|---|---|
| fe_host | はい | クラスター内のFEノードのIPアドレス。 注 ロードジョブを特定のBEまたはCNノードに送信する場合、そのBEまたはCNノードのIPアドレスを入力する必要があります。 |
| database_name | はい | テーブルが属するデータベースの名前。 |
| table_name | はい | テーブルの名前。 |
SHOW FRONTENDS を使用して、FE ノードの IP アドレスと HTTP ポートを確認できます。
data_desc
ロードするデータファイルを記述します。data_descディスクリプタには、データファイルの名前、形式、列区切り文字、行区切り文字、宛先パーティション、およびテーブルに対する列マッピングを含めることができます。構文:
-T <file_path>
-H "format: CSV | JSON"
-H "column_separator: <column_separator>"
-H "row_delimiter: <row_delimiter>"
-H "columns: <column1_name>[, <column2_name>, ... ]"
-H "partitions: <partition1_name>[, <partition2_name>, ...]"
-H "temporary_partitions: <temporary_partition1_name>[, <temporary_partition2_name>, ...]"
-H "jsonpaths: [ \"<json_path1>\"[, \"<json_path2>\", ...] ]"
-H "strip_outer_array: true | false"
-H "json_root: <json_path>"
-H "ignore_json_size: true | false"
-H "compression: <compression_algorithm> | Content-Encoding: <compression_algorithm>"
のパラメータは、data_descディスクリプタは、共通パラメータ、CSVパラメータ、およ びJSONパラメータの3つのタイプに分類できます。
共通パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
| file_path | はい | データファイルの保存パス。ファイル名の拡張子を含めることができます。 |
| format | いいえ | データファイルの形式。有効な値: CSV および JSON。デフォルト値: CSV。 |
| partitions | いいえ | データファイルをロードしたいパーティション。デフォルトでは、このパラメータを指定しない場合、StarRocks はデータファイルを StarRocks テーブルのすべてのパーティションにロードします。 |
| temporary_partitions | いいえ | データファイルをロードしたい temporary partition の名前。複数の一時パーティションを指定する場合は、カンマ (,) で区切る必要があります。 |
| columns | いいえ | データファイルと StarRocks テーブル間の列マッピング。 データファイルのフィールドが StarRocks テーブルの列に順番にマッピングできる場合、このパラメータを指定する必要はありません。代わりに、このパラメータを使用してデータ変換を実装できます。たとえば、CSV データファイルをロードし、そのファイルが StarRocks テーブルの id および city 列に順番にマッピングできる 2 つの列で構成されて いる場合、"columns: city,tmp_id, id = tmp_id * 100" と指定できます。詳細については、このトピックの Column mapping セクションを参照してください。 |
CSV パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
| column_separator | いいえ | データファイルでフィールドを区切るために使用される文字。指定しない場合、このパラメータはデフォルトで \t(タブ)になります。このパラメータで指定する列セパレータがデータファイルで使用されている列セパレータと同じであることを確認してください。 注意 - CSV データの場合、カンマ (,) やタブ、パイプ (|) などの UTF-8 文字列をテキストデリミタとして使用できますが、その長さは 50 バイトを超えてはなりません。 - データファイルが連続した非表示文字(例: \r\n)を列区切り文字として使用している場合、このパラメータを \\x0D0A に設定する必要があります。 |
| row_delimiter | いいえ | データファイルで行を区切るために使用される文字。指定しない場合、このパラメータはデフォルトで \n になります。注意 データファイルが連続して非表示文字(例: \r\n)を行区切り文字として使用している場合、このパラメータを\\x0D0Aに設定する必要があります。 |
| skip_header | いいえ | データファイルが CSV 形式の場合、データファイルの最初の数行をスキップするかどうかを指定します。タイプ: INTEGER。デフォルト値: 0。一部の CSV 形式のデータファイルでは、最初の数行が列名や列データ型などのメタデータを定義するために使用されます。 skip_header パラメータを設定することで、StarRocks がデータロード中にデータファイルの最初の数行をスキップするようにできます。たとえば、このパラメータを 1 に設定すると、StarRocks はデータロード中にデータファイルの最初の行をスキップします。データファイルの最初の数行は、ロードコマンドで指定した行セパレータで区切られている必要があります。 |
| trim_space | いいえ | データファイルが CSV 形式の場合、データファイルから列セパレータの前後のスペースを削除するかどうかを指定します。タイプ: BOOLEAN。デフォルト値: false。一部のデータベースでは、データを CSV 形式のデータファイルとしてエクスポートする際に、列セパレータにスペースが追加されます。これらのスペースは、その位置に応じて先行スペースまたは後続スペースと呼ばれます。 trim_space パラメータを設定することで、StarRocks がデータロード中にこれらの不要なスペースを削除するようにできます。StarRocks は、 enclose で指定された文字で囲まれたフィールド内のスペース(先行スペースおよび後続スペースを含む)を削除しないことに注意してください。たとえば、次のフィールド値は、列セパレータとしてパイプ (|) を使用し、enclose で指定された文字として二重引用符 (") を使用しています:|"Love StarRocks"| |" Love StarRocks "| | "Love StarRocks" | trim_space を true に設定すると、StarRocks は前述のフィールド値を次のように処理します:|"Love StarRocks"| |" Love StarRocks "| |"Love StarRocks"| |
| 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 つの例を示します:
|
- CSVデータの場合、カンマ (,)、タブ、パイプ (|) などのUTF-8文字列をテキスト区切り文字として使用できます。その長さは50バイトを超えてはなりません。
- Null値は
\Nを使用して示されます。たとえば、データファイルが3つの列で構成され、そのデータファイルからのレコードが最初の列と3番目の列にデータを保持しているが、2番目の列にはデータがないとします。この状況では、2番目の列でnull値を示すために\Nを使用する必要があります。これは、レコードがa,\N,bの代わりにa,,bとしてコンパイルされなければならないことを意味します。a,,bは、レコードの2番目の列が空の文字列を保持していることを示します。 - を含むフォーマットオプションは、
skip_header、trim_space、enclose、およびescapeは、v3.0以降でサポートされています。
JSON パラメーター
| パラメータ | 必須 | 説明 |
|---|---|---|
| jsonpaths | いいえ | JSON データファイルからロードしたいキーの名前。マッチモードを使用して JSON データをロードする場合にのみ、このパラメータを指定する必要があります。このパラメータの値は JSON 形式です。Configure column mapping for JSON data loading を参照してください。 |
| strip_outer_array | いいえ | 最外部の配列構造を削除するかどうかを指定します。有効な値: true および false。デフォルト値: false。実際のビジネスシナリオでは、JSON データには [] で示される最外部の配列構造がある場合があります。この場合、このパラメータを true に設定することをお勧めします。これにより、StarRocks は最外部の [] を削除し、各内部配列を別々のデータレコードとしてロードします。このパラメータを false に設定すると、StarRocks は JSON データファイル全体を 1 つの配列として解析し、その配列を単一のデータレコードとしてロードします。たとえば、JSON データが [ {"category" : 1, "author" : 2}, {"category" : 3, "author" : 4} ] の場合、このパラメータを true に設定すると、{"category" : 1, "author" : 2} と {"category" : 3, "author" : 4} が別々のデータレコードとして解析され、StarRocks テーブルの別々の行にロードされます。 |
| json_root | いいえ | JSON データファイルからロードしたい JSON データのルート要素。マッチモードを使用して JSON データをロードする場合にのみ、このパラメータを指定する必要があります。このパラメータの値は有効な JsonPath 文字列です。デフォルトでは、このパラメータの値は空であり、JSON データファイルのすべてのデータがロー ドされることを示します。詳細については、このトピックの「Load JSON data using matched mode with root element specified」セクションを参照してください。 |
| ignore_json_size | いいえ | HTTP リクエスト内の JSON 本体のサイズをチェックするかどうかを指定します。 注意 デフォルトでは、HTTP リクエスト内の JSON 本体のサイズは 100 MB を超えることはできません。JSON 本体が 100 MB を超える場合、エラー "The size of this batch exceed the max size [104857600] of json type data data [8617627793]. Set ignore_json_size to skip check, although it may lead huge memory consuming." が報告されます。このエラーを防ぐために、HTTP リクエストヘッダーに "ignore_json_size:true" を追加して、StarRocks に JSON 本体のサイズをチェックしないように指示できます。 |
| compression, Content-Encoding | いいえ | データ転送中に適用されるエンコーディングアルゴリズム。サポートされているアルゴリズムには、GZIP、BZIP2、LZ4_FRAME、および ZSTD が含まれます。例: curl --location-trusted -u root: -v '<table_url>' \-X PUT -H "expect:100-continue" \-H 'format: json' -H 'compression: lz4_frame' -T ./b.json.lz4。 |
JSONデータをロードする際、JSONオブジェクトあたりのサイズが4 GBを超えないことにも注意してください。JSONデータファイル内の個々のJSONオブジェクトのサイズが4 GBを超えると、 このパーサーは、そのサイズのドキュメントをサポートできません。 というエラーが報告されます。