HDFS またはクラウドストレージからデータをロードする
StarRocks は、MySQL ベースの Broker Load というロード方法を提 供しており、HDFS またはクラウドストレージから大量のデータを StarRocks にロードするのに役立ちます。
Broker Load は非同期ロードモードで動作します。ロードジョブを送信すると、StarRocks はジョブを非同期で実行します。ジョブの結果を確認するには、 SHOW LOAD ステートメントまたは curl コマンドを使用する必要があります。
Broker Load は、単一テーブルのロードと複数テーブルのロードをサポートしています。1 つの Broker Load ジョブを実行することで、1 つまたは複数のデータファイルを 1 つまたは複数の宛先テーブルにロードできます。Broker Load は、複数のデータファイルをロードする各ロードジョブのトランザクションの原子性を保証します。原子性とは、1 つのロードジョブで複数のデータファイルをロードする際に、すべてが成功するか失敗するかのいずれかであることを意味します。あるデータファイルのロードが成功し、他のファイルのロードが失敗することはありません。
Broker Load は、データロード時のデータ変換をサポートしており、データロード時に UPSERT および DELETE 操作によるデータ変更をサポートしています。詳細については、 Transform data at loading および Change data through loading を参照してください。
You can load data into StarRocks tables only as a user who has the INSERT privilege on those StarRocks tables. If you do not have the INSERT privilege, follow the instructions provided in GRANT to grant the INSERT privilege to the user that you use to connect to your StarRocks cluster. The syntax is GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}.
背景情報
v2.4 以前では、StarRocks は Broker Load ジョブを実行する際に、StarRocks クラスターと外部ストレージシステムとの接続を確立するためにブローカーに依存していました。そのため、ロードステートメントで使用するブローカーを指定するために WITH BROKER "<broker_name>" を入力する必要があります。これは「ブローカー ベースのロード」と呼ばれます。ブローカーは、ファイルシステムインターフェースと統合された独立したステートレスサービスです。ブローカーを使用すると、StarRocks は外部ストレージシステムに保存されているデータファイルにアクセスして読み取ることができ、独自の計算リソースを使用してこれらのデータファイルのデータを事前処理してロードできます。
v2.5 以降、StarRocks は Broker Load ジョブを実行する際に、StarRocks クラスターと外部ストレージシステムとの接続を確立するためにブローカーに依存しなくなりました。そのため、ロードステートメントでブローカーを指定する必要はありませんが、WITH BROKER キーワードを保持する必要があります。これは「ブローカー フリーのロード」と呼ばれます。
データが HDFS に保存されている場合、ブローカー フリーのロードが 機能しない状況に遭遇することがあります。これは、データが複数の HDFS クラスターにまたがって保存されている場合や、複数の Kerberos ユーザーが構成されている場合に発生する可能性があります。このような状況では、代わりにブローカー ベースのロードを使用することができます。これを成功させるには、少なくとも 1 つの独立したブローカーグループが展開されていることを確認してください。これらの状況で認証構成および HA 構成を指定する方法については、 HDFS を参照してください。
サポートされているデータファイル形式
Broker Load は、以下のデータファイル形式をサポートしています:
-
CSV
-
Parquet
-
ORC
注意
CSV データについては、以下の点に注意してください:
- テキスト区切り文字として、長さが 50 バイトを超えない UTF-8 文字列(カンマ(,)、タブ、パイプ(|)など)を使用できます。
- Null 値は
\Nを使用して示されます。たとえば、データファイルが 3 列で構成されており、そのデータファイルのレコードが最初と 3 番目の列にデータを保持し、2 番目の列にデータがない場合、この状況 では 2 番目の列に\Nを使用して null 値を示す必要があります。つまり、レコードはa,\N,bとしてコンパイルする必要があり、a,,bではありません。a,,bは、レコードの 2 番目の列が空の文字列を保持していることを示します。
サポートされているストレージシステム
Broker Load は、以下のストレージシステムをサポートしています:
-
HDFS
-
AWS S3
-
Google GCS
-
MinIO などの他の S3 互換ストレージシステム
-
Microsoft Azure Storage
動作の仕組み
ロードジョブを FE に送信すると、FE はクエリプランを生成し、利用可能な BE の数とロードしたいデータファイルのサイズに基づいてクエリプランを分割し、クエリプランの各部分を利用可能な BE に割り当てます。ロード中、関与する各 BE は HDFS またはクラウドストレージシステムからデータファイルのデータを取得し、データを事前処理してから StarRocks クラスターにデータをロードします。すべての BE がクエリプランの部分を完了した後、FE はロードジョブが成功したかどうかを判断します。
以下の図は、Broker Load ジョブのワークフローを示しています。

基本操作
複数テーブルのロードジョブを作成する
このトピックでは、CSV を例にとり、複数のデータファイルを複数のテーブルにロードする方法を説明します。他のファイル形式でデータをロードする方法や Broker Load の構文およびパラメータの説明については、 BROKER LOAD を参照してください。
StarRocks では、いくつかのリテラルが SQL 言語によって予約キーワードとして使用されていることに注意してください。これらのキーワードを SQL ステートメントで直接使用しないでください。SQL ステートメントでそのようなキーワードを使用する場合は、バッククォート (`) で囲んでください。 Keywords を参照してください。
データ例
-
ローカルファイルシステムに CSV ファイルを作成します。
a.
file1.csvという名前の CSV ファイルを作成します。このファイルは、順にユーザー ID、ユーザー名、ユーザースコアを表す 3 列で構成されています。1,Lily,23
2,Rose,23
3,Alice,24
4,Julia,25b.
file2.csvという名前の CSV ファイルを作成します。このファイルは、順に都市 ID と都市名を表す 2 列で構成されています。200,'Beijing' -
StarRocks データベース
test_dbに StarRocks テーブルを作成します。注意
v2.5.7 以降、StarRocks はテーブルを作成する際やパーティションを追加する際にバケット数 (BUCKETS) を自動的に設定できます。バケット数を手動で設定する必要はありません。詳細については、 set the number of buckets を参照してください。
a.
table1という名前の主キーテーブルを作成します。このテーブルは、id、name、scoreの 3 列で構成され、idが主キーです。CREATE TABLE `table1`
(
`id` int(11) NOT NULL COMMENT "user ID",
`name` varchar(65533) NULL DEFAULT "" COMMENT "user name",
`score` int(11) NOT NULL DEFAULT "0" COMMENT "user score"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`);b.
table2という名前の主キーテーブルを作成します。このテーブルは、idとcityの 2 列で構成され、idが主キーです。CREATE TABLE `table2`
(
`id` int(11) NOT NULL COMMENT "city ID",
`city` varchar(65533) NULL DEFAULT "" COMMENT "city name"
)
ENGINE=OLAP
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`); -
file1.csvとfile2.csvを HDFS クラスターの/user/starrocks/パス、AWS S3 バケットbucket_s3のinputフォルダー、Google GCS バケットbucket_gcsのinputフォルダー、MinIO バケットbucket_minioのinputフォルダー、および Azure Storage の指定されたパスにアップロードします。
HDFS からデータをロードする
HDFS クラスターの /user/starrocks パスから file1.csv と file2.csv をそれぞれ table1 と table2 にロードするには、次のステートメントを実行します:
LOAD LABEL test_db.label1
(
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/file1.csv")
INTO TABLE table1
COLUMNS TERMINATED BY ","
(id, name, score)
,
DATA INFILE("hdfs://<hdfs_host>:<hdfs_port>/user/starrocks/file2.csv")
INTO TABLE table2
COLUMNS TERMINATED BY ","
(id, city)
)
WITH BROKER
(
StorageCredentialParams
)
PROPERTIES
(
"timeout" = "3600"
);
上記の例では、StorageCredentialParams は、選択した認証方法に応じて異なる認証パラメータのグループを表します。詳細については、 BROKER LOAD を参照してください。
AWS S3 からデータをロードする
AWS S3 バケット bucket_s3 の input フォルダーから file1.csv と file2.csv をそれぞれ table1 と table2 にロードするには、次のステートメントを実行します:
LOAD LABEL test_db.label2
(
DATA INFILE("s3a://bucket_s3/input/file1.csv")
INTO TABLE table1
COLUMNS TERMINATED BY ","
(id, name, score)
,
DATA INFILE("s3a://bucket_s3/input/file2.csv")
INTO TABLE table2
COLUMNS TERMINATED BY ","
(id, city)
)
WITH BROKER
(
StorageCredentialParams
);
注意
Broker Load は、S3A プロトコルに従ってのみ AWS S3 にアクセスすることをサポートしています。そのため、AWS S3 からデータをロードする際には、ファイルパスとして渡す S3 URI の
s3://をs3a://に置き換える必要があります。
上記の例では、StorageCredentialParams は、選択した認証方法に応じて異なる認証パラメータのグループを表します。詳細については、 BROKER LOAD を参照してください。
v3.1 以降、StarRocks は、Parquet 形式または ORC 形式のファイルのデータを AWS S3 から直接ロードすることを INSERT コマンドと TABLE キーワードを使用してサポートしており、最初に外部テーブルを作成する手間を省くことができます。詳細については、 Load data using INSERT > Insert data directly from files in an external source using TABLE keyword を参照してください。
Google GCS からデータをロードする
Google GCS バケット bucket_gcs の input フォルダーから file1.csv と file2.csv をそれぞれ table1 と table2 にロードするには、次のステートメントを実行します:
LOAD LABEL test_db.label3
(
DATA INFILE("gs://bucket_gcs/input/file1.csv")
INTO TABLE table1
COLUMNS TERMINATED BY ","
(id, name, score)
,
DATA INFILE("gs://bucket_gcs/input/file2.csv")
INTO TABLE table2
COLUMNS TERMINATED BY ","
(id, city)
)
WITH BROKER
(
StorageCredentialParams
);
注意
Broker Load は、gs プロトコルに従ってのみ Google GCS にアクセスすることをサポートしています。そのため、Google GCS からデータをロードする際には、ファイルパスとして渡す GCS URI に
gs://を含める必要があります。
上記の例では、StorageCredentialParams は、選択した認証方法に応じて異なる認証パラメータのグループを表します。詳細については、 BROKER LOAD を参照してください。
他の S3 互換ストレージシステムからデータをロードする
MinIO を例にとります。MinIO バケット bucket_minio の input フォルダーから file1.csv と file2.csv をそれぞれ table1 と table2 にロードするには、次のステートメントを実行します:
LOAD LABEL test_db.label7
(
DATA INFILE("s3://bucket_minio/input/file1.csv")
INTO TABLE table1
COLUMNS TERMINATED BY ","
(id, name, score)
,
DATA INFILE("s3://bucket_minio/input/file2.csv")
INTO TABLE table2
COLUMNS TERMINATED BY ","
(id, city)
)
WITH BROKER
(
StorageCredentialParams
);
上記の例では、StorageCredentialParams は、選択した認証方法に応じて異なる認証パラメータのグループを表します。詳細については、 BROKER LOAD を参照してください。