s3 テーブル関数
ファイルを選択/挿入するためのテーブルのようなインターフェースを提供します。対象は Amazon S3 および Google Cloud Storage です。このテーブル関数は hdfs 関数 に似ていますが、S3 特有の機能を提供します。
クラスターに複数のレプリカがある場合は、挿入を並列化するために s3Cluster 関数 を使用できます。
s3 テーブル関数
を INSERT INTO...SELECT
と共に使用する場合、データはストリーミング形式で読み込まれ、挿入されます。メモリには数ブロックのデータしか保持されず、ブロックは S3 から継続的に読み込まれ、宛先テーブルにプッシュされます。
構文
S3 テーブル関数は、GCS XML API と HMAC キーを使用して Google Cloud Storage と統合されます。エンドポイントおよび HMAC に関する詳細については、Google の相互運用性ドキュメント をご覧ください。
GCS の場合、access_key_id
および secret_access_key
に指定される HMAC キーと HMAC シークレットを置き換えます。
パラメーター
s3
テーブル関数は以下のプレーンパラメーターをサポートしています:
パラメーター | 説明 |
---|---|
url | ファイルへのパスを含むバケット URL。読み取り専用モードで次のワイルドカードをサポートします: * , ** , ? , {abc,def} および {N..M} ただし、N , M は数字、'abc' , 'def' は文字列です。詳細については こちら を参照してください。 |
NOSIGN | このキーワードが資格情報の代わりに提供されると、すべてのリクエストは署名されません。 |
access_key_id および secret_access_key | 指定されたエンドポイントで使用する資格情報を指定するキー。オプションです。 |
session_token | 指定されたキーと共に使用するセッショントークン。キーを渡す場合はオプションです。 |
format | ファイルの フォーマット。 |
structure | テーブルの構造。形式は 'column1_name column1_type, column2_name column2_type, ...' 。 |
compression_method | パラメーターはオプションです。サポートされる値: none , gzip または gz , brotli または br , xz または LZMA , zstd または zst 。デフォルトでは、ファイルの拡張子に基づいて圧縮方法が自動的に検出されます。 |
headers | パラメーターはオプションです。S3 リクエストにヘッダーを渡すことを許可します。形式は headers(key=value) です。例えば、headers('x-amz-request-payer' = 'requester') のようにします。 |
partition_strategy | パラメーターはオプションです。サポートされる値: WILDCARD または HIVE 。WILDCARD ではパスに {_partition_id} が必要で、これはパーティションキーで置き換えられます。HIVE はワイルドカードを許可せず、パスがテーブルのルートであると仮定し、Snowflake ID をファイル名とし、ファイルフォーマットを拡張子として持つ Hive スタイルのパーティションディレクトリを生成します。デフォルトは WILDCARD です。 |
partition_columns_in_data_file | パラメーターはオプションです。HIVE パーティション戦略でのみ使用されます。ClickHouse にデータファイルにパーティション列が書き込まれることを期待するかどうかを教えます。デフォルトは false です。 |
storage_class_name | パラメーターはオプションです。サポートされる値: STANDARD または INTELLIGENT_TIERING 。AWS S3 Intelligent Tiering を指定できます。こちら を参照してください。デフォルトは STANDARD です。 |
GCS URL はこの形式です。Google XML API のエンドポイントは JSON API と異なります:
および https://storage.cloud.google.com ではありません。
引数は 名前付きコレクション を使用しても渡すことができます。この場合、url
, access_key_id
, secret_access_key
, format
, structure
, compression_method
は同様に機能し、追加のパラメーターがサポートされます:
引数 | 説明 |
---|---|
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 です。 |
戻り値
指定されたファイルにデータを読み書きするための指定された構造のテーブル。
例
S3ファイル https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv
から最初の5行を選択する:
ClickHouseはファイル名の拡張子を使用してデータのフォーマットを決定します。例えば、前のコマンドを CSVWithNames
なしで実行することもできます:
ClickHouseはまた、ファイルの圧縮方法も決定できます。例えば、ファイルが .csv.gz
拡張子で圧縮されている場合、ClickHouseはファイルを自動的に解凍します。
使用法
S3 に以下の URI を持ついくつかのファイルがあるとしましょう:
- 'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some_prefix/some_file_1.csv'
- 'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some_prefix/some_file_2.csv'
- 'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some_prefix/some_file_3.csv'
- 'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some_prefix/some_file_4.csv'
- 'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another_prefix/some_file_1.csv'
- 'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another_prefix/some_file_2.csv'
- 'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another_prefix/some_file_3.csv'
- 'https://clickhouse-public-datasets.s3.amazonaws.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
ファイルのデータを再帰的に取得します:
注意: サーバーの設定ファイルでカスタム URL マッパーを指定することが可能です。例:
URL 's3://clickhouse-public-datasets/my-test-bucket-768/**/test-data.csv.gz'
は 'http://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/**/test-data.csv.gz'
に置き換えられます。
カスタムマッパーは config.xml
に追加できます:
本番使用例では、名前付きコレクション の使用をお勧めします。以下はその例です:
パーティション付き書き込み
パーティション戦略
INSERT クエリのみに対応しています。
WILDCARD
(デフォルト): ファイルパス内の {_partition_id}
ワイルドカードを、実際のパーティションキーに置き換えます。
HIVE
は読み取りおよび書き込みのための Hive スタイルのパーティションを実装します。ファイルは次の形式で生成されます: <prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>
。
HIVE
パーティション戦略の例
WILDCARD
パーティション戦略の例
- キーにパーティションIDを使用すると、別々のファイルが作成されます:
その結果、データは file_x.csv
、file_y.csv
、および file_z.csv
という3つのファイルに書き込まれます。
- バケット名にパーティションIDを使用すると、異なるバケットにファイルが作成されます:
その結果、データは異なるバケットにある my_bucket_1/file.csv
、my_bucket_10/file.csv
、および my_bucket_20/file.csv
という3つのファイルに書き込まれます。
公開バケットへのアクセス
ClickHouse はさまざまな種類のソースから資格情報を取得しようとします。
これにより、公開バケットへのアクセス時にクライアントが 403
エラーコードを返す問題が発生することがあります。
この問題は、NOSIGN
キーワードを使用して回避でき、クライアントにすべての資格情報を無視させ、リクエストに署名しないようにします。
S3 資格情報を使用する (ClickHouse Cloud)
非公開バケットの場合、ユーザーは関数に aws_access_key_id
および aws_secret_access_key
を渡すことができます。例えば:
これは一時的なアクセスに適していますが、資格情報が簡単にローテーションできる場合には推奨されません。繰り返しのアクセスや資格情報が敏感な場合には、ロールベースのアクセスを利用することをお勧めします。
ClickHouse Cloud における S3 のロールベースのアクセスについては、こちら を参照してください。
構成後、roleARN
を extra_credentials
パラメーター経由で s3 関数に渡すことができます。例えば:
更なる例は こちら で見つけることができます。
アーカイブの操作
S3 に以下の URI を持ついくつかのアーカイブファイルがあるとしましょう:
- 'https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip'
- 'https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip'
- 'https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip'
これらのアーカイブからデータを抽出するには :: を利用できます。グロブを URL 部分や :: の後の部分(アーカイブ内のファイル名を指定)に使用できます。
ClickHouse は3つのアーカイブフォーマットをサポートします: ZIP TAR 7Z ZIP および TAR アーカイブは、すべてのサポートされているストレージロケーションからアクセスできますが、7Z アーカイブは ClickHouse がインストールされているローカルファイルシステムからのみ読み取ることができます。
データの挿入
行は新しいファイルにのみ挿入することができます。マージサイクルやファイル分割操作はありません。ファイルが書き込まれた後、次の挿入は失敗します。詳細は こちら を参照してください。
仮想カラム
_path
— ファイルへのパス。タイプ:LowCardinality(String)
。アーカイブの場合、次の形式で表示されます:"{path_to_archive}::{path_to_file_inside_archive}"
_file
— ファイル名。タイプ:LowCardinality(String)
。アーカイブの場合、アーカイブ内のファイル名が表示されます。_size
— ファイルのサイズ(バイト)。タイプ:Nullable(UInt64)
。ファイルサイズが不明な場合、値はNULL
です。アーカイブの場合、アーカイブ内のファイルの未圧縮のファイルサイズが表示されます。_time
— ファイルの最終変更時間。タイプ:Nullable(DateTime)
。時間が不明な場合、値はNULL
です。
use_hive_partitioning 設定
これは ClickHouse に対して、読み取り時に Hive スタイルのパーティションファイルを解析するためのヒントです。書き込みには影響しません。対称的な読み取りと書き込みに対しては、partition_strategy
引数を使用してください。
use_hive_partitioning
が 1 に設定されている場合、ClickHouse はパス内の Hive スタイルのパーティション (/name=value/
) を検出し、クエリ内で仮想カラムとしてパーティション列を使用できるようにします。これらの仮想カラムは、パーティションパスと同じ名前を持ちますが、_
で始まります。
例
請求者負担バケットへのアクセス
請求者負担バケットにアクセスするには、リクエストに x-amz-request-payer = requester
ヘッダーを渡す必要があります。これは、headers('x-amz-request-payer' = 'requester')
パラメーターを s3 関数に渡すことで実現されます。例えば:
ストレージ設定
- s3_truncate_on_insert - 挿入する前にファイルを切り詰めることができます。デフォルトは無効です。
- s3_create_new_file_on_insert - フォーマットにサフィックスがある場合に、各挿入で新しいファイルを作成することを許可します。デフォルトは無効です。
- s3_skip_empty_files - 読み取り中に空のファイルをスキップすることを許可します。デフォルトは有効です。