Compartir a través de


Transformación Combinación en el flujo de datos de asignación

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. Obtenga información sobre cómo iniciar una nueva evaluación gratuita.

Los flujos de datos están disponibles en las canalizaciones Azure Data Factory y Azure Synapse. Este artículo se aplica a los flujos de datos de asignación. Si carece de experiencia con las transformaciones, consulte el artículo de introducción Transformación de datos mediante flujos de datos de asignación.

Use la transformación Combinación para combinar datos de dos orígenes o flujos en un mismo flujo de datos de asignación. El flujo de salida incluirá todas las columnas de ambos orígenes que coincidan con una condición de combinación.

Tipos de combinación

La asignación de flujos de datos admite actualmente cinco tipos de combinación diferentes.

Combinación interna

La combinación interna solo genera filas que tienen valores coincidentes en ambas tablas.

Externa izquierda

La combinación externa izquierda devuelve todas las filas del flujo izquierdo y los registros coincidentes del flujo derecho. Si una fila del flujo izquierdo no tiene ninguna coincidencia, las columnas de salida del flujo derecho se establecen en NULL. La salida constará de las filas devueltas por una combinación interna más las filas sin coincidencias del flujo izquierdo.

Nota

En ocasiones, el motor de Spark que los flujos de datos usan puede no funcionar debido a posibles productos cartesianos en las condiciones de combinación. Si esto sucede, puede cambiar a una combinación cruzada personalizada y escribir manualmente la condición de combinación. Esto puede dar lugar a un rendimiento más lento en los flujos de datos, ya que es posible que el motor de ejecución tenga que calcular todas las filas de ambos lados de la relación y luego filtrarlas.

Externa derecha

La combinación externa derecha devuelve todas las filas del flujo derecho y los registros coincidentes del flujo izquierdo. Si una fila del flujo derecho no tiene ninguna coincidencia, las columnas de salida del flujo izquierdo se establecen en NULL. La salida constará de las filas devueltas por una combinación interna más las filas sin coincidencias del flujo derecho.

Externa completa

La combinación externa completa devuelve todas las columnas y filas de ambos lados con valores NULL para las columnas que no coinciden.

Combinación cruzada personalizada

La combinación cruzada genera el producto cruzado de los dos flujos en función de una condición. Si utiliza una condición que no es de igualdad, debe especificar una expresión personalizada como condición de combinación cruzada. El flujo de salida constará de todas las filas que cumplan la condición de combinación.

Puede usar este tipo de combinación para combinaciones no equivalentes y condiciones OR.

Si quiere generar explícitamente un producto cartesiano completo, utilice la transformación Columna derivada en cada uno de los dos flujos independientes antes de la combinación para crear una clave sintética en la que buscar coincidencias. Por ejemplo, cree una columna en la columna derivada de cada flujo denominada SyntheticKey y establézcala como igual a 1. A continuación, use a.SyntheticKey == b.SyntheticKey como expresión de combinación personalizada.

Nota

Asegúrese de incluir al menos una columna a cada lado de la relación izquierda y derecha de una combinación cruzada personalizada. La ejecución de combinaciones cruzadas con valores estáticos en lugar de columnas a cada lado produce exámenes completos de todo el conjunto de datos, lo que provoca que el flujo de datos se realice de manera deficiente.

Combinación aproximada

Puede optar por unirse en función de la lógica de combinación aproximada en lugar de la coincidencia exacta de valores de columna activando la opción de casilla "Usar coincidencia aproximada".

  • Combinar partes de texto: use esta opción para buscar coincidencias quitando espacio entre palabras. Por ejemplo, Data Factory coincide con DataFactory si esta opción está habilitada.
  • Columna de puntuación de similitud: opcionalmente, puede elegir almacenar la puntuación coincidente para cada fila de una columna escribiendo un nuevo nombre de columna aquí para almacenar ese valor.
  • Umbral de similitud: elija un valor entre 60 y 100 como coincidencia porcentual entre los valores de las columnas que ha seleccionado.

Combinación aproximada

Nota:

La coincidencia aproximada actualmente solo funciona con tipos de columnas de cadena y con tipos de combinación interna, externa izquierda y externa completa. Debe desactivar la optimización de difusión al usar combinaciones coincidentes aproximadas.

Configuración

  1. Elija el flujo de datos que va a combinar en la lista desplegable Right stream (Flujo derecho).
  2. Seleccione el tipo de combinación
  3. Elija las columnas clave con las que desea hacer coincidir su condición de combinación. De forma predeterminada, el flujo de datos busca la igualdad entre una columna de cada flujo. Para comparar a través de un valor de proceso, mantenga el mouse sobre la lista desplegable y seleccione Columna calculada.

Captura de pantalla de la transformación de combinación

Combinaciones no equivalentes

Para usar un operador condicional, por ejemplo, no es igual a (! =) o mayor que (>) en las condiciones de combinación, cambie la lista desplegable de operadores entre las dos columnas. Las combinaciones no equivalentes requieren que al menos uno de los dos flujos se difundan mediante la retransmisión fija en la pestaña Optimizar.

Combinación no equivalente

Optimización del rendimiento de combinación

A diferencia de la unión de combinación en herramientas como SSIS, la transformación Combinación no es una operación de unión de combinación obligatoria. No es necesario ordenar las claves de combinación. La operación de combinación se realiza en función de la operación de combinación óptima en Spark, ya sea una combinación de difusión o del lado de la asignación.

Optimización de la transformación de combinación

En las combinaciones, búsquedas y transformaciones Existe, si uno o ambos flujos de datos caben en la memoria del nodo de trabajo, puede optimizar el rendimiento al habilitar la opción Difusión. De forma predeterminada, el motor de Spark decidirá automáticamente si difundir o no una parte. Para elegir manualmente la parte que se va a difundir, seleccione Fijo.

No se recomienda deshabilitar la difusión a través de la opción Desactivado a menos que las combinaciones experimenten errores de tiempo de espera.

Autocombinación

Para autocombinar un flujo de datos consigo mismo, asigne un alias a un flujo existente mediante una transformación Selección. Para crear una nueva rama, haga clic en el icono de signo más junto a una transformación y seleccione Nueva rama. Agregue una transformación Selección para asignar un alias al flujo original. Agregue una transformación Combinación y elija el flujo original como Left stream (flujo izquierdo) y la transformación Selección como el Right stream (flujo derecho).

Autocombinación

Condiciones de combinación de pruebas

Cuando pruebe las transformaciones Combinación con la vista previa de datos en modo de depuración, use un conjunto pequeño de datos conocidos. Cuando se realiza un muestreo de filas de un conjunto de filas grande, no se puede predecir qué filas y claves se leerán para las pruebas. El resultado es no determinista, lo que significa que las condiciones de combinación pueden no devolver ninguna coincidencia.

Script de flujo de datos

Sintaxis

<leftStream>, <rightStream>
    join(
        <conditionalExpression>,
        joinType: { 'inner'> | 'outer' | 'left_outer' | 'right_outer' | 'cross' }
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <joinTransformationName>

Ejemplo de combinación interna

El ejemplo siguiente es una transformación Combinación denominada JoinMatchedData que toma el flujo izquierdo TripData y el flujo derecho TripFare. La condición de combinación es la expresión hack_license == { hack_license} && TripData@medallion == TripFare@medallion && vendor_id == { vendor_id} && pickup_datetime == { pickup_datetime} que devuelve true si coinciden las columnas hack_license, medallion, vendor_id y pickup_datetime de cada flujo. El valor de joinType es 'inner'. Vamos a habilitar la difusión solo en el flujo izquierdo, por lo que broadcast tiene el valor 'left'.

En la interfaz de usuario, esta transformación es similar a la siguiente imagen:

Captura de pantalla que muestra la transformación con la pestaña Configuración de combinación seleccionada y el tipo de combinación Interna.

En el siguiente fragmento de código se muestra el script del flujo de datos para esta transformación:

TripData, TripFare
    join(
        hack_license == { hack_license}
        && TripData@medallion == TripFare@medallion
        && vendor_id == { vendor_id}
        && pickup_datetime == { pickup_datetime},
        joinType:'inner',
        broadcast: 'left'
    )~> JoinMatchedData

Ejemplo de combinación cruzada personalizada

El ejemplo siguiente es una transformación Combinación denominada JoiningColumns que toma el flujo izquierdo LeftStream y el flujo derecho RightStream. Esta transformación toma dos flujos y combina todas las filas en las que la columna leftstreamcolumn es mayor que la columna rightstreamcolumn. El valor de joinType es cross. La difusión no está habilitada, broadcast tiene el valor 'none'.

En la interfaz de usuario, esta transformación es similar a la siguiente imagen:

Captura de pantalla que muestra la transformación con la pestaña Configuración de combinación seleccionada y el tipo de combinación Personalizada (cruzada).

En el siguiente fragmento de código se muestra el script del flujo de datos para esta transformación:

LeftStream, RightStream
    join(
        leftstreamcolumn > rightstreamcolumn,
        joinType:'cross',
        broadcast: 'none'
    )~> JoiningColumns

Después de combinar los datos, puede crear una columna derivada y recibir sus datos en un almacén de datos de destino.