URLテーブルエンジン
リモートのHTTP/HTTPSサーバーからデータをクエリします。このエンジンはFileエンジンに似ています。
構文: URL(URL [,Format] [,CompressionMethod])
-
URL
パラメータは、Uniform Resource Locatorの構造に従う必要があります。指定されたURLはHTTPまたはHTTPSを使用するサーバーを指す必要があります。サーバーからの応答を得るために追加のヘッダーは必要ありません。 -
Format
はClickHouseがSELECT
クエリで使用できる形式でなければならず、必要に応じてINSERT
でも使用されます。サポートされている形式の完全なリストについては、Formatsを参照してください。この引数が指定されていない場合、ClickHouseは
URL
パラメータのサフィックスから形式を自動的に検出します。URL
パラメータのサフィックスがサポートされている形式のいずれとも一致しない場合、テーブルの作成に失敗します。例えば、エンジン式URL('http://localhost/test.json')
の場合、JSON
形式が適用されます。 -
CompressionMethod
は、HTTPボディを圧縮すべきかどうかを示します。圧縮が有効になっている場合、URLエンジンによって送信されるHTTPパケットには、どの圧縮方法が使用されているかを示すContent-Encoding
ヘッダーが含まれます。
圧縮を有効にするには、まずURL
パラメータで示されたリモートHTTPエンドポイントが対応する圧縮アルゴリズムをサポートしていることを確認してください。
サポートされているCompressionMethod
は以下のいずれかである必要があります:
- gzipまたはgz
- deflate
- brotliまたはbr
- lzmaまたはxz
- zstdまたはzst
- lz4
- bz2
- snappy
- none
- auto
CompressionMethod
が指定されていない場合、デフォルトはauto
です。これはClickHouseがURL
パラメータのサフィックスから圧縮方法を自動的に検出することを意味します。サフィックスが上記の圧縮方法のいずれかに一致する場合、対応する圧縮が適用され、圧縮が有効でない場合もあります。
例えば、エンジン式URL('http://localhost/test.gzip')
の場合、gzip
圧縮方法が適用されますが、URL('http://localhost/test.fr')
の場合は、サフィックスfr
が上記の圧縮方法のいずれとも一致しないため、圧縮は有効になりません。
使用方法
INSERT
およびSELECT
クエリは、それぞれPOST
およびGET
リクエストに変換されます。POST
リクエストを処理するためには、リモートサーバーがChunked transfer encodingをサポートしている必要があります。
max_http_get_redirects設定を使用して、最大のHTTP GETリダイレクトホップ数を制限できます。
例
1. サーバー上にurl_engine_table
テーブルを作成します:
2. 標準のPython 3ツールを使用して基本的なHTTPサーバーを作成し、起動します:
3. データをリクエストします:
実装の詳細
- 読み取りおよび書き込みは並列に可能です。
- サポートされていないもの:
ALTER
およびSELECT...SAMPLE
操作。- インデックス。
- レプリケーション。
仮想カラム
_path
—URL
へのパス。タイプ:LowCardinality(String)
。_file
—URL
のリソース名。タイプ:LowCardinality(String)
。_size
— リソースのサイズ(バイト単位)。タイプ:Nullable(UInt64)
。サイズが不明な場合、値はNULL
です。_time
— ファイルの最終変更時刻。タイプ:Nullable(DateTime)
。時刻が不明な場合、値はNULL
です。_headers
- HTTP応答ヘッダー。タイプ:Map(LowCardinality(String), LowCardinality(String))
。
ストレージ設定
- engine_url_skip_empty_files - 読み取り時に空のファイルをスキップできるようにします。デフォルトでは無効です。
- enable_url_encoding - URI内のパスのデコード/エンコードを有効/無効にします。デフォルトでは有効です。