Salida de Azure Blob Storage y Data Lake Storage Gen2 de Stream Analytics

Azure Data Lake Storage Gen2 convierte a Azure Storage en los cimientos para crear lagos de datos empresariales en Azure. Data Lake Storage Gen2 está diseñado para proporcionar varios petabytes de información, al mismo tiempo que mantiene un rendimiento de cientos de gigabits. Puede usarlo para administrar fácilmente grandes cantidades de datos. Parte fundamental de Data Lake Storage Gen2 es la incorporación de un espacio de nombres jerárquico en Azure Blob Storage.

Blob Storage ofrece una solución rentable y escalable para almacenar grandes cantidades de datos no estructurados en la nube. Para obtener una introducción a Blob Storage y su uso, consulte Carga, descarga y enumeración de blobs con Azure Portal.

Nota:

Para obtener más información sobre los comportamientos específicos de los formatos AVRO y Parquet, consulte las secciones relacionadas de la información general.

Configuración de salida

En la siguiente tabla se enumeran los nombres de propiedad y su descripción para crear un blob o una salida de Data Lake Storage Gen2.

Nombre de propiedad Descripción
Alias de salida Un nombre descriptivo usado en las consultas para dirigir la salida de la consulta a este blob.
Cuenta de almacenamiento Nombre de la cuenta de almacenamiento a donde está enviando la salida.
Clave de cuenta de almacenamiento La clave secreta asociada con la cuenta de almacenamiento.
Contenedor Agrupación lógica para blobs almacenados en Blob Storage. Cuando carga un blob a Blob Storage, debe especificar un contenedor para ese blob.

El nombre del contenedor dinámico es opcional. Admite un solo {field} dinámico en el nombre del contenedor. El campo debe existir en los datos de salida y seguir la directiva de nombres de contenedor.

El tipo de datos de campo debe ser string. Para usar varios campos dinámicos o combinar texto estático junto con el campo dinámico, puede definirlo en la consulta con funciones de cadena integradas, como CONCAT y LTRIM.
Formato de serialización de eventos Formato de serialización para los datos de salida. JSON, CSV, Avro y Parquet son compatibles. Delta Lake aparece aquí como una opción. Los datos están en formato Parquet si se selecciona Delta Lake. Obtenga más información sobre Delta Lake.
Nombre de la ruta de acceso de Delta Obligatorio cuando el formato de serialización de eventos es Delta Lake. La ruta de acceso que se usa para escribir la tabla de Delta Lake en el contenedor especificado. Incluye el nombre de la tabla. Para obtener más información y ejemplos, consulte Escritura en una tabla de Delta Lake.
Modo de escritura El modo de escritura controla la forma en que Azure Stream Analytics escribe en el archivo de salida. La realización de exactamente una entrega solo se produce cuando el modo de escritura es Una vez. Para obtener más información, vea la siguiente sección.
Columna de partición Opcional. El nombre {field} de los datos de salida a la partición. Solo se admite una columna de partición.
Patrón de la ruta de acceso Obligatorio cuando el formato de serialización de eventos es Delta Lake. Patrón de la ruta de acceso al archivo que se usa para escribir los blobs dentro del contenedor especificado.

En el patrón de la ruta de acceso, puede optar por usar una o más instancias de las variables de fecha y hora para especificar la frecuencia con la que se escriben los blobs: {date}, {time}.

Si el modo de escritura es Una vez, debe usar {date} y {time}.

Puede usar la creación de particiones de blobs personalizada para especificar un nombre {field} personalizado de los datos de eventos para crear particiones de los blobs. El nombre del campo es alfanumérico y puede incluir espacios, guiones y caracteres de subrayado. Entre las restricciones en los campos personalizados se incluyen las siguientes:
  • No se permite ningún nombre {field} personalizado dinámico si el modo de escritura es Una vez.
  • Los nombres de campo no distinguen entre mayúsculas y minúsculas. Por ejemplo, el servicio no puede diferenciar entre la columna ID y la columna id.
  • No se permiten los campos anidados. En su lugar, utilice un alias en la consulta del trabajo para "aplanar" el campo.
  • No pueden usarse expresiones como nombre de campo.

Esta característica también permite usar configuraciones del especificador de un formato de fecha y hora personalizado en la ruta de acceso. Los formatos de fecha y hora personalizados deben especificarse de uno en uno, delimitados por la palabra clave {datetime:\<specifier>}. Las entradas permitidas para \<specifier> son yyyy, MM, M, dd, d, HH, H, mm, m, sso s. La palabra clave {datetime:\<specifier>} se puede utilizar varias veces en la ruta de acceso para formar configuraciones de fecha y hora personalizadas.

Ejemplos:
  • Ejemplo 1: cluster1/logs/{date}/{time}
  • Ejemplo 2: cluster1/logs/{date}
  • Ejemplo 3: cluster1/{client_id}/{date}/{time}
  • Ejemplo 4: cluster1/{datetime:ss}/{myField} donde la consulta es SELECT data.myField AS myField FROM Input;
  • Ejemplo 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

La marca de tiempo de la estructura de carpetas que creó usa la zona horaria UTC y no la hora local. System.Timestamp es la hora que se usa para todas las particiones basadas en horas.

La nomenclatura de los archivos usa la siguiente convención:

{Path Prefix Pattern}/schemaHashcode_Guid_Number.extension

Aquí, Guid representa el identificador único asignado a un escritor interno que se crea para escribir en un archivo de blobs. El número representa el índice del bloque de blobs.

Archivos de salida de ejemplo:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

Para obtener más información acerca de esta característica, consulte Particionamiento de la salida de blobs personalizada en Azure Stream Analytics.
Formato de fecha Obligatorio cuando el formato de serialización de eventos es Delta Lake. Si el token de fecha se usa en la ruta de acceso de prefijo, puede seleccionar el formato de fecha en el que se organizan los archivos. Un ejemplo es YYYY/MM/DD.
Formato de hora Obligatorio cuando el formato de serialización de eventos es Delta Lake. Si el token de hora se usa en la ruta de acceso de prefijo, puede seleccionar el formato de hora en el que se organizan los archivos.
Número mínimo de filas Número mínimo de filas por lote. En el caso de Parquet, cada lote crea un archivo. El valor predeterminado actual es 2000 filas y el máximo permitido es 10 000 filas.
Tiempo máximo Tiempo de espera máximo por lote. Después de este tiempo, el lote se escribe en la salida aunque no se cumpla el requisito de filas mínimas. El valor predeterminado actual es 1 minuto y el máximo permitido es 2 horas. Si la salida del blob tiene una frecuencia de patrón de ruta de acceso, el tiempo de espera no puede ser mayor que el intervalo de tiempo de la partición.
Encoding Si usa el formato CSV o JSON, debe especificar una codificación. Por el momento, UTF-8 es el único formato de codificación compatible.
Delimitador Solo se aplica para la serialización de CSV. Stream Analytics admite muchos delimitadores comunes para la serialización de datos CSV. Los valores admitidos son la coma, punto y coma, espacio, tabulador y barra vertical.
Formato Solo se aplica para la serialización de JSON. La opción Separado por líneas especifica que en el formato de la salida cada objeto JSON está separado por una línea nueva. Si selecciona Separado por líneas, el objeto JSON se lee un objeto a la vez. El contenido total en sí mismo no sería un JSON válido. La opción Matriz especifica que el formato de la salida es una matriz de objetos JSON. Esta matriz se cierra cuando el trabajo se detenga o Stream Analytics haya pasado a la siguiente ventana de tiempo. En general, es preferible utilizar JSON separado por líneas, ya que no requiere ningún control especial mientras todavía se esté escribiendo en el archivo de salida.

Entregar exactamente una vez (versión preliminar pública)

Realizar exactamente una entrega de un extremo a otro al leer cualquier entrada de streaming significa que los datos procesados se escribirán en la salida de Data Lake Storage Gen2 una sola vez, sin duplicados. Cuando la característica está habilitada, el trabajo de Stream Analytics garantiza que no haya ninguna pérdida de datos y que no se generen duplicados como salida en un reinicio realizado por el usuario desde la última hora de salida. Simplifica la canalización de streaming, al no tener que implementar ni solucionar los problemas de la lógica de desduplicación.

Modo de escritura

Stream Analytics escribe de dos forma en la cuenta de Blob Storage o Data Lake Storage Gen2. Una manera consiste en anexar los resultados al mismo archivo o a una secuencia de archivos a medida que se generan los resultados. La otra consiste en escribir después de todos los resultados de la partición de tiempo, cuando todos los datos de esta estén disponibles. La característica Exactamente una entrega está habilitada cuando el modo de escritura es Una vez.

No hay ninguna opción de modo de escritura para Delta Lake. Sin embargo, la salida de Delta Lake también proporciona garantías exactamente una vez con el registro Delta. No requiere partición de tiempo y escribe resultados continuamente en función de los parámetros de procesamiento por lotes definidos por el usuario.

Nota:

Si prefiere no usar la característica en vista previa para la entrega exactamente una vez, seleccione Anexar cuando lleguen los resultados.

Configuración

Para recibir exactamente una entrega para la cuenta de Blob Storage o Data Lake Storage Gen2, debe realizar la configuración siguiente:

  • Seleccione Una vez después de que todos los resultados de la partición de tiempo estén disponibles para Modo de escritura.
  • Proporcione el Patrón de ruta de acceso con los valores {date} y {time} especificados.
  • Especifique el formato de fecha y el formato de hora.

Limitaciones

  • No se admiten subsecuencias.
  • Patrón de ruta de acceso se convierte en una propiedad obligatoria y debe contener {date} y {time}. No se permite ningún nombre {field} personalizado dinámico. Obtenga más información sobre el patrón de ruta de acceso personalizado.
  • Si el trabajo se inicia a una hora personalizada antes o después de la última hora de salida, existe el riesgo de que el archivo se sobrescriba. Por ejemplo, cuando el formato de hora es HH, el archivo se genera cada hora. Si detiene el trabajo a las 8:15 y lo reinicia a las 8:30, el archivo generado entre las 8:00 y las 9:00 solo cubre los datos desde las 8:30 a las 9:00. Los datos desde las 8:00 a las 8:15 se pierden, ya que se sobrescriben.

Archivos de salida de blob

Cuando usa Blob Storage como salida, se crea un nuevo archivo en el blob en los siguientes casos:

  • El archivo excede el número máximo de bloques permitidos (actualmente, 50 000). Puede alcanzar el número máximo permitido de bloques sin que se alcance el tamaño máximo permitido de blobs. Por ejemplo, si la velocidad de salida es alta, puede ver más bytes por bloque y el tamaño de archivo es mayor. Si la velocidad de salida es baja, cada bloque tiene menos datos y el tamaño de archivo es menor.
  • Hay un cambio de esquema en la salida y el formato de salida requiere un esquema fijo (CSV, Avro o Parquet).
  • Un trabajo se reinicia, ya sea externamente por un usuario que lo detiene e inicia, o internamente para el mantenimiento del sistema o la recuperación tras un error.
  • La consulta está completamente particionada y se crea un nuevo archivo para cada partición de salida. Deriva del uso de PARTITION BY o de la paralelización nativa introducida en el nivel de compatibilidad 1.2.
  • El usuario elimina un archivo o un contenedor de la cuenta de almacenamiento.
  • La salida está particionada por tiempo mediante el patrón de prefijo de ruta de acceso y se usa un nuevo blob cuando la consulta pasa a la hora siguiente.
  • Se crean particiones de la salida por un campo personalizado y se crea un nuevo blob por clave de partición, si no existe.
  • Se crean particiones de la salida por un campo personalizado, donde la cardinalidad de clave de partición supera el valor de 8000, y se crea un nuevo blob por clave de partición.

Creación de particiones

Para la clave de partición, use los tokens {date} y {time} de los campos de evento del patrón de la ruta de acceso. Elija el formato de fecha, como YYYY/MM/DD, DD/MM/YYYY o MM-DD-YYYY. HH se usa para el formato de hora. La salida del blob se puede particionar mediante un único atributo de evento personalizado {fieldname} o {datetime:\<specifier>}. El número de escritores de salida sigue las particiones de entrada para consultas que se pueden paralelizar totalmente.

Tamaño de lote de salida

Para obtener el tamaño máximo del mensaje, consulte los límites de Azure Storage. El tamaño máximo del bloque de blobs es 4 MB y el número máximo del bloque de blobs es 50 000.

Limitaciones

  • Si se usa un símbolo de barra diagonal (/) en el patrón de ruta de acceso (por ejemplo, /folder2/folder3), se crean carpetas vacías y no están visibles en Explorador de Storage.
  • Stream Analytics anexa al mismo archivo en los casos en los que no se necesita un nuevo archivo de blob. Podría provocar la generación de más desencadenadores si se configuran servicios de Azure como Azure Event Grid para desencadenarse en la actualización del archivo de blob.
  • Stream Analytics anexa al blob de manera predeterminada. Si el formato de salida es una matriz JSON, completa el archivo durante el apagado o cuando la salida se mueve a la siguiente partición de tiempo en el caso de las salidas con particiones de tiempo. En algunos casos, como un reinicio no limpio, es posible que falte el corchete de cierre (]) para la matriz JSON.