Passer au contenu principal

Fonction de table 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, structure])

Arguments

ArgumentDescription
connection_stringUne chaîne de connexion qui inclut des identifiants intégrés (nom du compte + clé du compte ou SAS token). 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_urlL’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_nameNom du conteneur.
blobpathChemin 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_nameNom 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_keyClé 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.
formatLe format du fichier.
compressionValeurs 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).
structureStructure de la table. Format 'column1_name column1_type, column2_name column2_type, ...'.
partition_strategyFacultatif. 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. La valeur par défaut est 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_fileFacultatif. 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_credentialsUtilisez 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 :
KeyRequiredDescription
containerYesNom du conteneur. Correspond à l’argument positionnel container_name.
blob_pathYesChemin de fichier (avec caractères génériques facultatifs). Correspond à l’argument positionnel blobpath.
connection_stringNo*Chaîne de connexion avec informations d’identification intégrées. *connection_string ou storage_account_url doit être fourni.
storage_account_urlNo*URL du point de terminaison du compte de stockage. *connection_string ou storage_account_url doit être fourni.
account_nameNoObligatoire lors de l’utilisation de storage_account_url
account_keyNoObligatoire lors de l’utilisation de storage_account_url
formatNoFormat de fichier.
compressionNoType de compression.
structureNoStructure de la table.
client_idNoID client pour l’authentification.
tenant_idNoID de locataire pour l’authentification.
Les noms des clés des collections nommées diffèrent des noms des arguments positionnels de la fonction : container (et non container_name) et blob_path (et non blobpath).
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

INSERT INTO TABLE FUNCTION azureBlobStorage(
    'DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey...==;EndPointSuffix=core.windows.net',
    'mycontainer',
    'test_{_partition_id}.csv',
    'CSV',
    'auto',
    '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 partition réelle. Sélectionnée par défaut uniquement avec des paramètres compatibility antérieurs à 26.6 ; sinon, la valeur par défaut est HIVE (voir le paramètre file_like_engine_default_partition_strategy). 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')

┌─count()─┐
10
└─────────┘

1 row in set. Elapsed: 0.425 sec.
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')

┌─count()─┐
10
└─────────┘

1 row in set. Elapsed: 0.153 sec.
Dernière modification le 25 juin 2026