gcs テーブル関数
SELECT
と INSERT
データを Google Cloud Storage から操作するためのテーブルのようなインターフェースを提供します。 Storage Object User
IAMロール が必要です。
これは s3 テーブル関数 のエイリアスです。
クラスタに複数のレプリカがある場合、挿入を並列化するために s3Cluster 関数 (GCS で動作します) を代わりに使用できます。
構文
GCS テーブル関数は、GCS XML API と HMAC キーを使用して Google Cloud Storage と統合します。エンドポイントと HMAC に関する詳細については、Google の相互運用性ドキュメント を参照してください。
引数
引数 | 説明 |
---|---|
url | ファイルへのバケットパス。読み取り専用モードで次のワイルドカードをサポートします: * , ** , ? , {abc,def} 及び {N..M} (ここで、N と M は数、'abc' と 'def' は文字列)。 |
NOSIGN | このキーワードが認証情報の代わりに提供されると、すべてのリクエストは署名されません。 |
hmac_key と hmac_secret | 指定されたエンドポイントで使用するための認証情報を示すキー。オプションです。 |
format | ファイルの 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 とは異なるからです:
そして https://storage.cloud.google.com ではありません。
引数は named collections を使用しても渡すことができます。この場合、url
, format
, structure
, compression_method
は同じように機能し、追加のパラメータがサポートされます:
パラメータ | 説明 |
---|---|
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ファイル https://storage.googleapis.com/my-test-bucket-768/data.csv
から最初の2行を選択:
同様ですが、gzip
圧縮メソッドのファイルから:
使用法
GCS上に次のURIのいくつかのファイルがあると仮定します:
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_1.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_2.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_3.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_4.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_1.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_2.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_3.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_4.csv'
1から3の数字で終わるファイルの行数をカウント:
これらの二つのディレクトリ内のすべてのファイルの総行数をカウント:
ファイルのリストに先頭ゼロのある数値範囲が含まれている場合は、各桁ごとにブレースを使用するか、?
を使用してください。
file-000.csv
, file-001.csv
, ... , file-999.csv
というファイルの総行数をカウント:
ファイル test-data.csv.gz
にデータを挿入:
既存のテーブルからファイル test-data.csv.gz
にデータを挿入:
** は再帰的なディレクトリトラバーサルに使用できます。次の例を考えてみてください。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
。
- バケット名にパーティションIDを使用すると、異なるバケットにファイルが作成されます:
その結果、データは異なるバケットに三つのファイルに書き込まれます: my_bucket_1/file.csv
, my_bucket_10/file.csv
, および my_bucket_20/file.csv
。