メインコンテンツまでスキップ
に最終更新

Google Cloud Storage(GCS)からのデータ取り込み

Apache Doris は、S3 互換プロトコルを介して GCS バケットにアクセスし、Google Cloud Storage(GCS)からファイルを取り込めます。このドキュメントでは、二つの取り込み方法と、それぞれの操作手順を説明します。

取り込み方法の選択​

Doris には、Google Cloud Storage からファイルを取り込む方法が二つあります。データ量と結果が必要になるまでの時間に応じて選択してください。

取り込み方法実行方式適した用途参照先
S3 Load非同期大量データの一括取り込み、長時間実行するジョブBroker Load マニュアル
S3 TVF(テーブル関数)同期少量データの取り込み、アドホッククエリ、すばやい検証このドキュメント

選択の目安は次のとおりです。

  • データ量が多い場合や、バックグラウンドでジョブを実行する必要がある場合は、S3 Load を使用します。
  • すぐに結果が必要な場合や、INSERT INTO ... SELECT と組み合わせる場合は、S3 TVF を使用します。

前提条件​

取り込みを始める前に、次の情報を用意してください。

  • Google Cloud Storage のバケット名(your_bucket_name)。
  • アクセス認証情報:Access Key と Secret Key。
  • GCS の Endpoint と Region(例:storage.us-west2.rep.googleapis.com と US-WEST2)。
  • デプロイ済みでアクセス可能な Apache Doris クラスター。

方法 1:S3 Load による取り込み(非同期)​

S3 Load は、大量データの非同期取り込みに適しています。パラメーターの詳細と高度な使い方については、Broker Load マニュアルを参照してください。

ステップ 1:データを準備する​

次の内容の CSV ファイル s3load_example.csv を作成し、Google Cloud Storage にアップロードします。

1,Emily,25
2,Benjamin,35
3,Olivia,28
4,Alexander,60
5,Ava,17
6,William,69
7,Sophia,32
8,James,64
9,Emma,37
10,Liam,64

ステップ 2:Doris にテーブルを作成する​

CREATE TABLE test_s3load(
user_id BIGINT NOT NULL COMMENT "user id",
name VARCHAR(20) COMMENT "name",
age INT COMMENT "age"
)
DUPLICATE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10;

ステップ 3:S3 Load でデータを取り込む​

LOAD LABEL s3_load_2022_04_01
(
DATA INFILE("s3://your_bucket_name/s3load_example.csv")
INTO TABLE test_s3load
COLUMNS TERMINATED BY ","
FORMAT AS "CSV"
(user_id, name, age)
)
WITH S3
(
"provider" = "GCP",
"s3.endpoint" = "storage.us-west2.rep.googleapis.com",
"s3.region" = "US-WEST2",
"s3.access_key" = "<your-ak>",
"s3.secret_key" = "<your-sk>"
)
PROPERTIES
(
"timeout" = "3600"
);

主なパラメーターは次のとおりです。

パラメーター説明
providerオブジェクトストレージのプロバイダー。GCS では GCP に固定します
s3.endpointGCS の S3 互換アクセス用エンドポイント
s3.regionGCS バケットが配置されているリージョン
s3.access_keyGCS のアクセスキー ID
s3.secret_keyGCS のシークレットアクセスキー
timeout取り込みのタイムアウト(秒)

ステップ 4:取り込んだデータを確認する​

SELECT * FROM test_s3load;

期待される結果:

mysql> select * from test_s3load;
+---------+-----------+------+
| user_id | name | age |
+---------+-----------+------+
| 5 | Ava | 17 |
| 10 | Liam | 64 |
| 7 | Sophia | 32 |
| 9 | Emma | 37 |
| 1 | Emily | 25 |
| 4 | Alexander | 60 |
| 2 | Benjamin | 35 |
| 3 | Olivia | 28 |
| 6 | William | 69 |
| 8 | James | 64 |
+---------+-----------+------+
10 rows in set (0.04 sec)

方法 2:TVF による取り込み(同期)​

S3 テーブル関数(TVF)は、同期取り込みやアドホッククエリに適しており、INSERT INTO ... SELECT と直接組み合わせて使用できます。

ステップ 1:データを準備する​

次の内容の CSV ファイル s3load_example.csv を作成し、Google Cloud Storage にアップロードします。

1,Emily,25
2,Benjamin,35
3,Olivia,28
4,Alexander,60
5,Ava,17
6,William,69
7,Sophia,32
8,James,64
9,Emma,37
10,Liam,64

ステップ 2:Doris にテーブルを作成する​

CREATE TABLE test_s3load(
user_id BIGINT NOT NULL COMMENT "user id",
name VARCHAR(20) COMMENT "name",
age INT COMMENT "age"
)
DUPLICATE KEY(user_id)
DISTRIBUTED BY HASH(user_id) BUCKETS 10;

ステップ 3:TVF でデータを取り込む​

INSERT INTO test_s3load
SELECT * FROM S3
(
"uri" = "s3://your_bucket_name/s3load_example.csv",
"format" = "csv",
"provider" = "GCP",
"s3.endpoint" = "storage.us-west2.rep.googleapis.com",
"s3.region" = "US-WEST2",
"s3.access_key" = "<your-ak>",
"s3.secret_key" = "<your-sk>",
"column_separator" = ",",
"csv_schema" = "user_id:int;name:string;age:int"
);

主なパラメーターは次のとおりです。

パラメーター説明
uriオブジェクトストレージ内のファイルの S3 URI
formatcsv、parquet、orc などのファイル形式
providerオブジェクトストレージのプロバイダー。GCS では GCP に固定します
s3.endpointGCS の S3 互換アクセス用エンドポイント
s3.regionGCS バケットが配置されているリージョン
s3.access_keyGCS のアクセスキー ID
s3.secret_keyGCS のシークレットアクセスキー
column_separator列の区切り文字
csv_schemacolumn_name:type;column_name:type 形式の CSV 列定義

ステップ 4:取り込んだデータを確認する​

SELECT * FROM test_s3load;

期待される結果:

mysql> select * from test_s3load;
+---------+-----------+------+
| user_id | name | age |
+---------+-----------+------+
| 5 | Ava | 17 |
| 10 | Liam | 64 |
| 7 | Sophia | 32 |
| 9 | Emma | 37 |
| 1 | Emily | 25 |
| 4 | Alexander | 60 |
| 2 | Benjamin | 35 |
| 3 | Olivia | 28 |
| 6 | William | 69 |
| 8 | James | 64 |
+---------+-----------+------+
10 rows in set (0.04 sec)

よくある質問​

Q1: provider パラメーターには何を指定しますか?

Google Cloud Storage から取り込む場合は、Doris が S3 互換プロトコルを介して GCS にアクセスできるよう、provider に GCP を指定する必要があります。

Q2: S3 Load と S3 TVF はどのように選べばよいですか?

  • 大量データをバックグラウンドで非同期に取り込む必要がある場合は、S3 Load を選択します。
  • 少量データですぐに結果が必要な場合や、SQL クエリと組み合わせる場合は、S3 TVF を選択します。

Q3: GCS の Access Key と Secret Key はどこで取得できますか?

S3 互換アクセス用の HMAC キー(Access Key / Secret Key)は、Google Cloud Console の Cloud Storage > Settings > Interoperability ページで作成・管理できます。

Q4: Endpoint と Region はどのように確認しますか?

Endpoint と Region は、バケットが配置されているリージョンによって異なります。たとえば、リージョン US-WEST2 に対応するエンドポイントは storage.us-west2.rep.googleapis.com です。実際のバケットの配置先に応じて、これらの値を置き換えてください。

Q5: 取り込みがタイムアウトした場合はどうすればよいですか?

timeout パラメーター(単位:秒)を PROPERTIES で増やしてください。デフォルトは 3600 です。ファイルが非常に大きい場合やネットワークが遅い場合は、必要に応じて延長してください。