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])Nécessite account_name et account_key comme arguments distincts :
azureBlobStorage(storage_account_url, container_name, blobpath, account_name, account_key [, format, compression, partition_strategy, structure])Voir Collections nommées ci-dessous pour la liste complète des clés prises en charge :
azureBlobStorage(named_collection[, option=value [,..]])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} où 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 estNULL._time— Date de dernière modification du fichier. Type :Nullable(DateTime). Si cette date est inconnue, la valeur estNULL.
É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;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')
┌