Compartir vía


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

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 los campos anidados como clave de partición, a menos que se usen junto con los alias. Sin embargo, puede usar determinados caracteres para crear una jerarquía de archivos. Por ejemplo, para crear una columna que combine datos de otras dos columnas para crear una clave de partición única, puede usar la siguiente consulta:

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 crear particiones de los datos por client_id, establezca el blob Patrón de ruta de acceso para incluir un token de partición {client_id} en las propiedades de salida del 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.

Captura de pantalla que muestra el patrón de ruta de acceso con el identificador 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:

Captura de pantalla que muestra la salida de la API de REST.

Una vez que se inicia la ejecución del trabajo, el contenedor de clients podría ser similar a la siguiente imagen:

Captura de pantalla que muestra el 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:

Captura de pantalla que muestra el 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 porque 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/{date}/{aFieldInMyData}
    • cluster1/{time}/{aFieldInMyData}
    • cluster1/{aFieldInMyData}
    • cluster1/{date}/{time}/{aFieldInMyData}
  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. Un ejemplo es select concat (col1, col2) as compositeColumn into blobOutput from input. A continuación, pueden especificar compositeColumn como ruta de acceso personalizada en Azure Blob Storage.

  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, {columnA + columnB} no funciona.

  4. Cuando un flujo de entrada consta de registros con una cardinalidad de clave de partición menor que 8,000, los registros se anexan a los blobs existentes. Solo crean nuevos blobs cuando sea necesario. Si la cardinalidad es superior a 8000, no hay ninguna garantía de que se escriban blobs existentes. Los nuevos blobs no se crearán 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 DateTime personalizados le permiten especificar un formato de salida que se alinee con las convenciones de Hive Streaming, lo que le proporciona a 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 DateTime 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. Un ejemplo es {datetime:yyyy}.

Tokens admitidos

Los siguientes tokens del especificador de formato se pueden utilizar solos o en combinación para conseguir formatos personalizados de DateTime.

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 DateTime personalizados, puede agregar el token {date} o {time} al prefijo de ruta de acceso para crear un menú desplegable con los formatos incorporados de DateTime.

Captura de pantalla que muestra los formatos DateTime antiguos de Stream Analytics.

Extensibilidad y restricciones

Puede usar tantos tokens ({datetime:<specifier>}) como desee en el patrón de ruta de acceso hasta alcanzar el límite de caracteres de 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.

Un ejemplo es 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 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 el inicio rápido de Stream Analytics mediante Azure Portal. Use los mismos datos de ejemplo usados en el inicio rápido. Los datos de ejemplo también están disponibles en GitHub.

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

Captura de pantalla que muestra el receptor de salida de blobs de creación de Stream Analytics.

El patrón de ruta de acceso completa es:

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.

Captura de pantalla que muestra la salida de blobs de Stream Analytics con patrón de ruta de acceso personalizado.