> ## 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.

> Este motor ofrece integración con el ecosistema de Azure Blob Storage.

# Motor de tabla AzureBlobStorage

Este motor ofrece integración con el ecosistema de [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs).

<div id="create-table">
  ## CREATE 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">
  ### Parámetros del motor
</div>

* `endpoint` — URL del endpoint de AzureBlobStorage con contenedor y prefijo. Opcionalmente, puede incluir account\_name si el método de autenticación utilizado lo requiere. (`http://azurite1:{port}/[account_name]{container_name}/{data_prefix}`) o estos parámetros pueden proporcionarse por separado mediante storage\_account\_url, account\_name y container. Para especificar el prefijo, se debe usar endpoint.
* `endpoint_contains_account_name` - Esta marca se usa para indicar si endpoint incluye account\_name, ya que solo es necesario para ciertos métodos de autenticación. (Valor predeterminado: true)
* `connection_string|storage_account_url` — connection\_string incluye el nombre y la clave de la cuenta ([Crear una connection string](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)) o también puede proporcionar aquí la URL de la cuenta de almacenamiento, así como el nombre y la clave de la cuenta como parámetros independientes (consulte los parámetros account\_name y account\_key)
* `container_name` - Nombre del contenedor
* `blobpath` - ruta del archivo. Admite los siguientes comodines en modo readonly: `*`, `**`, `?`, `{abc,def}` y `{N..M}`, donde `N`, `M` — números, `'abc'`, `'def'` — cadenas.
* `account_name` - si se usa storage\_account\_url, aquí puede especificarse el nombre de la cuenta
* `account_key` - si se usa storage\_account\_url, aquí puede especificarse la clave de la cuenta
* `format` — El [formato](/es/reference/formats/index) del archivo.
* `compression` — Valores admitidos: `none`, `gzip/gz`, `brotli/br`, `xz/LZMA`, `zstd/zst`. De forma predeterminada, detectará automáticamente la compresión según la extensión del archivo. (equivale a establecer `auto`).
* `partition_strategy` – Opciones: `wildcard` o `hive`. `wildcard` requiere `{_partition_id}` en la ruta, que se sustituye por la clave de partición. `hive` no permite comodines, asume que la ruta es la raíz de la tabla y genera directorios particionados con estilo Hive, con ID de Snowflake como nombres de archivo y el formato de archivo como extensión. El valor predeterminado es la configuración `file_like_engine_default_partition_strategy` (`wildcard` en configuraciones de `compatibility` anteriores a `26.6`, `hive` en caso contrario).
* `partition_columns_in_data_file` - Solo se usa con la estrategia de partición `hive`. Indica a ClickHouse si debe esperar que las columnas de partición se escriban en el archivo de datos. El valor predeterminado es `false`.
* `extra_credentials` - Use `client_id` y `tenant_id` para la autenticación. Si se proporcionan extra\_credentials, tienen prioridad sobre `account_name` y `account_key`.

**Ejemplo**

Los usuarios pueden usar el emulador Azurite para el desarrollo local de Azure Storage. Más detalles [aquí](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite?tabs=docker-hub%2Cblob-storage). Si usa una instancia local de Azurite, puede que deba sustituir `http://localhost:10000` por `http://azurite1:10000` en los comandos siguientes, donde asumimos que Azurite está disponible en el host `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">
  ## Columnas virtuales
</div>

* `_path` — Ruta del archivo. Tipo: `LowCardinality(String)`.
* `_file` — Nombre del archivo. Tipo: `LowCardinality(String)`.
* `_size` — Tamaño del archivo en bytes. Tipo: `Nullable(UInt64)`. Si se desconoce el tamaño, el valor es `NULL`.
* `_time` — Hora de la última modificación del archivo. Tipo: `Nullable(DateTime)`. Si se desconoce la hora, el valor es `NULL`.

<div id="authentication">
  ## Autenticación
</div>

Actualmente, hay 3 formas de autenticarse:

* `Managed Identity` - Se puede usar proporcionando un `endpoint`, `connection_string` o `storage_account_url`.
* `SAS Token` - Se puede usar proporcionando un `endpoint`, `connection_string` o `storage_account_url`. Se identifica por la presencia de `?` en la URL. Consulta [azureBlobStorage](/es/reference/functions/table-functions/azureBlobStorage#using-shared-access-signatures-sas-sas-tokens) para ver ejemplos.
* `Workload Identity` - Se puede usar proporcionando un `endpoint` o `storage_account_url`. Si el parámetro `use_workload_identity` está establecido en la configuración, se usa [workload identity](https://github.com/Azure/azure-sdk-for-cpp/tree/main/sdk/identity/azure-identity#authenticate-azure-hosted-applications) para la autenticación.

<div id="data-cache">
  ### Caché de datos
</div>

El motor de tabla `Azure` admite el almacenamiento en caché de datos en disco local.
Consulte las opciones de configuración y el uso de la caché del sistema de archivos en esta [sección](/es/concepts/features/configuration/server-config/storing-data#using-local-cache).
La caché se basa en la ruta y el ETag del objeto de almacenamiento, por lo que ClickHouse no leerá una versión obsoleta de la caché.

Para habilitar la caché, use la configuración `filesystem_cache_name = '<name>'` y `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. añade la siguiente sección al archivo de configuración 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. reutilizar la configuración de la caché (y, por lo tanto, el almacenamiento en caché) de la sección `storage_configuration` de ClickHouse, [descrita aquí](/es/concepts/features/configuration/server-config/storing-data#using-local-cache)

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

`PARTITION BY` — Opcional. En la mayoría de los casos no necesita una clave de partición y, si la necesita, por lo general no hace falta que sea más granular que por mes. El particionado no acelera las consultas (a diferencia de la expresión `ORDER BY`). Nunca debe usar un particionado demasiado granular. No particione sus datos por identificadores o nombres de clientes (en su lugar, haga que el identificador o nombre del cliente sea la primera columna de la expresión `ORDER BY`).

Para particionar por mes, use la expresión `toYYYYMM(date_column)`, donde `date_column` es una columna de tipo [Date](/es/reference/data-types/date). Los nombres de las particiones aquí tienen el formato `"YYYYMM"`.

<div id="partition-strategy">
  #### Estrategia de partición
</div>

`wildcard`: sustituye el comodín `{_partition_id}` en la ruta del archivo por la clave de partición real. No admite lectura. Se selecciona por defecto solo con configuraciones de `compatibility` anteriores a `26.6`; de lo contrario, el valor predeterminado es `hive` (consulte la configuración `file_like_engine_default_partition_strategy`).

`hive` implementa el particionado de estilo Hive para lectura y escritura. La lectura se implementa mediante un patrón glob recursivo. La escritura genera archivos con el siguiente formato: `<prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>`.

Nota: al usar la estrategia de partición `hive`, la configuración `use_hive_partitioning` no tiene efecto.

Ejemplo de estrategia de partición `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">
  ## Véase también
</div>

[Función de tabla de Azure Blob Storage](/es/reference/functions/table-functions/azureBlobStorage)
