STREAM LOAD
この例では、StarRocks Basics Quick Start で紹介されている Local Climatological Data (LCD) データセットを使用しています。データをロードして、自分で例を試すことができます。
説明
StarRocks は、HTTP ベースの Stream Load というロード方法を提供しており、ローカルファイルシステムや ストリーミングデータソースからデータをロードするのに役立ちます。ロードジョブを送信すると、StarRocks はジョブを同期的に実行し、ジョブが完了した後にその結果を返します。ジョブ結果に基づいて、ジョブが成功したかどうかを判断できます。Stream Load の適用シナリオ、制限、原則、およびサポートされているデータファイル形式については、 Loading from a local file system via Stream Load を参照してください。
注意
- 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>"
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 の 2 つのカラムに順番にマッピングできる場合、"columns: city,tmp_id, id = tmp_id * 100" と指定できます。詳細については、このトピックの「Column mapping」セクションを参照してください。 |
CSV パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
| column_separator | いいえ | データファイル内でフィールドを区切るために使用される文字。このパラメータを指定しない場合、このパラメータはデフォルトで \t(タブ)になります。このパラメータで指定するカラムセパレータがデータファイルで使用されているカラムセパレータと同じであることを確認してください。 注意 CSV データの場合、カンマ (,) やタブ、パイプ (|) などの UTF-8 文字列をテキストデリミタとして使用できますが、その長さは 50 バイトを超えてはなりません。 |
| 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 データは [] で示される最外層の配列構造を持つ場合があります。このような場合、StarRocks が最外層の [] を削除し、各内部配列を別々のデータレコードとしてロードするように、このパラメータを true に設定することをお勧めします。このパラメータを false に設定すると、StarRocks は JSON データファイル全体を 1 つの配列として解析し、その配列を 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 本体サイズをチェックしないよう指示できます。 |
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 "merge_condition: <column_name>"
次の表は、オプションパラメータを説明しています。
| パラメータ | 必須 | 説明 |
|---|---|---|
| label | いいえ | ロードジョブのラベル。このパラメータを指定しない場合、StarRocks はロードジョブに自動的にラベルを生成します。 StarRocks は、1 つのラベルを使用してデータバッチを複数回ロードすることを許可しません。そのため、StarRocks は同じデータが繰り返しロードされるのを防ぎます。ラベルの命名規則については、 System limits を参照してください。 デフォルトでは、StarRocks は、最近 3 日間に正常に完了したロードジョブのラベルを保持します。 FE パラメータ label_keep_max_second を使用して、ラベルの保持期間を変更できます。 |
| where | いいえ | StarRocks が事前処理されたデータをフィルタリングする条件。StarRocks は、WHERE 句で指定されたフィルタ条件を満たす事前処理されたデータのみをロードします。 |
| max_filter_ratio | いいえ | ロードジョブの最大エラー許容度。エラー許容度は、ロードジョブによって要求されたすべてのデータレコードの中で、データ品質が不十分なためにフィルタリングされることができるデータレコードの最大割合です。有効な値: 0 から 1。デフォルト値: 0。デフォルト値 0 を維持することをお勧めします。これにより、不適格なデータレコードが検出された場合、ロードジョブが失敗し、データの正確性が確保されます。不適格なデータレコードを無視したい場合は、このパラメータを 0 より大きい値に設定できます。これにより、データファイルに不適格なデータレコードが含まれていても、ロードジョブは成功します。注意 不適格なデータレコードには、WHERE 句によってフィルタリングされたデータレコードは含まれません。 |
| log_rejected_record_num | いいえ | ログに記録できる不適格なデータ行の最大数を指定します。このパラメータは v3.1 以降でサポートされています。有効な値: 0、-1、および任意の非ゼロの正の整数。デフォルト値: 0。
|
| timeout | いいえ | ロードジョブのタイムアウト期間。有効な値: 1 から 259200。単位: 秒。デフォルト値: 600。注意 timeout パラメータに加えて、 FE パラメータ stream_load_default_timeout_second を使用して、StarRocks クラスター内のすべての Stream Load ジョブのタイムアウト期間を一元的に制御できます。timeout パラメータを指定した場合、timeout パラメータで指定されたタイムアウト期間が優先されます。timeout パラメータを指定しない場合、stream_load_default_timeout_second パラメータで指定されたタイムアウト期間が優先されます。 |
| strict_mode | いいえ | strict mode を有効にするかどうかを指定します。有効な値: true および false。デフォルト値: false。値 true は strict mode を有効にすることを指定し、値 false は strict mode を無効にすることを指定します。 |
| timezone | いいえ | ロードジョブで使用されるタイムゾーン。デフォルト値: Asia/Shanghai。このパラメータの値は、strftime、alignment_timestamp、from_unixtime などの関数によって返される結果に影響を与えます。このパラメータで指定されたタイムゾーンは、セッションレベルのタイムゾーンです。詳細は Configure a time zone を参照してください。 |
| load_mem_limit | いいえ | ロードジョブにプロビジョニングできる最大メモリ量。単位: バイト。デフォルトでは、ロードジョブの最大メモリサイズは 2 GB です。このパラメータの値は、各 BE または CN にプロビジョニングできる最大メモリ量を超えてはなりません。 |
| merge_condition | いいえ | 更新が有効になるかどうかを判断するために使用するカラムの名前を指定します。ソースレコードから宛先レコードへの更新は、指定されたカラムでソースデータレコードが宛先データレコードよりも大きいか等しい値を持つ場合にのみ有効になります。StarRocks は v2.5 以降で条件付き更新をサポートしています。 注意 指定するカラムは主キーのカラムであってはなりません。また、条件付き更新をサポートするのは、主キーテーブルを使用するテーブルのみです。 |
カラムマッピング
CSV データロードのためのカラムマッピングの設定
データファイルのカラムが StarRocks テーブルのカラムに順番に 1 対 1 でマッピングできる場合、データファイルと StarRocks テーブル間のカラムマッピングを設定する必要はありません。
データファイルのカラムが StarRocks テーブルのカラムに順番に 1 対 1 でマッピングできない場合、columns パラメータを使用してデータファイルと StarRocks テーブル間のカラムマッピングを設定する必要があります。これには次の 2 つのユースケースが含まれます。
-
カラム数は同じだが、カラムの順序が異なる場合。また、データファイルからのデータは、StarRocks テーブルの対応するカラムにロードされる前に関数によって計算される必要はありません。
columnsパラメータでは、データファイルのカラムが配置されている順序と同じ順序で StarRocks テーブルのカラム名を指定する必要があります。たとえば、StarRocks テーブルは
col1、col2、col3の 3 つのカラムで構成されており、データファイルも 3 つのカラムで構成されており、StarRocks テーブルのカラムcol3、col2、col1に順番にマッピングできます。この場合、"columns: col3, col2, col1"と指定する必要があります。 -
カラム数が異なり、カラムの順序も異なる場合。また、データファイルからのデータは、StarRocks テーブルの対応するカラムにロードされる前に関数によって計算される必要があります。
columnsパラメータでは、データファイルのカラムが配置されている順序と同じ順序で StarRocks テーブルのカラム名を指定し、データを計算するために使用する関数を指定する必要があります。次の 2 つの例を示します。- StarRocks テーブルは
col1、col2、col3の 3 つのカラムで構成されています。データファイルは 4 つのカラムで構成されており、そのうち最初の 3 つのカラムは StarRocks テーブルのカラムcol1、col2、col3に順番にマッピングでき、4 番目のカラムは StarRocks テーブルのカラムにマッピングできません。この場合、データファイルの 4 番目のカラムに一時的な名前を指定する必要があり、その一時的な名前は StarRocks テーブルのカラム名とは異なる必要があります。たとえば、"columns: col1, col2, col3, temp"と指定し、データファイルの 4 番目のカラムを一時的にtempと名付けることができます。 - StarRocks テーブルは
year、month、dayの 3 つのカラムで構成されています。データファイルはyyyy-mm-dd hh:mm:ss形式の日付と時刻の値を格納する 1 つのカラムのみで構成されています。この場合、"columns: col, year = year(col), month=month(col), day=day(col)"と指定し、colをデータファイルのカラムの一時的な名前とし、関数year = year(col)、month=month(col)、day=day(col)を使用してデータファイルのカラムcolからデータを抽出し、対応する StarRocks テーブルのカラムにデータをロードします。たとえば、year = year(col)はデータファイルのカラムcolからyyyyデータを抽出し、StarRocks テーブルのカラムyearにデータをロードするために使用されます。
- StarRocks テーブルは
詳細な例については、 Configure column mapping を参照してください。
JSON データロードのためのカラムマッピングの設定
JSON ドキュメントのキーが StarRocks テーブルのカラムと同じ名前を持つ場合、シンプルモードを使用して JSON 形式のデータをロードできます。シンプルモードでは、jsonpaths パラメータを指定する必要はありません。このモードでは、JSON 形式のデータは {} で示されるオブジェクトである必要があります。たとえば、{"category": 1, "author": 2, "price": "3"} のように。この例では、category、author、price がキー名であり、これらのキーは名前によって StarRocks テーブルのカラム category