GCS からデータをロードする
StarRocks は、GCS からデータをロードするための以下のオプションを提供しています:
- INSERT+
FILES()を使用した同期ロード - Broker Load を使用した非同期ロード
これらのオプションにはそれぞれの利点があり、詳細は以下のセクションで説明します。
ほとんどの場合、使用が簡単な INSERT+FILES() メソッドを推奨します。
ただし、INSERT+FILES() メソッドは現在、Parquet、ORC、および CSV ファイル形式のみをサポートしています。そのため、JSON などの他のファイル形式のデータをロードする必要がある場合や、データロード中に DELETE などのデータ変更を行う場合は、Broker Load を利用できます。
始める前に
ソースデータを準備する
StarRocks にロードしたいソースデータが GCS バケットに適切に保存されていることを確認してください。また、データとデータベースの場所を考慮することもお勧めします。バケットと StarRocks クラスタが同じ地域にある場合、データ転送コストは大幅に低くなります。
このトピックでは、GCS バケット内のサンプルデータセット gs://starrocks-samples/user_behavior_ten_million_rows.parquet を提供します。このオブジェクトは GCP ユーザーであれば誰でも読み取れるため、有効な資格情報を使用してデータセットにアクセスできます。
権限を確認する
StarRocks のテーブルにデータを ロード するには、その StarRocks テーブルに対して INSERT 権限を持つユーザーである必要があります。INSERT 権限がない場合は、GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに INSERT 権限を付与してください。構文は GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>} です。
認証情報を収集する
このトピックの例では、サービスアカウントベースの認証を使用しています。IAM ユーザーベースの認証を実践するには、以下の GCS リソースに関する情報を収集する必要があります:
- データを保存する GCS バケット
- バケット内の特定のオブジェクトにアクセスする場合の GCS オブジェクトキー(オブジェクト名)。GCS オブジェクトがサブフォルダに保存されている場合、オブジェクトキーにはプレフィックスを含めることができます。
- GCS バケットが所属する GCS リージョン
- Google Cloud サービスアカウントの
private_key_id、private_key、およびclient_email
利用可能なすべての認証方法については、Google Cloud Storage への認証を参照してください。
INSERT+FILES() を使用する
このメソッドは v3.2 以降で利用可能で、現在は Parquet、ORC、および CSV(v3.3.0 以降)ファイル形式のみをサポートしています。
INSERT+FILES() の利点
FILES() は、指定したパス関連のプロパティに基づいてクラウドストレージに保存されたファイルを読み取り、ファイル内のデータのテーブルスキーマを推測し、ファイルからデータをデータ行として返すことができます。
FILES() を使用すると、以下が可能です:
- SELECT を使用して GCS から直接データをクエリする。
- CREATE TABLE AS SELECT (CTAS) を使用してテーブルを作成し、ロードする。
- INSERT を使用して既存のテーブルにデータをロードする。
典型的な例
SELECT を使用して GCS から直接クエリする
SELECT+FILES() を使用して GCS から直接クエリすることで、テーブルを作成する前にデータセットの内容をプレビューできます。例えば:
- データを保存せずにデータセットをプレビューする。
- 最小値と最大値をクエリし、使用するデータ型を決定する。
NULL値をチェックする。
以下の例は、サンプルデータセット gs://starrocks-samples/user_behavior_ten_million_rows.parquet をクエリします:
SELECT * FROM FILES
(
"path" = "gs://starrocks-samples/user_behavior_ten_million_rows.parquet",
"format" = "parquet",
"gcp.gcs.service_account_email" = "sampledatareader@xxxxx-xxxxxx-000000.iam.gserviceaccount.com",
"gcp.gcs.service_account_private_key_id" = "baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"gcp.gcs.service_account_private_key" = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
)
LIMIT 3;
NOTE
上記のコマンドの資格情報を自分の資格情報に置き換えてください。オブジェクトは GCP 認証済みユーザーであれば誰でも読み取れるため、有効なサービスアカウントのメール、キー、およびシークレットを使用できます。
システムは次のようなクエリ結果を返します:
+--------+---------+------------+--------------+---------------------+
| UserID | ItemID | CategoryID | BehaviorType | Timestamp |
+--------+---------+------------+--------------+---------------------+
| 543711 | 829192 | 2355072 | pv | 2017-11-27 08:22:37 |
| 543711 | 2056618 | 3645362 | pv | 2017-11-27 10:16:46 |
| 543711 | 1165492 | 3645362 | pv | 2017-11-27 10:17:00 |
+--------+---------+------------+--------------+---------------------+
NOTE
上記のように返される列名は Parquet ファイルによって提供されます。