Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

azureBlobStorage

Fournit une interface de type table pour sélectionner/insérer des fichiers dans Azure Blob Storage. Cette fonction de table est semblable à la fonction s3.

Syntaxe

Les informations d'identification sont intégrées à la chaîne de connexion, il n'est donc pas nécessaire de fournir account_name/account_key séparément :

azureBlobStorage(connection_string, container_name, blobpath [, format, compression, partition_strategy, structure])

Arguments

Argument Description
connection_string Une chaîne de connexion qui inclut des identifiants intégrés (nom du compte + clé du compte ou jeton SAS). Lors de l'utilisation de cette forme, account_name et account_key ne doivent pas être transmis séparément. Voir Configurer une chaîne de connexion.
storage_account_url L'URL de point de terminaison du compte de stockage, par ex. https://myaccount.blob.core.windows.net/. Lors de l'utilisation de cette forme, vous devez également transmettre account_name et account_key.
container_name Nom du conteneur.
blobpath Chemin de fichier. Prend en charge les caractères génériques suivants en mode lecture seule : *, **, ?, {abc,def} et {N..M}N, M sont des nombres et 'abc', 'def' des chaînes.
account_name Nom du compte de stockage. Obligatoire lors de l'utilisation de storage_account_url sans SAS ; ne doit pas être transmis lors de l'utilisation de connection_string.
account_key Clé du compte de stockage. Obligatoire lors de l'utilisation de storage_account_url sans SAS ; ne doit pas être transmise lors de l'utilisation de connection_string.
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 (comme avec le paramètre auto).
structure Structure de la table. Format 'column1_name column1_type, column2_name column2_type, ...'.
partition_strategy Facultatif. Valeurs prises en charge : WILDCARD ou HIVE. WILDCARD nécessite un {_partition_id} dans le chemin, qui est remplacé par la clé de partitionnement. HIVE n'autorise pas les caractères génériques, suppose que le chemin est 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. Sans stratégie explicite, un chemin contenant {_partition_id} utilise WILDCARD. Un chemin contenant un autre glob n'utilise aucune stratégie de partitionnement et ignore PARTITION BY. Un chemin sans glob utilise HIVE lorsque file_like_engine_default_partition_strategy est HIVE ; sinon, il n'utilise aucune stratégie de partitionnement.
partition_columns_in_data_file Facultatif. Utilisé uniquement avec la stratégie de partitionnement HIVE. Indique à ClickHouse s'il doit s'attendre à ce que les colonnes de partitionnement soient écrites dans le fichier de données. Valeur par défaut : 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.

Collections nommées

Les arguments peuvent également être transmis à l’aide de collections nommées. Dans ce cas, les clés suivantes sont prises en charge :

Key Required Description
container Yes Nom du conteneur. Correspond à l’argument positionnel container_name.
blob_path Yes Chemin de fichier (avec caractères génériques facultatifs). Correspond à l’argument positionnel blobpath.
connection_string No* Chaîne de connexion avec informations d’identification intégrées. *connection_string ou storage_account_url doit être fourni.
storage_account_url No* URL du point de terminaison du compte de stockage. *connection_string ou storage_account_url doit être fourni.
account_name No Obligatoire lors de l’utilisation de storage_account_url
account_key No Obligatoire lors de l’utilisation de storage_account_url
format No Format de fichier.
compression No Type de compression.
structure No Structure de la table.
client_id No ID client pour l’authentification.
tenant_id No ID de locataire pour l’authentification.

Exemple :

CREATE NAMED COLLECTION azure_my_data AS
    storage_account_url = 'https://myaccount.blob.core.windows.net/',
    container = 'mycontainer',
    blob_path = 'data/*.parquet',
    account_name = 'myaccount',
    account_key = 'mykey...==',
    format = 'Parquet';

SELECT *
FROM azureBlobStorage(azure_my_data)
LIMIT 5;

Vous pouvez également surcharger les valeurs de la collection nommée au moment de l’exécution de la requête :

SELECT *
FROM azureBlobStorage(azure_my_data, blob_path = 'other_data/*.csv', format = 'CSVWithNames')
LIMIT 5;

Valeur renvoyée

Une table ayant la structure spécifiée, permettant de lire ou d’écrire des données dans le fichier spécifié.

Exemples

Lecture avec le format storage_account_url

SELECT *
FROM azureBlobStorage(
    'https://myaccount.blob.core.windows.net/',
    'mycontainer',
    'data/*.parquet',
    'myaccount',
    'mykey...==',
    'Parquet'
)
LIMIT 5;

Lecture avec la syntaxe connection_string

SELECT *
FROM azureBlobStorage(
    'DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey...==;EndPointSuffix=core.windows.net',
    'mycontainer',
    'data/*.csv',
    'CSVWithNames'
)
LIMIT 5;

Écriture avec partitionnement

Un chemin contenant {_partition_id} implique la stratégie de partitionnement WILDCARD. Un chemin avec un autre glob n'utilise aucune stratégie de partitionnement et ignore PARTITION BY. Un chemin sans glob utilise HIVE lorsque file_like_engine_default_partition_strategy est défini sur HIVE ; sinon, il n'utilise aucune stratégie de partitionnement.

INSERT INTO TABLE FUNCTION azureBlobStorage(
    'DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey...==;EndPointSuffix=core.windows.net',
    'mycontainer',
    'test_{_partition_id}.csv',
    'CSV',
    'auto',
    'wildcard',
    'column1 UInt32, column2 UInt32, column3 UInt32'
) PARTITION BY column3
VALUES (1, 2, 3), (3, 2, 1), (78, 43, 3);

Ensuite, lisez une partition spécifique :

SELECT *
FROM azureBlobStorage(
    'DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey...==;EndPointSuffix=core.windows.net',
    'mycontainer',
    'test_1.csv',
    'CSV',
    'auto',
    'column1 UInt32, column2 UInt32, column3 UInt32'
);
┌─column1─┬─column2─┬─column3─┐
│       3 │       2 │       1 │
└─────────┴─────────┴─────────┘

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 du fichier est inconnue, la valeur est NULL.
  • _time — Date de dernière modification du fichier. Type : Nullable(DateTime). Si cette date est inconnue, la valeur est NULL.

Écriture partitionnée

Stratégie de partitionnement

Prise en charge uniquement pour les requêtes INSERT.

WILDCARD : remplace le caractère générique {_partition_id} dans le chemin de fichier par la clé de partitionnement réelle. Elle est sélectionnée par défaut lorsque le chemin contient {_partition_id}.

Lorsqu'aucun partition_strategy n'est défini, un chemin avec un autre glob n'utilise aucune stratégie de partitionnement et ignore PARTITION BY. Un chemin sans glob utilise HIVE lorsque file_like_engine_default_partition_strategy est défini sur HIVE ; sinon, il n'utilise aucune stratégie de partitionnement.

HIVE implémente le partitionnement de style Hive pour les lectures et les écritures. Les fichiers sont générés au format suivant : <prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>.

Exemple de stratégie de partitionnement HIVE

INSERT INTO TABLE FUNCTION azureBlobStorage(
    azure_conf2,
    storage_account_url = 'https://myaccount.blob.core.windows.net/',
    container = 'cont',
    blob_path = 'azure_table_root',
    format = 'CSVWithNames',
    compression = 'auto',
    structure = 'year UInt16, country String, id Int32',
    partition_strategy = 'hive'
) PARTITION BY (year, country)
VALUES (2020, 'Russia', 1), (2021, 'Brazil', 2);
SELECT _path, * FROM azureBlobStorage(
    azure_conf2,
    storage_account_url = 'https://myaccount.blob.core.windows.net/',
    container = 'cont',
    blob_path = 'azure_table_root/**.csvwithnames'
)

   ┌─_path───────────────────────────────────────────────────────────────────────────┬─id─┬─year─┬─country─┐
1. │ cont/azure_table_root/year=2021/country=Brazil/7351307847391293440.csvwithnames │  2 │ 2021 │ Brazil  │
2. │ cont/azure_table_root/year=2020/country=Russia/7351307847378710528.csvwithnames │  1 │ 2020 │ Russia  │
   └─────────────────────────────────────────────────────────────────────────────────┴────┴──────┴─────────┘

paramètre use_hive_partitioning

Il s’agit d’une indication permettant à ClickHouse d’analyser les fichiers partitionnés au format Hive au moment de la lecture. Cela n’a aucun effet sur l’écriture. Pour des lectures et écritures symétriques, utilisez l’argument partition_strategy.

Lorsque le paramètre use_hive_partitioning est défini sur 1, ClickHouse détecte le partitionnement au format Hive dans le chemin (/name=value/) et permet d’utiliser les colonnes de partitionnement comme colonnes virtuelles dans la requête. Ces colonnes virtuelles auront les mêmes noms que dans le chemin partitionné.

Exemple

Utiliser une colonne virtuelle créée avec un partitionnement au format Hive

SELECT * FROM azureBlobStorage(config, storage_account_url='...', container='...', blob_path='http://data/path/date=*/country=*/code=*/*.parquet') WHERE date > '2020-01-01' AND country = 'Netherlands' AND code = 42;

Utilisation des signatures d’accès partagé (SAS)

Une signature d’accès partagé (SAS) est un URI qui accorde un accès restreint à un conteneur ou à un fichier dans Azure Storage. Utilisez-la pour fournir un accès limité dans le temps aux ressources d’un compte de stockage sans partager la clé de ce compte. Plus de détails ici.

La fonction azureBlobStorage prend en charge les signatures d’accès partagé (SAS).

Un jeton Blob SAS contient toutes les informations nécessaires pour authentifier la requête, y compris le blob cible, les autorisations et la durée de validité. Pour construire une URL de blob, ajoutez le jeton SAS au point de terminaison du service Blob. Par exemple, si le point de terminaison est https://clickhousedocstest.blob.core.windows.net/, la requête devient :

SELECT count()
FROM azureBlobStorage('BlobEndpoint=https://clickhousedocstest.blob.core.windows.net/;SharedAccessSignature=sp=r&st=2025-01-29T14:58:11Z&se=2025-01-29T22:58:11Z&spr=https&sv=2022-11-02&sr=c&sig=Ac2U0xl4tm%2Fp7m55IilWl1yHwk%2FJG0Uk6rMVuOiD0eE%3D', 'exampledatasets', 'example.csv')

Autrement, les utilisateurs peuvent utiliser l’URL SAS Blob générée :

SELECT count()
FROM azureBlobStorage('https://clickhousedocstest.blob.core.windows.net/?sp=r&st=2025-01-29T14:58:11Z&se=2025-01-29T22:58:11Z&spr=https&sv=2022-11-02&sr=c&sig=Ac2U0xl4tm%2Fp7m55IilWl1yHwk%2FJG0Uk6rMVuOiD0eE%3D', 'exampledatasets', 'example.csv')

Navigation