Compartir vía


Transformación Alterar fila 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 Alterar fila para establecer directivas de inserción, eliminación, actualización y upsert en las filas. Puede agregar las condiciones de uno a varios como expresiones. Estas condiciones se deben especificar en orden de prioridad, ya que cada fila se marcará con la directiva correspondiente a la primera expresión coincidente. Cada una de esas condiciones puede dar lugar a la inserción, actualización, eliminación o upsert de una fila (o filas). La transformación Alterar fila puede generar tanto acciones DDL como DML en la base de datos.

Configuración de modificación de fila

Las transformaciones de Alterar fila solo funcionan en los receptores de base de datos, REST o Azure Cosmos DB del flujo de datos. Las acciones que asigne a las filas (inserción, actualización, eliminación, upsert) no se producirán durante las sesiones de depuración. Para promulgar las directivas de alteración de filas en las tablas de su base de datos, ejecute una actividad Ejecutar flujo de datos en una canalización.

Nota:

No se necesita una transformación Alter Row para los flujos de datos de captura de datos modificados que usan orígenes CDC nativos como SQL Server o SAP. En esos casos, ADF detectará automáticamente el marcador de fila, de forma que las directivas de Alter Row son innecesarias.

Especificación de una directiva de fila predeterminada

Cree una transformación Alterar fila y especifique una directiva de fila con una condición de true(). Cada fila que no coincida con alguna de las expresiones definidas previamente se marcará para la directiva de fila especificada. De forma predeterminada, cada fila que no coincide con alguna expresión condicional se marcará para Insert.

Directiva de alteración de fila

Nota

Para marcar todas las filas con una directiva, puede crear una condición para dicha directiva y especificar la condición como true().

Visualización de directivas en la vista previa de datos

Use el modo de depuración para ver los resultados de las directivas de Alterar fila en el panel Vista previa de datos. La vista previa de datos de una transformación Alterar fila no producirá acciones DDL o DML en el destino.

Directivas de alteración de fila

Un icono para cada directiva de alteración de filas indica si se produce una acción de inserción, actualización, upsert o eliminación. El encabezado superior muestra a cuántas filas afecta cada directiva en la vista previa.

Permitir directivas de Alterar fila en el receptor

Para que las directivas de Alterar fila funcionen, el flujo de datos debe escribir en una base de datos o en un receptor Azure Cosmos DB. En la pestaña Configuración del receptor, habilite las directivas de Alterar fila que tiene permitidas.

Receptor de alteración de fila

El comportamiento predeterminado es permitir solamente las inserciones. Para permitir actualizaciones, upserts o eliminaciones, marque la casilla en el receptor correspondiente a esa condición. Si están habilitadas las actualizaciones, upserts o eliminaciones, debe especificar con qué columnas de clave del receptor deben coincidir.

Nota

Si las inserciones, actualizaciones u operaciones upsert modifican el esquema de la tabla de destino en el receptor, se producirá un error en el flujo de datos. Para modificar el esquema de destino en la base de datos, seleccione Recreate table (Volver a crear la tabla) como acción de la tabla. De esta forma se quita la tabla y se vuelve a crear con la nueva definición de esquema.

La transformación de receptor requiere una única clave o una serie de claves para la identificación de filas exclusiva en la base de datos de destino. En el caso de los receptores de SQL, establezca las claves en la pestaña de configuración del receptor. Para Azure Cosmos DB, establezca la clave de partición en la configuración y también el campo del sistema "Id." de Azure Cosmos DB en su asignación de receptor. En el caso de Azure Cosmos DB, es obligatorio incluir la columna del sistema "ID" para las actualizaciones, upserts y eliminaciones.

Combinaciones y operaciones upsert con Azure SQL Database y Azure Synapse

Los flujos de datos admiten las combinaciones en Azure SQL Database y el grupo de bases de datos de Azure Synapse (almacenamiento de datos) con la opción upsert.

Sin embargo, puede encontrarse escenarios en los que el esquema de la base de datos de destino use la propiedad de identidad de las columnas de clave. El servicio requiere que identifique las claves que se usarán para la comparación con los valores de fila de las actualizaciones y upserts. No obstante, si la columna de destino tiene establecida la propiedad de identidad y usa la directiva upsert, la base de datos de destino no le permitirá escribir en la columna. También podrías producirse errores al intentar operaciones upserts en una columna de distribución de una tabla distribuida.

A continuación se indican algunas formas de solucionarlos:

  1. Vaya a la configuración de la transformación del receptor y active la opción "Skip writing key columns" (Omitir la escritura de columnas de clave). Esto le indicará al servicio que no debe escribir la columna que ha seleccionado como valor de clave de la asignación.

  2. Si esa columna de clave no es la columna que está causando el problema de las columnas de identidad, puede usar la opción SQL de procesamiento previo para la transformación de receptor: SET IDENTITY_INSERT tbl_content ON. A continuación, desactive la propiedad SQL de posprocesamiento: SET IDENTITY_INSERT tbl_content OFF.

  3. En los casos de identidad y de columna de distribución, puede cambiar la lógica de Upsert a usar una condición de actualización independiente y una condición de inserción independiente mediante una transformación división condicional. De este modo, puede configurar la asignación en la ruta de actualización para omitir la asignación de columna de clave.

Script de flujo de datos

Sintaxis

<incomingStream>
    alterRow(
           insertIf(<condition>?),
           updateIf(<condition>?),
           deleteIf(<condition>?),
           upsertIf(<condition>?),
        ) ~> <alterRowTransformationName>

Ejemplo

El ejemplo siguiente es una transformación Alterar fila denominada CleanData que toma un flujo entrante SpecifyUpsertConditions y crea tres condiciones de Alterar fila. En la transformación anterior, se calcula una columna denominada alterRowCondition que determina si se inserta, actualiza o elimina una fila en la base de datos. Si el valor de la columna tiene un valor de cadena que coincide con la regla de Alterar fila, se le asigna esa directiva.

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

Ejemplo de alteración de fila

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

SpecifyUpsertConditions alterRow(insertIf(alterRowCondition == 'insert'),
	updateIf(alterRowCondition == 'update'),
	deleteIf(alterRowCondition == 'delete')) ~> AlterRow

Después de la transformación Alterar fila, puede desear recibir los datos en un almacén de datos de destino.