STREAM LOAD
This example uses the Local Climatological Data(LCD) dataset featured in the StarRocks Basics Quick Start. You can load the data and try the example yourself.
説明
StarRocks は、HTTP ベースの Stream Load を提供しており、ローカルファイルシステムやストリーミングデータソースからデータをロードするのに役立ちます。ロードジョブを送信すると、StarRocks はジョブを同期的に実行し、ジョブが終了した後にその結果を返します。ジョブ結果に基づいて、ジョブが成功したかどうかを判断できます。Stream Load の適用シナリオ、制限、原則、お よびサポートされているデータファイル形式については、 Loading from a local file system via Stream Load を参照してください。
v3.2.7 以降、Stream Load は転送中に JSON データを圧縮することをサポートし、ネットワーク帯域幅のオーバーヘッドを削減します。ユーザーは、compression および Content-Encoding パラメータを使用して異なる圧縮アルゴリズムを指定できます。サポートされている圧縮アルゴリズムには、GZIP、BZIP2、LZ4_FRAME、および ZSTD があります。詳細については、 data_desc を参照してください。
注意
- Stream Load を使用して StarRocks テーブルにデータをロードした後、そのテーブルに作成されたマテリアライズドビューのデータも更新されます。
- StarRocks テーブルにデータをロードするには、その StarRocks テーブルに対する INSERT 権限を持つユーザーとしてのみ行うことができます。INSERT 権限を持っていない場合は、 GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに 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 を実行する場合、StarRocks は自動的に
Content-Lengthヘッダーフィールドを追加するため、手動で入力する必要はありません。 -
Expectヘッダーフィールドを追加し、その値を100-continueとして指定する必要があります。これは、ジョブリクエストが拒否された場合に不要なデータ転送を防ぎ、リソースのオーバーヘッドを削減するのに役立ちます。
StarRocks では、いくつかのリテラルが SQL 言語によって予約キーワードとして使用されます。これらのキーワードを SQL ステートメントで直接使用しないでください。SQL ステートメントでそのようなキーワードを使用する場合は、バッククォート (`) で囲んでください。 Keywords を参照してください。
パラメータ
username と password
StarRocks クラスターに接続するために使用するアカウントのユーザー名とパスワードを指定します。これは必須のパラメータです。パスワードが設定されていないアカウントを使用する場合は、<username>: のみを入力する必要があります。
XPUT
HTTP リクエストメソッドを指定します。これは必須のパラメータです。Stream Load は PUT メソッドのみをサポートします。
url
StarRocks テーブルの URL を指定します。構文:
http://<fe_host>:<fe_http_port>/api/<database_name>/<table_name>/_stream_load
次の表は、URL のパラメータを説明しています。
| パラメータ | 必須 | 説明 |
|---|---|---|
| fe_host | はい | StarRocks クラスター内の FE ノードの IP アドレス。 注意 特定の BE または CN ノードにロードジョブを送信する場合は、BE または CN ノードの IP アドレスを入力する必要があります。 |
| fe_http_port | はい | StarRocks クラスター内の FE ノードの HTTP ポート番号。デフォルトのポート番号は 8030 です。注意 特定の BE または CN ノードにロードジョブを送信する場合は、BE または CN ノードの HTTP ポート番号を入力する必要があります。デフォルトのポート番号は 8030 です。 |
| database_name | はい | StarRocks テーブルが属するデータベースの名前。 |
| table_name | はい | StarRocks テーブルの名前。 |
注意
SHOW FRONTENDS を使用して、FE ノードの IP アドレスと HTTP ポートを表示できます。
data_desc
ロードしたいデータファイルを説明します。data_desc ディスクリプタには、データファイルの名前、形式、列区切り文字、行区切り文字、宛先パーティション、および StarRocks テーブルに対する列マッピングを含めることができます。構文:
-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 データファイルをロードし、そのファイルが 2 つの列で構成されており、それが順番に StarRocks テーブルの id および city 列にマッピングできる場合、"columns: city,tmp_id, id = tmp_id * 100" と指定できます。詳細については、このトピックの「Column mapping」セクションを参照してください。 |
CSV パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
| column_separator | いいえ | データファイルでフィールドを区切るために使用される文字。このパラメータを指定しない場合、このパラメータはデフォルトで \t (タブ) になります。このパラメータで指定する列区切り文字がデータファイルで使用されている列区切り文字と同じであることを確認してください。 注意 CSV データの場合、カンマ (,) やタブ、 パイプ ( |
| row_delimiter | いいえ | データファイルで行を区切るために使用される文字。このパラメータを指定しない場合、このパラメータはデフォルトで \n になります。 |
| 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 番目の列に\Nを使用して null 値を示す必要があります。つまり、レコードは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 'http://127.0.0.1:18030/api/db0/tbl_simple/_stream_load' \-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 を超える場合、エラー "This parser can't support a document that big." が報告されます。
opt_properties
ロードジョブ全体に適用されるいくつかのオプションパラメータを指定します。構文:
-H "label: <label_name>"
-H "where: <condition1>[, <condition2>, ...]"
-H "max_filter_ratio: <num>"
-H "timeout: <num>"
-H "strict_mode: true | false"
-H "timezone: <string>"
-H "load_mem_limit: <num>"
-H "partial_update: true | false"
-H "partial_update_mode: row | column"
-H "merge_condition: <column_name>"
次の表は、オプションパラメータを説明しています。
| パラメータ | 必須 | 説明 |
|---|---|---|
| label | いいえ | ロードジョブのラベル。このパラメータを指定しない場合、StarRocks はロードジョブに対して自動的にラベルを生成します。 StarRocks は、1 つのラベルを使用してデータバッチを複数回ロードすることを許可しません。このため、StarRocks は同じデータが繰り返しロードされるのを防ぎます。ラベルの命名規則については、 System limits を参照してください。 デフォルトでは、StarRocks は、最も最近の 3 日間に正常に完了したロードジョブのラベルを保持します。ロードジョブのラベル保持期間を変更するには、 FE parameter label_keep_max_second を使用できます。 |
| where | いいえ | StarRocks が事前処理されたデータをフィルタリングする条件。StarRocks は、WHERE 句で指定されたフィルタ条件を満たす事前処理されたデータのみをロードします。 |
| max_filter_ratio | いいえ | ロードジョブの最大エラー許容度。エラー許容度は、ロードジョブによって要求されたすべてのデータレコードの中で、不十分なデータ品質のためにフィルタリングされるデータレコードの最大割合です。有効な値: 0 から 1。デフォルト値: 0。デフォルト値 0 を保持することをお勧めします。これにより、不適格なデータレコードが検出された場合、ロードジョブが失敗し、データの正確性が確保されます。不適格なデータレコードを無視したい場合は、このパラメータを 0 より大きい値に設定できます。このようにすると、データファイルに不適格なデータレコードが含まれていても、ロードジョブは成功します。注意 不適格なデータレコードには、WHERE 句によってフィルタリングされたデータレコードは含まれません。 |
| log_rejected_record_num | いいえ | ログに記録できる不適格なデータ行の最大数を指定します。このパラメータは v3.1 以降でサポートされています。有効な値: 0 |