メインコンテンツへスキップ
Google Cloud Storage のデータに対して SELECT および INSERT を行うためのテーブル形式インターフェイスを提供します。Storage Object User IAM role が必要です。 これは s3 テーブル関数 の別名です。 クラスター内に複数のレプリカがある場合は、代わりに s3Cluster function (GCS でも使用可能) を使うことで、挿入を並列化できます。

構文

GCSGCS テーブル関数は、GCS XML API と HMAC キーを使用して Google Cloud Storage と連携します。 エンドポイントと HMAC の詳細については、Google の相互運用性に関するドキュメント を参照してください。

引数

GCSGoogle XML API の エンドポイント は JSON API と異なるため、GCS パスは次の形式になります:
https://storage.cloud.google.com ではありません。
引数は named collections を使って渡すこともできます。この場合、url、format、structure、compression_method、partition_strategy は同様に機能し、追加のパラメータもいくつかサポートされます:

戻り値

指定されたファイル内のデータの読み取りまたは書き込みに使用される、指定された構造のテーブル。

例

GCSファイル https://storage.googleapis.com/clickhouse_public_datasets/my-test-bucket-768/data.csv.gz から先頭2行を選択する例です。圧縮方式は .gz ファイル拡張子から自動的に検出されます:
上記と同じクエリですが、自動検出に頼らず、gzip 圧縮方式を明示的に指定しています:

使用例

GCS 上に、次の URI を持つ複数のファイルがあるとします。 末尾の数字が 1 から 3 のファイルの行数を数えます。
これら2つのディレクトリ内のすべてのファイルに含まれる行数の合計を数えます:
ファイル一覧に先頭に 0 が付いた数値範囲が含まれる場合は、各桁ごとに波かっこを使った構文を使用するか、? を使用してください。
file-000.csv、file-001.csv、…、file-999.csv という名前のファイル内の行数の合計を数えます。
ファイル test-data.csv.gz にデータを挿入します:
既存のテーブルのデータをファイル test-data.csv.gz に挿入します:
Glob ** は、ディレクトリを再帰的にたどるために使用できます。以下の例では、my-test-bucket-768 ディレクトリ配下のすべてのファイルを再帰的に取得します。
以下では、my-test-bucket ディレクトリ内の任意のフォルダにあるすべての test-data.csv.gz ファイルから、再帰的にデータを取得します:
本番環境で利用する場合は、named collectionsの使用を推奨します。以下はその例です。

パーティション単位での書き込み

GCS テーブルへのデータ挿入時に PARTITION BY 式を指定すると、パーティション値ごとに個別のファイルが作成されます。データをファイルごとに分割することで、読み取り処理の効率向上につながります。 {_partition_id} を含むパスでは wildcard パーティション方式が使用されるため、以下の例の partition_strategy='wildcard' の明示的な指定は省略可能です。別の glob を含むパスではパーティション方式は使用されず、PARTITION BY は無視されます。glob を含まないパスでは、file_like_engine_default_partition_strategy が hive の場合は hive が使用され、それ以外の場合はパーティション方式は使用されません。 例
  1. キーにパーティション ID を使用すると、個別のファイルが作成されます:
その結果、データは file_x.csv、file_y.csv、file_z.csv の3つのファイルに書き込まれます。
  1. バケット名にパーティション ID を使用すると、ファイルは異なるバケットに作成されます:
その結果、データは異なる3つのバケット内の my_bucket_1/file.csv、my_bucket_10/file.csv、my_bucket_20/file.csv という3つのファイルに書き込まれます。

関連