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.
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
.
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.
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.
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:
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.
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
.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:
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
Contenido relacionado
Después de la transformación Alterar fila, puede desear recibir los datos en un almacén de datos de destino.