gcs テーブル関数
Google Cloud Storage からデータを SELECT および INSERT するためのテーブル形式のインターフェイスを提供します。Storage Object User IAM ロールの付与が必要です。
これは s3 テーブル関数 のエイリアスです。
クラスター内に複数のレプリカがある場合は、代わりに s3Cluster 関数(GCS でも動作します)を使用して、INSERT の実行を並列化できます。
構文
GCS Table Function は、GCS XML API と HMAC キーを使用して Google Cloud Storage と連携します。 エンドポイントと HMAC の詳細については、Google interoperability docs を参照してください。
引数
| Argument | Description |
|---|---|
url | ファイルへのバケットパス。読み取り専用モードでは、次のワイルドカードをサポートします: *、**、?、{abc,def}、および {N..M}。ここで N、M は数値、'abc'、'def' は文字列です。 |
NOSIGN | 資格情報の代わりにこのキーワードが指定された場合、すべてのリクエストは署名されません。 |
hmac_key and hmac_secret | 指定されたエンドポイントで使用する資格情報を指定するためのキー。省略可能です。 |
format | ファイルのフォーマット。 |
structure | テーブルの構造。形式: 'column1_name column1_type, column2_name column2_type, ...'。 |
compression_method | このパラメータは省略可能です。サポートされる値: none、gzip または gz、brotli または br、xz または LZMA、zstd または zst。デフォルトでは、ファイル拡張子により圧縮方式が自動検出されます。 |
GCS パスは次の形式です。これは、Google XML API のエンドポイントが JSON API と異なるためです。
and not http://storage.cloud.google.com.
引数は named collections を使って渡すこともできます。この場合、url、format、structure、compression_method は同様に動作し、さらにいくつかの追加パラメータがサポートされます。
| Parameter | Description |
|---|---|
access_key_id | hmac_key。省略可能。 |
secret_access_key | hmac_secret。省略可能。 |
filename | 指定された場合、URL の末尾に付加されます。 |
use_environment_credentials | デフォルトで有効。環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI、AWS_CONTAINER_CREDENTIALS_FULL_URI、AWS_CONTAINER_AUTHORIZATION_TOKEN、AWS_EC2_METADATA_DISABLED を使用して追加パラメータを渡すことができます。 |
no_sign_request | デフォルトでは無効。 |
expiration_window_seconds | デフォルト値は 120。 |
返される値
指定されたファイル内のデータを読み書きするための、指定された構造を持つテーブルです。
例
GCS ファイル http://storage.googleapis.com/my-test-bucket-768/data.csv にあるテーブルから先頭 2 行を選択します:
同様ですが、gzip 圧縮形式のファイルから読み込む場合は次のとおりです:
使用方法
GCS 上に、次の URI のファイルが複数存在するとします:
- 'http://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_1.csv'
- 'http://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_2.csv'
- 'http://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_3.csv'
- 'http://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_4.csv'
- 'http://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_1.csv'
- 'http://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_2.csv'
- 'http://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_3.csv'
- 'http://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_4.csv'
末尾が 1 から 3 の数字で終わるファイルの行数をカウントします:
これら 2 つのディレクトリ内にあるすべてのファイルの行の総数をカウントします。
ファイル一覧に先頭にゼロが付いた番号範囲が含まれている場合は、各桁を別々に波かっこで指定する構文を使うか、? を使用してください。
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 式を指定すると、各パーティション値ごとに別々のファイルが作成されます。データを個別のファイルに分割することで、読み取り処理の効率が向上します。
例
- キーにパーティション ID を含めると、個別のファイルが作成されます:
その結果、データは file_x.csv、file_y.csv、file_z.csv の3つのファイルに書き込まれます。
- バケット名にパーティション ID を含めると、ファイルは別々のバケットに作成されます。
その結果、データはそれぞれ異なるバケット内の 3 つのファイル my_bucket_1/file.csv、my_bucket_10/file.csv、my_bucket_20/file.csv に書き込まれます。