Particionamiento de la salida de blobs personalizada en Azure Stream Analytics

Azure Stream Analytics admite la creación de particiones de salida de blob personalizada con atributos o campos personalizados y patrones personalizados de ruta de acceso de fecha y hora.

Atributos o campos personalizados

Los campos o atributos de entrada personalizados mejoran los flujos de trabajo de procesamiento de datos e informes descendentes, ya que le otorgan más control sobre la salida.

Opciones de clave de partición

La clave de partición, o el nombre de columna, que se usa para particionar los datos de entrada pueden contener cualquier carácter que se acepte para nombres de blob. No es posible usar campos anidados como clave de partición a menos que se usen junto con los alias, pero puede usar determinados caracteres para crear una jerarquía de archivos. Por ejemplo, puede utilizar la siguiente consulta para crear una columna que combine datos de otras dos columnas para crear una clave de partición única.

SELECT name, id, CONCAT(name, "/", id) AS nameid

La clave de partición debe ser NVARCHAR(MAX), BIGINT, FLOAT o BIT (nivel de compatibilidad 1.2 o superior). Los tipos DateTime, Array y Records no se admiten, pero se pueden usar como claves de partición si se convierten en cadenas. Para más información, consulte los tipos de datos de Azure Stream Analytics.

Ejemplo

Supongamos que un trabajo toma datos de entrada de sesiones de usuarios en directo que están conectadas a un servicio externo de videojuegos en el que los datos incorporados contienen una columna client_id para identificar las sesiones. Para particionar los datos por client_id, configure el campo de patrón de ruta de acceso de blob para que incluya un token de partición {client_id} en las propiedades de salida de blob al crear un trabajo. A medida que los datos con varios valores de client_id pasan por el trabajo de Stream Analytics, los datos de salida se guardan en carpetas independientes con un valor de client_id único por carpeta.

Patrón de ruta de acceso con el Id. de cliente

De forma similar, si la entrada del trabajo eran datos de sensor de millones de sensores (de forma que cada uno tenía un sensor_id), el patrón de ruta de acceso sería {sensor_id} para particionar los datos de cada sensor en una carpeta diferente.

Cuando usa la API de REST, la sección de salida de un archivo JSON que se ha usado para dicha solicitud puede ser similar a la siguiente imagen:

Salida de la API REST

Después de que el trabajo empieza a ejecutarse, el contenedor de clients puede tener un aspecto similar a la siguiente imagen:

Contenedor de clientes

Cada carpeta puede contener varios blobs, de forma que cada blob contiene uno o más registros. En el ejemplo anterior, hay un único blob en una carpeta etiquetada como "06000000" con el siguiente contenido:

Contenido del blob

Tenga en cuenta que cada registro en el blob tiene una columna client_id que coincide con el nombre de la carpeta, ya que se usó la columna client_id para particionar la salida en la ruta de acceso.

Limitaciones

  1. Solo se permite una clave de partición personalizada en la propiedad de patrón de ruta de acceso de la salida del blob. Todos los patrones de ruta de acceso siguientes son válidos:

    • cluster1/{fecha}/{unCampoDeLosDatos}
    • cluster1/{hora}/{unCampoDeLosDatos}
    • cluster1/{unCampoDeLosDatos}
    • cluster1/{fecha}/{hora}/{unCampoDeLosDatos}
  2. Si los clientes quieren usar más de un campo de entrada, pueden crear una clave compuesta en la consulta para la partición de ruta de acceso personalizada en la salida del blob mediante CONCAT. Por ejemplo: seleccione concat (col1, col2) como compositeColumn en blobOutput desde la entrada. A continuación, pueden especificar compositeColumn como ruta de acceso personalizada en el almacenamiento de blobs.

  3. Las claves de partición no distinguen mayúsculas de minúsculas, por lo que los valores como John y john son equivalentes. Además, no pueden usarse expresiones como clave de partición. Por ejemplo, {columnaA + columnaB} no funciona.

  4. Cuando un flujo de entrada consta de registros con una cardinalidad de clave de partición menor que 8000, los registros se anexan a los blobs existentes y solo se crearán blobs nuevos cuando sea necesario. Si la cardinalidad es mayor que 8000, no garantizamos que se escribirá en los blobs existentes ni que no se crearán blobs nuevos para un número arbitrario de registros con la misma clave de partición.

  5. Si el resultado del blob está configurado como inmutable, Stream Analytics crea un blob cada vez que se envíen los datos.

Patrones personalizados de ruta de acceso de fecha y hora

Los patrones de la ruta de acceso de fecha y hora personalizados le permiten especificar un formato de salida que se alinee con las convenciones de Hive Streaming, lo que le proporciona a Azure Stream Analytics la capacidad de enviar datos a Azure HDInsight y Azure Databricks para su procesamiento posterior. Los patrones de la ruta de acceso de fecha personalizados se implementan fácilmente utilizando la palabra clave datetime en el campo Prefijo de ruta de acceso de la salida de blob, así como el especificador de formato. Por ejemplo, {datetime:yyyy}.

Tokens admitidos

Los siguientes tokens del especificador de formato se pueden utilizar solos o en combinación para conseguir formatos personalizados de fecha y hora:

Especificador de formato Descripción Resultados en la hora de ejemplo 2018-01-02T10: 06: 08
{datetime:yyyy} El año como un número de cuatro dígitos 2018
{datetime:MM} Mes desde 01 hasta 12 01
{datetime:M} Mes desde 1 hasta 12 1
{datetime:dd} Día desde 01 hasta 31 02
{datetime:d} Día desde 1 hasta 31 2
{datetime:HH} Hora con el formato de 24 horas, de 00 a 23 10
{datetime:mm} Minutos de 00 a 60 06
{datetime:m} Minutos de 0 a 60 6
{datetime:ss} Segundos de 00 a 60 08

Si no quiere usar patrones de fecha y hora personalizados, puede agregar el token {date} o {time} al prefijo de ruta de acceso para crear un menú desplegable con los formatos incorporados de fecha y hora.

Formatos antiguos de fecha y hora de Stream Analytics

Extensibilidad y restricciones

Puede usar tantos tokens ({datetime:<specifier>}) como quiera en el patrón de la ruta de acceso hasta que alcance el límite de caracteres del prefijo de ruta de acceso. Los especificadores de formato no se pueden combinar en un solo token si van más allá de las combinaciones ya enumeradas en los menús desplegables de fecha y hora.

Para una partición de ruta de logs/MM/dd:

Expresión válida Expresión no válida
logs/{datetime:MM}/{datetime:dd} logs/{datetime:MM/dd}

Puede usar el mismo especificador de formato varias veces en el prefijo de ruta de acceso. El token debe repetirse cada vez.

Convenciones de Hive Streaming

Los patrones de ruta de acceso personalizados para Blob Storage se pueden usar con la convención Hive Streaming, que espera que las carpetas estén etiquetadas con column= en el nombre de la carpeta.

Por ejemplo, year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}.

La salida personalizada elimina la necesidad de tener que alterar las tablas y agregar particiones manualmente a los datos de puertos que estén entre Azure Stream Analytics y Hive. En su lugar, muchas carpetas se pueden agregar automáticamente mediante:

MSCK REPAIR TABLE while hive.exec.dynamic.partition true

Ejemplo

Cree una cuenta de almacenamiento, un grupo de recursos, un trabajo de Stream Analytics y un origen de entrada de acuerdo con la guía de inicio rápido de Azure Stream Analytics mediante Azure Portal. Use los mismos datos de muestra utilizados en la guía de inicio rápido, que también está disponible en GitHub.

Cree un receptor de salida de blob con la siguiente configuración:

Stream Analytics crea un receptor de salida de blob

El patrón de la ruta de acceso completo es el siguiente:

year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Cuando inicie el trabajo, se creará una estructura de carpetas basada en el patrón de la ruta de acceso en el contenedor de blobs. Puede explorar en profundidad hasta llegar al nivel del día.

Salida de blobs de Stream Analytics con patrón de ruta de acceso personalizado

Pasos siguientes