CREATE TABLE
AzureQueue son los mismos que admite el motor de tabla AzureBlobStorage. Consulte la sección de parámetros aquí.
Al igual que con el motor de tabla AzureBlobStorage, los usuarios pueden usar el emulador Azurite para el desarrollo local con Azure Storage. Encontrará más información aquí.
Ejemplo
Configuración
El conjunto de ajustes admitidos es prácticamente el mismo que para el motor de tablaS3Queue, pero sin el prefijo s3queue_. Consulte la lista completa de ajustes.
Para obtener una lista de los ajustes configurados para la tabla, use la tabla system.azure_queue_settings. Disponible a partir de la versión 24.10.
A continuación se muestran los ajustes compatibles únicamente con AzureQueue y no aplicables a S3Queue.
after_processing_move_connection_string
Cadena de conexión de Azure Blob Storage a la que mover los archivos procesados correctamente, si el destino es otro contenedor de Azure.
Valores posibles:
- String.
after_processing_move_container
Nombre del contenedor al que se moverán los archivos procesados correctamente si el destino es otro contenedor de Azure.
Valores posibles:
- String.
SELECT en el motor de tabla AzureQueue
Las consultas SELECT están prohibidas de forma predeterminada en las tablas AzureQueue. Esto sigue el patrón común de las colas, en el que los datos se leen una vez y luego se eliminan de la cola. SELECT está prohibido para evitar la pérdida accidental de datos. Sin embargo, en algunos casos puede resultar útil. Para ello, debe establecer la SETTINGstream_like_engine_allow_direct_select en True.
El motor AzureQueue tiene una SETTING especial para las consultas SELECT: commit_on_select. Establézcala en False para conservar los datos en la cola después de leerlos, o en True para eliminarlos. (Nota: esta SETTING no tiene sentido en el modo exclusive y se ignora; el modo exclusive siempre actúa como si commit_on_select fuera True.)
Descripción
SELECT no resulta especialmente útil para la importación en streaming (salvo para tareas de depuración), porque cada archivo solo puede importarse una vez. Es más práctico crear flujos en tiempo real mediante vistas materializadas. Para ello:
- Use el motor para crear una tabla que consuma desde la ruta especificada en Azure Blob Storage y trátela como un flujo de datos.
- Cree una tabla con la estructura deseada.
- Cree una vista materializada que convierta los datos del motor y los inserte en una tabla creada previamente.
MATERIALIZED VIEW se conecta al motor, empieza a recopilar datos en segundo plano.
Los argumentos del motor tienen la forma AzureQueue(connection_string, container_name, blobpath, format[, compression]).
Ejemplo:
Columnas virtuales
_path— Ruta del archivo._file— Nombre del archivo.
Introspección
Habilite el registro de la tabla mediante la configuración de tablaenable_logging_to_queue_log=1.
Las capacidades de introspección son las mismas que las del motor de tabla S3Queue, con varias diferencias concretas:
- Use
system.azure_queue_metadata_cachepara el estado en memoria de la cola en las versiones del servidor >= 25.1. Para versiones anteriores, usesystem.s3queue_metadata_cache(también contendría información de las tablasazure). - Use la tabla
system.azure_queue_metadatapara inspeccionar directamente el estado almacenado en Keeper: el número de nodosprocessed,processingyfailedpor objeto de metadatos y, cuando se solicite, su contenido. Esta es la contraparte deAzureQueuedesystem.s3_queue_metadata. - Habilite
system.azure_queue_logmediante la configuración principal de ClickHouse; por ejemplo:
system.s3queue_metadata_cache, pero sobre los archivos procesados y fallidos.
La tabla tiene la siguiente estructura:
Limitaciones
AzureQueue comparte la misma implementación que S3Queue y presenta las mismas limitaciones. En particular, una pérdida de alimentación del dispositivo en el que se ejecuta el nodo de ClickHouse puede causar la pérdida silenciosa de filas consumidas: un archivo se registra como procesado en Keeper (y, con after_processing = 'delete', se elimina su blob de origen) en cuanto finaliza la inserción, pero las filas insertadas solo son duraderas una vez que se sincroniza mediante fsync la parte de destino, lo que no ocurre de forma síncrona de manera predeterminada (fsync_after_insert = 0). En la ruta de consumo recomendada mediante vista materializada, configurar fsync_after_insert = 1 (y fsync_part_directory = 1) en la tabla MergeTree de destino reduce considerablemente este intervalo.