Transformación Existe en 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.

La transformación Existe es una transformación de filtrado de filas que comprueba si los datos existen en otro origen o flujo. El flujo de salida incluye todas las filas del flujo izquierdo que, o bien existen, o bien no existen en el flujo derecho. La transformación Existe es similar a SQL WHERE EXISTS y SQL WHERE NOT EXISTS.

Configuración

  1. Elija en la lista desplegable Right stream (Flujo derecho) el flujo de datos donde va a comprobar la existencia.
  2. Especifique si busca que los datos existan o no existan en el valor Exist type (Tipo de Existe).
  3. Seleccione si quiere o no una expresión personalizada.
  4. Elija las columnas de clave que desea comparar como condiciones de existencia. 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.

Exists settings

Varias condiciones Existe

Para comparar varias columnas de cada flujo, agregue una nueva condición de existencia haciendo clic en el icono de signo más situado junto a una fila existente. Cada condición adicional se combina con una instrucción "y". La comparación de dos columnas equivale a la expresión siguiente:

source1@column1 == source2@column1 && source1@column2 == source2@column2

Expresión personalizada

Para crear una expresión de forma libre que contenga operadores distintos de "y" e "igual a", seleccione el campo Custom expression (Expresión personalizada). Escriba una expresión personalizada mediante el generador de expresiones de flujo de datos haciendo clic en el cuadro azul.

Exists custom settings

Si decide aplicarle un "enlace en tiempo de ejecución" a las columnas mediante un desfase de esquema para crear patrones dinámicos en los flujos de datos, la función de expresión byName() puede ayudarle a usar la transformación "Exists" sin necesidad de codificar los nombres de columna (por ejemplo, mediante un enlace anticipado). Ejemplo: toString(byName('ProductNumber','source1')) == toString(byName('ProductNumber','source2'))

Optimización de difusión

Broadcast Join

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.

Script de flujo de datos

Sintaxis

<leftStream>, <rightStream>
    exists(
        <conditionalExpression>,
        negate: { true | false },
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <existsTransformationName>

Ejemplo

El ejemplo siguiente es una transformación Existe denominada checkForChanges que toma el flujo izquierdo NameNorm2 y el flujo derecho TypeConversions. La condición Existe es la expresión NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region que devuelve true si coinciden las columnas EMPID y Region de cada flujo. Mientras se comprueba la existencia, negate es false. No se habilita ninguna difusión en la pestaña Optimize (Optimizar), por lo que broadcast tiene el valor 'none'.

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

Exists example

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

NameNorm2, TypeConversions
    exists(
        NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region,
	    negate:false,
	    broadcast: 'auto'
    ) ~> checkForChanges

Otras transformaciones similares son Búsqueda y Combinación.