AzureBlobStorage table engine
This engine provides an integration with Azure Blob Storage ecosystem.
Create table
Engine parameters
- endpoint— AzureBlobStorage endpoint URL with container & prefix. Optionally can contain account_name if the authentication method used needs it. (- http://azurite1:{port}/[account_name]{container_name}/{data_prefix}) or these parameters can be provided separately using storage_account_url, account_name & container. For specifying prefix, endpoint should be used.
- endpoint_contains_account_name- This flag is used to specify if endpoint contains account_name as it is only needed for certain authentication methods. (Default : true)
- connection_string|storage_account_url— connection_string includes account name & key (Create connection string) or you could also provide the storage account url here and account name & account key as separate parameters (see parameters account_name & account_key)
- container_name- Container name
- blobpath- file path. Supports following wildcards in readonly mode:- *,- **,- ?,- {abc,def}and- {N..M}where- N,- M— numbers,- 'abc',- 'def'— strings.
- account_name- if storage_account_url is used, then account name can be specified here
- account_key- if storage_account_url is used, then account key can be specified here
- format— The format of the file.
- compression— Supported values:- none,- gzip/gz,- brotli/br,- xz/LZMA,- zstd/zst. By default, it will autodetect compression by file extension. (same as setting to- auto).
- partition_strategy– Options:- WILDCARDor- HIVE.- WILDCARDrequires a- {_partition_id}in the path, which is replaced with the partition key.- HIVEdoes not allow wildcards, assumes the path is the table root, and generates Hive-style partitioned directories with Snowflake IDs as filenames and the file format as the extension. Defaults to- WILDCARD
- partition_columns_in_data_file- Only used with- HIVEpartition strategy. Tells ClickHouse whether to expect partition columns to be written in the data file. Defaults- false.
- extra_credentials- Use- client_idand- tenant_idfor authentication. If extra_credentials are provided, they are given priority over- account_nameand- account_key.
Example
Users can use the Azurite emulator for local Azure Storage development. Further details here. If using a local instance of Azurite, users may need to substitute http://localhost:10000 for http://azurite1:10000 in the commands below, where we assume Azurite is available at host azurite1.
Virtual columns
- _path— Path to the file. Type:- LowCardinality(String).
- _file— Name of the file. Type:- LowCardinality(String).
- _size— Size of the file in bytes. Type:- Nullable(UInt64). If the size is unknown, the value is- NULL.
- _time— Last modified time of the file. Type:- Nullable(DateTime). If the time is unknown, the value is- NULL.
Authentication
Currently there are 3 ways to authenticate:
- Managed Identity- Can be used by providing an- endpoint,- connection_stringor- storage_account_url.
- SAS Token- Can be used by providing an- endpoint,- connection_stringor- storage_account_url. It is identified by presence of '?' in the url. See azureBlobStorage for examples.
- Workload Identity- Can be used by providing an- endpointor- storage_account_url. If- use_workload_identityparameter is set in config, (workload identity) is used for authentication.
Data cache
Azure table engine supports data caching on local disk.
See filesystem cache configuration options and usage in this section.
Caching is made depending on the path and ETag of the storage object, so clickhouse will not read a stale cache version.
To enable caching use a setting filesystem_cache_name = '<name>' and enable_filesystem_cache = 1.
- add the following section to clickhouse configuration file:
- reuse cache configuration (and therefore cache storage) from clickhouse storage_configurationsection, described here
PARTITION BY
PARTITION BY — Optional. In most cases you don't need a partition key, and if it is needed you generally don't need a partition key more granular than by month. Partitioning does not speed up queries (in contrast to the ORDER BY expression). You should never use too granular partitioning. Don't partition your data by client identifiers or names (instead, make client identifier or name the first column in the ORDER BY expression).
For partitioning by month, use the toYYYYMM(date_column) expression, where date_column is a column with a date of the type Date. The partition names here have the "YYYYMM" format.
Partition strategy
WILDCARD (default): Replaces the {_partition_id} wildcard in the file path with the actual partition key. Reading is not supported.
HIVE implements hive style partitioning for reads & writes. Reading is implemented using a recursive glob pattern. Writing generates files using the following format: <prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>.
Note: When using HIVE partition strategy, the use_hive_partitioning setting has no effect.
Example of HIVE partition strategy:
