Passer au contenu principal
Ce moteur s’intègre à l’écosystème Azure Blob Storage.

Créer une table

CREATE TABLE azure_blob_storage_table (name String, value UInt32)
    ENGINE = AzureBlobStorage(connection_string|storage_account_url, container_name, blobpath, [account_name, account_key, format, compression, partition_strategy, partition_columns_in_data_file, extra_credentials(client_id=, tenant_id=)])
    [PARTITION BY expr]
    [SETTINGS ...]

Paramètres du moteur

  • endpoint — URL du point de terminaison AzureBlobStorage avec conteneur & préfixe. Peut éventuellement contenir account_name si la méthode d’authentification utilisée l’exige. (http://azurite1:{port}/[account_name]{container_name}/{data_prefix}) Sinon, ces paramètres peuvent être fournis séparément via storage_account_url, account_name & container. Pour spécifier le préfixe, il faut utiliser endpoint.
  • endpoint_contains_account_name - Ce flag permet d’indiquer si endpoint contient account_name, car cela n’est nécessaire que pour certaines méthodes d’authentification. (Par défaut : true)
  • connection_string|storage_account_urlconnection_string inclut le nom du compte & la clé (Créer une chaîne de connexion) ou vous pouvez aussi fournir ici l’URL du compte de stockage, ainsi que le nom du compte & la clé du compte comme paramètres distincts (voir les paramètres account_name & account_key)
  • container_name - Nom du conteneur
  • blobpath - chemin du fichier. Prend en charge les caractères génériques suivants en mode readonly : *, **, ?, {abc,def} et {N..M}N, M — nombres, 'abc', 'def' — chaînes.
  • account_name - si storage_account_url est utilisé, le nom du compte peut être indiqué ici
  • account_key - si storage_account_url est utilisé, la clé du compte peut être indiquée ici
  • format — Le format du fichier.
  • compression — Valeurs prises en charge : none, gzip/gz, brotli/br, xz/LZMA, zstd/zst. Par défaut, la compression est détectée automatiquement à partir de l’extension du fichier. (équivaut à définir auto).
  • partition_strategy – Options : wildcard ou hive. wildcard nécessite un {_partition_id} dans le chemin, qui est remplacé par la clé de partition. hive n’autorise pas les caractères génériques, suppose que le chemin correspond à la racine de la table et génère des répertoires partitionnés au format Hive, avec des Snowflake IDs comme noms de fichiers et le format de fichier comme extension. La valeur par défaut est définie par le paramètre file_like_engine_default_partition_strategy (wildcard avec des paramètres compatibility antérieurs à 26.6, hive sinon).
  • partition_columns_in_data_file - Utilisé uniquement avec la stratégie de partitionnement hive. Indique à ClickHouse s’il doit s’attendre à ce que les colonnes de partition soient écrites dans le fichier de données. La valeur par défaut est false.
  • extra_credentials - Utilisez client_id et tenant_id pour l’authentification. Si extra_credentials est fourni, il est prioritaire sur account_name et account_key.
Exemple Les utilisateurs peuvent utiliser l’émulateur Azurite pour le développement local d’Azure Storage. Plus de détails sont disponibles ici. Si vous utilisez une instance locale d’Azurite, il peut être nécessaire de remplacer http://localhost:10000 par http://azurite1:10000 dans les commandes ci-dessous, où nous supposons qu’Azurite est disponible sur l’hôte azurite1.
CREATE TABLE test_table (key UInt64, data String)
    ENGINE = AzureBlobStorage('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', 'testcontainer', 'test_table', 'CSV');

INSERT INTO test_table VALUES (1, 'a'), (2, 'b'), (3, 'c');

SELECT * FROM test_table;
┌─key──┬─data──┐
│  1   │   a   │
│  2   │   b   │
│  3   │   c   │
└──────┴───────┘

Colonnes virtuelles

  • _path — Chemin du fichier. Type : LowCardinality(String).
  • _file — Nom du fichier. Type : LowCardinality(String).
  • _size — Taille du fichier en octets. Type : Nullable(UInt64). Si la taille est inconnue, la valeur est NULL.
  • _time — Date et heure de dernière modification du fichier. Type : Nullable(DateTime). Si l’heure est inconnue, la valeur est NULL.

Authentification

Il existe actuellement 3 méthodes d’authentification :
  • Managed Identity - Peut être utilisée en fournissant un endpoint, une connection_string ou un storage_account_url.
  • SAS Token - Peut être utilisé en fournissant un endpoint, une connection_string ou un storage_account_url. Il est identifié par la présence du caractère « ? » dans l’URL. Voir azureBlobStorage pour des exemples.
  • Workload Identity - Peut être utilisée en fournissant un endpoint ou un storage_account_url. Si le paramètre use_workload_identity est défini dans la config, workload identity est utilisée pour l’authentification.

Cache de données

Le moteur de table Azure prend en charge la mise en cache des données sur disque local. Consultez les options de configuration et l’utilisation du cache du système de fichiers dans cette section. La mise en cache repose sur le chemin et l’ETag de l’objet de stockage, de sorte que ClickHouse ne lit pas une version périmée du cache. Pour activer la mise en cache, utilisez les paramètres filesystem_cache_name = '<name>' et enable_filesystem_cache = 1.
SELECT *
FROM azureBlobStorage('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite1:10000/devstoreaccount1/;', 'testcontainer', 'test_table', 'CSV')
SETTINGS filesystem_cache_name = 'cache_for_azure', enable_filesystem_cache = 1;
  1. ajoutez la section suivante dans le fichier de configuration de ClickHouse :
<clickhouse>
    <filesystem_caches>
        <cache_for_azure>
            <path>path to cache directory</path>
            <max_size>10Gi</max_size>
        </cache_for_azure>
    </filesystem_caches>
</clickhouse>
  1. réutiliser la configuration du cache (et donc son stockage) depuis la section storage_configuration de ClickHouse, décrite ici

PARTITION BY

PARTITION BY — Facultatif. Dans la plupart des cas, vous n’avez pas besoin de clé de partition et, lorsqu’elle est nécessaire, elle n’a généralement pas besoin d’être plus fine qu’un partitionnement mensuel. Le partitionnement n’accélère pas les requêtes (contrairement à l’expression ORDER BY). N’utilisez jamais un partitionnement trop fin. Ne partitionnez pas vos données par identifiant ou nom de client (utilisez plutôt l’identifiant ou le nom du client comme première colonne de l’expression ORDER BY). Pour un partitionnement par mois, utilisez l’expression toYYYYMM(date_column), où date_column est une colonne contenant une date de type Date. Les noms de partition sont ici au format "YYYYMM".

Stratégie de partitionnement

wildcard : remplace le caractère générique {_partition_id} dans le chemin du fichier par la clé de partition réelle. La lecture n’est pas prise en charge. Cette stratégie est sélectionnée par défaut uniquement avec des réglages compatibility antérieurs à 26.6 ; sinon, la valeur par défaut est hive (voir le paramètre file_like_engine_default_partition_strategy). hive applique un partitionnement de style Hive en lecture comme en écriture. La lecture est implémentée à l’aide d’un motif glob récursif. L’écriture génère des fichiers au format suivant : <prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>. Remarque : lors de l’utilisation de la stratégie de partitionnement hive, le paramètre use_hive_partitioning n’a aucun effet. Exemple de stratégie de partitionnement hive :
arthur :) create table azure_table (year UInt16, country String, counter UInt8) ENGINE=AzureBlobStorage(account_name='devstoreaccount1', account_key='Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==', storage_account_url = 'http://localhost:30000/devstoreaccount1', container='cont', blob_path='hive_partitioned', format='Parquet', compression='auto', partition_strategy='hive') PARTITION BY (year, country);

arthur :) insert into azure_table values (2020, 'Russia', 1), (2021, 'Brazil', 2);

arthur :) select _path, * from azure_table;

   ┌─_path──────────────────────────────────────────────────────────────────────┬─year─┬─country─┬─counter─┐
1. │ cont/hive_partitioned/year=2020/country=Russia/7351305360873664512.parquet2020 │ Russia  │       1
2. │ cont/hive_partitioned/year=2021/country=Brazil/7351305360894636032.parquet2021 │ Brazil  │       2
   └────────────────────────────────────────────────────────────────────────────┴──────┴─────────┴─────────┘

Voir aussi

Fonction de table Azure Blob Storage
Dernière modification le 29 juin 2026