> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Ce moteur s’intègre à l’écosystème Azure Blob Storage.

# Moteur de table AzureBlobStorage

Ce moteur s’intègre à l’[écosystème Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs).

<div id="create-table">
  ## Créer une table
</div>

```sql theme={null}
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 ...]
```

<div id="engine-parameters">
  ### Paramètres du moteur
</div>

* `endpoint` — URL du point de terminaison AzureBlobStorage avec conteneur & préfixe. Peut éventuellement contenir `account&#95;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&#95;account&#95;url`, `account&#95;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&#95;name`, car cela n’est nécessaire que pour certaines méthodes d’authentification. (Par défaut : true)
* `connection_string|storage_account_url` — `connection&#95;string` inclut le nom du compte & la clé ([Créer une chaîne de connexion](https://learn.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json\&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json#configure-a-connection-string-for-an-azure-storage-account)) 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&#95;name` & `account&#95;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}` où `N`, `M` — nombres, `'abc'`, `'def'` — chaînes.
* `account_name` - si `storage&#95;account&#95;url` est utilisé, le nom du compte peut être indiqué ici
* `account_key` - si `storage&#95;account&#95;url` est utilisé, la clé du compte peut être indiquée ici
* `format` — Le [format](/fr/reference/formats/index) 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&#95;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](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage). 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`.

```sql theme={null}
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;
```

```text theme={null}
┌─key──┬─data──┐
│  1   │   a   │
│  2   │   b   │
│  3   │   c   │
└──────┴───────┘
```

<div id="virtual-columns">
  ## Colonnes virtuelles
</div>

* `_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`.

<div id="authentication">
  ## Authentification
</div>

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](/fr/reference/functions/table-functions/azureBlobStorage#using-shared-access-signatures-sas-sas-tokens) 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](https://github.com/Azure/azure-sdk-for-cpp/tree/main/sdk/identity/azure-identity#authenticate-azure-hosted-applications) est utilisée pour l’authentification.

<div id="data-cache">
  ### Cache de données
</div>

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](/fr/concepts/features/configuration/server-config/storing-data#using-local-cache).
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`.

```sql theme={null}
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 :

```xml theme={null}
<clickhouse>
    <filesystem_caches>
        <cache_for_azure>
            <path>path to cache directory</path>
            <max_size>10Gi</max_size>
        </cache_for_azure>
    </filesystem_caches>
</clickhouse>
```

2. réutiliser la configuration du cache (et donc son stockage) depuis la section `storage_configuration` de ClickHouse, [décrite ici](/fr/concepts/features/configuration/server-config/storing-data#using-local-cache)

<div id="partition-by">
  ### PARTITION BY
</div>

`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](/fr/reference/data-types/date). Les noms de partition sont ici au format `"YYYYMM"`.

<div id="partition-strategy">
  #### Stratégie de partitionnement
</div>

`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` :

```sql theme={null}
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.parquet │ 2020 │ Russia  │       1 │
2. │ cont/hive_partitioned/year=2021/country=Brazil/7351305360894636032.parquet │ 2021 │ Brazil  │       2 │
   └────────────────────────────────────────────────────────────────────────────┴──────┴─────────┴─────────┘
```

<div id="see-also">
  ## Voir aussi
</div>

[Fonction de table Azure Blob Storage](/fr/reference/functions/table-functions/azureBlobStorage)
