STREAM LOAD
この例では、StarRocks Basics クイックスタートで紹介されている Local Climatological Data (LCD) データセットを使用しています。データをロードして、自分で例を試すことができます。
説明
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 データの場合、カンマ (,) やタブ、パイプ (|) など、長さが 50 バイトを超えない UTF-8 文字列をテキストデリミタとして使用できます。 |
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 で指定された文字など、さまざまな特殊文字をエスケープするために使用される文字を指定します。これらは通常の文字と見なされ、フィールド値の一部として解析されます。タイプ: 単一バイト文字。デフォルト値: NONE 。最も一般的な文字はスラッシュ (\ ) で、SQL ステートメントではダブルスラッシュ (\\ ) として記述する必要があります。注意 escape で指定された文字は、各ペアの enclose で指定された文字の内側と外側の両方に適用されます。次のような例があります:
|
注意
- CSV データの場合、カンマ (,) やタブ、パイプ (|) など、長さが 50 バイトを超えない UTF-8 文字列をテキストデリミタとして使用できます。
- Null 値は
\N
を使用して表されます。たとえば、データファイルが 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 つの配列として解析し、その配列を 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 、-1 、および任意の非ゼロの正の整数。デフォルト値: 0 。
|
timeout | いいえ | ロードジョブのタイムアウト期間。有効な値: 1 から 259200 。単位: 秒。デフォルト値: 600 。注意 timeout パラメータに加えて、 FE parameter stream_load_default_timeout_second を使用して、StarRocks クラスター内のすべての Stream Load ジョブのタイムアウト期間を一元的に制御できます。timeout パラメータを指定した場合、timeout パラメータで指定されたタイムアウト期間が優先されます。timeout パラメータを指定しない場合、stream_load_default_timeout_second パラメータで指定されたタイムアウト期間が優先されます。 |
strict_mode | いいえ | strict mode を有効にするかどうかを指定します。有効な値: true および false 。デフォルト値: false 。値 true はストリクトモードを有効にし、値 false はストリクトモードを無効にします。 |
timezone | いいえ | ロードジョブで使用されるタイムゾーン。デフォルト値: Asia/Shanghai 。このパラメータの値は、strftime、alignment_timestamp、from_unixtime などの関数によって返される結果に影響を与えます。このパラメータで指定されたタイムゾーンは、セッションレベルのタイムゾーンです。詳細は Configure a time zone を参照してください。 |
load_mem_limit | いいえ | ロードジョブにプロビジョニングできる最大メモリ量。単位: バイト。デフォルトでは、ロードジョブの最大メモリサイズは 2 GB です。このパラメータの値は、各 BE または CN にプロビジョニングできる最大メモリ量を超えることはできません。 |
partial_update | いいえ | 部分更新を使用するかどうか。 有効な値: TRUE および FALSE 。 デフォルト値: FALSE 、この機能を無効にすることを示します。 |
partial_update_mode | いいえ | 部分更新のモードを指定します。 有効な値: row および column 。
|
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
はキー名であり、これらのキーは名前によって 1 対 1 で StarRocks テーブルの列 category
、author
、price
にマッピングできます。
JSON ドキュメントのキーが StarRocks テーブルの列と異なる名前を持つ場合、マッチモードを使用して JSON 形式のデータをロードできます。マッチモードでは、jsonpaths
および COLUMNS
パラメータを使用して JSON ドキュメントと StarRocks テーブル間の列マッピングを指定する必要があります。
jsonpaths
パラメータでは、JSON ドキュメントに配置されている順序で JSON キーを指定します。COLUMNS
パラメータでは、JSON キーと StarRocks テーブル列間のマッピングを指定します。COLUMNS
パラメータで指定された列名は、JSON キーに順番に 1 対 1 でマッピングされます。COLUMNS
パラメータで指定された列名は、StarRocks テーブル列に名前によって 1 対 1 でマッピングされます。
マッチモードを使用して JSON 形式のデータをロードする例については、 Load JSON data using matched mode を参照してください。
戻り値
ロードジョブが終了すると、StarRocks はジョブ結果を JSON 形式で返します。例:
{
"TxnId": 1003,
"Label": "label123",
"Status": "Success",
"Message": "OK",
"NumberTotalRows": 1000000,
"NumberLoadedRows": 999999,
"NumberFilteredRows": 1,
"NumberUnselectedRows": 0,
"LoadBytes": 40888898,
"LoadTimeMs": 2144,
"BeginTxnTimeMs": 0,
"StreamLoadPlanTimeMs": 1,
"ReadDataTimeMs": 0,
"WriteDataTimeMs": 11,
"CommitAndPublishTimeMs": 16,
}
次の表は、返されたジョブ結果のパラメータを説明します。
パラメータ | 説明 |
---|---|
TxnId | ロードジョブのトランザクション ID。 |
Label | ロードジョブのラベル。 |
Status | ロードされたデータの最終ステータス。
|
Message | ロードジョブのステータス。ロードジョブが失敗した場合、詳細な失敗原因が返されます。 |
NumberTotalRows | 読み取られたデータレコードの総数。 |
NumberLoadedRows | 正常にロードされたデータレコードの総数。このパラメータは、Status が Success の場合にのみ有効です。 |
NumberFilteredRows | データ品質が不十分なためにフィルタリングされたデータレコードの数。 |
NumberUnselectedRows | WHERE 句によってフィルタリングされたデータレコードの数。 |
LoadBytes | ロードされたデータの量。単位: バイト。 |
LoadTimeMs | ロードジョブにかかる時間。単位: ミリ秒。 |
BeginTxnTimeMs | ロードジョブのトランザクションを実行するのにかかる時間。 |
StreamLoadPlanTimeMs | ロードジョブの実行計画を生成するのにかかる時間。 |
ReadDataTimeMs | ロードジョブのデータを読み取るのにかかる時間。 |
WriteDataTimeMs | ロードジョブのデータを書き込むのにかかる時間。 |
CommitAndPublishTimeMs | ロードジョブのデータをコミットして公開するのにかかる時間。 |
ロードジョブが失敗した場合、StarRocks は ErrorURL
も返します。例:
{"ErrorURL": "http://172.26.195.68:8045/api/_load_error_log?file=error_log_3a4eb8421f0878a6_9a54df29fd9206be"}
ErrorURL
は、フィルタリングされた不適格なデータレコードの詳細を取得できる URL を提供します。ロードジョブを送信する際に設定されるオプションパラメータ log_rejected_record_num
を使用して、ログに記録できる不適格なデータ行の最大数を指定できます。
curl "url"
を実行して、フィルタリングされた不適格なデータレコードの詳細を直接表示できます。また、wget "url"
を実行して、これらのデータレコードの詳細をエクスポートすることもできます。
wget http://172.26.195.68:8045/api/_load_error_log?file=error_log_3a4eb8421f0878a6_9a54df29fd9206be
エクスポートされたデータレコードの詳細は、_load_error_log?file=error_log_3a4eb8421f0878a6_9a54df29fd9206be
のような名前のローカルファイルに保存されます。cat
コマンドを使用してファイルを表示できます。
その後、ロードジョブの設定を調整し、ロードジョブを再送信できます。
例
CSV データのロード
このセクションでは、さまざまなロード要件を満たすために、さまざまなパラメータ設定と組み合わせを使用する方法を説明します。
タイムアウト期間の設定
StarRocks データベース test_db
には、table1
という名前のテーブルが含まれています。このテーブルは、順番に col1
、col2
、col3
の 3 つの列で構成されています。
データファイル example1.csv
も 3 つの列で構成されており、順番に table1
の col1
、col2
、col3
にマッピングできます。
example1.csv
のすべてのデータを最大 100 秒以内に table1
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:label1" \
-H "Expect:100-continue" \
-H "timeout:100" \
-H "max_filter_ratio:0.2" \
-T example1.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table1/_stream_load
エラー許容度の設定
StarRocks データベース test_db
には、table2
という名前のテーブルが含まれています。このテーブルは、順番に col1
、col2
、col3
の 3 つの列で構成されています。
データファイル example2.csv
も 3 つの列で構成されており、順番に table2
の col1
、col2
、col3
にマッピングできます。
example2.csv
のすべてのデータを最大エラー許容度 0.2
で table2
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:label2" \
-H "Expect:100-continue" \
-H "max_filter_ratio:0.2" \
-T example2.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table2/_stream_load
列マッピングの設定
StarRocks データベース test_db
には、table3
という名前のテーブルが含まれています。このテーブルは、順番に col1
、col2
、col3
の 3 つの列で構成されています。
データファイル example3.csv
も 3 つの列で構成されており、順番に table3
の col2
、col1
、col3
にマッピングできます。
example3.csv
のすべてのデータを table3
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:label3" \
-H "Expect:100-continue" \
-H "columns: col2, col1, col3" \
-T example3.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table3/_stream_load
注意
前述の例では、
example3.csv
の列はtable3
の列と同じ順序でマッピングできないため、columns
パラメータを使用してexample3.csv
とtable3
間の列マッピングを設定する必要があります。
フィルタ条件の設定
StarRocks データベース test_db
には、table4
という名前のテーブルが含まれています。このテーブルは、順番に col1
、col2
、col3
の 3 つの列で構成されています。
データファイル example4.csv
も 3 つの列で構成されており、順番に table4
の col1
、col2
、col3
にマッピングできます。
example4.csv
の最初の列の値が 20180601
に等しいデータレコードのみを table4
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:label4" \
-H "Expect:100-continue" \
-H "columns: col1, col2, col3"\
-H "where: col1 = 20180601" \
-T example4.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table4/_stream_load
注意
前述の例では、
example4.csv
とtable4
は同じ数の列を持ち、順番にマッピングできますが、WHERE 句を使用して列ベースのフィルタ条件を指定する必要があります。そのため、columns
パラメータを使用してexample4.csv
の列に一時的な名前を定義する必要があります。
宛先パーティションの設定
StarRocks データベース test_db
には、table5
という名前のテーブルが含まれています。このテーブルは、順番に col1
、col2
、col3
の 3 つの列で構成されています。
データファイル example5.csv
も 3 つの列で構成されており、順番に table5
の col1
、col2
、col3
にマッピングできます。
example5.csv
のすべてのデータを table5
のパーティション p1
と p2
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:label5" \
-H "Expect:100-continue" \
-H "partitions: p1, p2" \
-T example5.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table5/_stream_load
ストリクトモードとタイムゾーンの設定
StarRocks データベース test_db
には、table6
という名前のテーブルが含まれています。このテーブルは、順番に col1
、col2
、col3
の 3 つの列で構成されています。
データファイル example6.csv
も 3 つの列で構成されており、順番に table6
の col1
、col2
、col3
にマッピングできます。
example6.csv
のすべてのデータをストリクトモードとタイムゾーン Africa/Abidjan
を使用して table6
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> \
-H "Expect:100-continue" \
-H "strict_mode: true" \
-H "timezone: Africa/Abidjan" \
-T example6.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table6/_stream_load
HLL 型の列を含むテーブルへのデータロード
StarRocks データベース test_db
には、table7
という名前のテーブルが含まれています。このテーブルは、順番に col1
と col2
の 2 つの HLL 型の列で構成されています。
データファイル example7.csv
も 2 つの列で構成されており、そのうち最初の列は table7
の col1
にマッピングでき、2 番目の列は table7
のいずれの列にもマッピングできません。example7.csv
の最初の列の値は、関数を使用して table7
の col1
にロードされる前に HLL 型のデータに変換できます。
example7.csv
のデータを table7
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> \
-H "Expect:100-continue" \
-H "columns: temp1, temp2, col1=hll_hash(temp1), col2=hll_empty()" \
-T example7.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table7/_stream_load
注意
前述の例では、
example7.csv
の 2 つの列はcolumns
パラメータを使用して順番にtemp1
とtemp2
と名付けられます。その後、関数を使用してデータを次のように変換します。
hll_hash
関数は、example7.csv
のtemp1
の値を HLL 型のデータに変換し、example7.csv
のtemp1
をtable7
のcol1
にマッピングします。
hll_empty
関数は、指定されたデフォルト値をtable7
のcol2
に埋め込むために使用されます。
関数 hll_hash
および hll_empty
の使用方法については、 hll_hash および hll_empty を参照してください。
BITMAP 型の列を含むテーブルへのデータロード
StarRocks データベース test_db
には、table8
という名前のテーブルが含まれています。このテーブルは、順番に col1
と col2
の 2 つの BITMAP 型の列で構成されています。
データファイル example8.csv
も 2 つの列で構成されており、そのうち最初の列は table8
の col1
にマッピングでき、2 番目の列は table8
のいずれの列にもマッピングできません。example8.csv
の最初の列の値は、関数を使用して table8
の col1
にロードされる前に変換できます。
example8.csv
のデータを table8
にロードしたい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> \
-H "Expect:100-continue" \
-H "columns: temp1, temp2, col1=to_bitmap(temp1), col2=bitmap_empty()" \
-T example8.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/table8/_stream_load
注意
前述の例では、
example8.csv
の 2 つの列はcolumns
パラメータを使用して順番にtemp1
とtemp2
と名付けられます。その後、関数を使用してデータを次のように変換します。
to_bitmap
関数は、example8.csv
のtemp1
の値を BITMAP 型のデータに変換し、example8.csv
のtemp1
をtable8
のcol1
にマッピングします。
bitmap_empty
関数は、指定されたデフォルト値をtable8
のcol2
に埋め込むために使用されます。
関数 to_bitmap
および bitmap_empty
の使用方法については、 to_bitmap および bitmap_empty を参照してください。
skip_header
、trim_space
、enclose
、escape
の設定
StarRocks データベース test_db
には、table9
という名前のテーブルが含まれています。このテーブルは、順番に col1
、col2
、col3
の 3 つの列で構成されています。
データファイル example9.csv
も 3 つの列で構成されており、順番に table9
の col2
、col1
、col3
にマッピングされています。
example9.csv
のすべてのデータを table9
にロードし、example9.csv
の最初の 5 行をスキップし、列セパレータの前後のスペースを削除し、enclose
を \
に、escape
を \
に設定したい場合、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:3875" \
-H "Expect:100-continue" \
-H "trim_space: true" -H "skip_header: 5" \
-H "column_separator:," -H "enclose:\"" -H "escape:\\" \
-H "columns: col2, col1, col3" \
-T example9.csv -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/tbl9/_stream_load
JSON データのロード
このセクションでは、JSON データをロードする際に注意すべきパラメータ設定について説明します。
StarRocks データベース test_db
には、次のスキーマを持つ tbl1
という名前のテーブルが含まれています。
`category` varchar(512) NULL COMMENT "",`author` varchar(512) NULL COMMENT "",`title` varchar(512) NULL COMMENT "",`price` double NULL COMMENT ""
シンプルモードを使用した JSON データのロード
データファイル example1.json
が次のデータで構成されているとします。
{"category":"C++","author":"avc","title":"C++ primer","price":895}
example1.json
のすべてのデータを tbl1
にロードするには、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:label6" \
-H "Expect:100-continue" \
-H "format: json" \
-T example1.json -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/tbl1/_stream_load
注意
前述の例では、
columns
およびjsonpaths
パラメータは指定されていません。そのため、example1.json
のキーは名前によってtbl1
の列にマッピングされます。
スループットを向上させるために、Stream Load は複数のデータレコードを一度にロードすることをサポートしています。例:
[{"category":"C++","author":"avc","title":"C++ primer","price":89.5},{"category":"Java","author":"avc","title":"Effective Java","price":95},{"category":"Linux","author":"avc","title":"Linux kernel","price":195}]
マッチモードを使用した JSON データのロード
StarRocks は、JSON データをマッチングして処理するために次の手順を実行します。
-
(オプション)
strip_outer_array
パラメータ設定によって指示された最外部の配列構造を削除します。注意
この手順は、JSON データの最外部レイヤーが角括弧
[]
で示される配列構造である場合にのみ実行されます。strip_outer_array
をtrue
に設定する必要があります。 -
(オプション)
json_root
パラメータ設定によって指定された JSON データのルート要素をマッチングします。注意
この手順は、JSON データにルート要素がある場合にのみ実行されます。
json_root
パラメータを使用してルート要素を指定する必要があります。 -
jsonpaths
パラメータ設定によって指定された JSON データを抽出します。
ルート要素を指定せずにマッチモードを使用して JSON データをロード
データファイル example2.json
が次のデータで構成されているとします。
[{"category":"xuxb111","author":"1avc","title":"SayingsoftheCentury","price":895},{"category":"xuxb222","author":"2avc","title":"SayingsoftheCentury","price":895},{"category":"xuxb333","author":"3avc","title":"SayingsoftheCentury","price":895}]
example2.json
から category
、author
、price
のみをロードするには、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> -H "label:label7" \
-H "Expect:100-continue" \
-H "format: json" \
-H "strip_outer_array: true" \
-H "jsonpaths: [\"$.category\",\"$.price\",\"$.author\"]" \
-H "columns: category, price, author" \
-T example2.json -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/tbl1/_stream_load
注意
前述の例では、JSON データの最外部レイヤーが角括弧
[]
で示される配列構造です。配列構造は、各データレコードを表す複数の JSON オブジェクトで構成されています。そのため、最外部の配列構造を削除するためにstrip_outer_array
をtrue
に設定する必要があります。ロードしたくないキー title はロード中に無視されます。
ルート要素を指定してマッチモードを使用して JSON データをロード
データファイル example3.json
が次のデータで構成されているとします。
{"id": 10001,"RECORDS":[{"category":"11","title":"SayingsoftheCentury","price":895,"timestamp":1589191587},{"category":"22","author":"2avc","price":895,"timestamp":1589191487},{"category":"33","author":"3avc","title":"SayingsoftheCentury","timestamp":1589191387}],"comments": ["3 records", "there will be 3 rows"]}
example3.json
から category
、author
、price
のみをロードするには、次のコマンドを実行します。
curl --location-trusted -u <username>:<password> \
-H "Expect:100-continue" \
-H "format: json" \
-H "json_root: $.RECORDS" \
-H "strip_outer_array: true" \
-H "jsonpaths: [\"$.category\",\"$.price\",\"$.author\"]" \
-H "columns: category, price, author" -H "label:label8" \
-T example3.json -XPUT \
http://<fe_host>:<fe_http_port>/api/test_db/tbl1/_stream_load
注意
前述の例では、JSON データの最外部レイヤーが角括弧
[]
で示される配列構造です。配列構造は、各データレコードを表す複数の JSON オブジェクトで構成されています。そのため、最外部の配列構造を削除するためにstrip_outer_array
をtrue
に設定する必要があります。ロードしたくないキーtitle
とtimestamp
はロード中に無視されます。さらに、json_root
パラメータは、JSON データのルート要素である配列を指定するために使用されます。