Uso de parámetros, expresiones y funciones en Azure Data Factory

SE APLICA A: Azure Data Factory Azure Synapse Analytics

Sugerencia

Data Factory en Microsoft Fabric es la próxima generación de Azure Data Factory, con una arquitectura más sencilla, inteligencia artificial integrada y nuevas características. Si no está familiarizado con la integración de datos, comience con Fabric Data Factory. Las cargas de trabajo de ADF existentes pueden actualizarse a Fabric para acceder a nuevas funcionalidades en ciencia de datos, análisis en tiempo real e informes.

Este artículo se centra en conceptos fundamentales y ejemplos que le ayudan a crear canalizaciones de datos con parámetros en Azure Data Factory. La parametrización y las expresiones dinámicas agregan flexibilidad a ADF y pueden ahorrar tiempo al permitir soluciones de extracción, transformación, carga (ETL) o extracción, carga y transformación (ELT) más flexibles. Estas características reducen los costos de mantenimiento de soluciones y aceleran la implementación de nuevas características en canalizaciones existentes. La parametrización minimiza la codificación rígida y aumenta el número de objetos y procesos reutilizables en una solución.

Azure Data Factory interfaz de usuario y parámetros

Puede encontrar la creación y asignación de parámetros en la interfaz de usuario (UI) de Azure Data Factory para canalizaciones, conjuntos de datos y flujos de datos.

  1. En el Azure Data Factory studio, vaya al Authoring Canvas y edite una canalización, un conjunto de datos o un flujo de datos.

  2. Seleccione el lienzo en blanco para abrir la configuración de la canalización. No seleccione ninguna actividad. Es posible que tenga que extraer el panel de configuración desde la parte inferior del lienzo porque podría contraerse.

  3. Seleccione la pestaña Parámetros y seleccione + Nuevo para agregar parámetros.

    Captura de pantalla que muestra una configuración de canalización que muestra cómo definir parámetros en una canalización.

También puede usar parámetros en servicios vinculados seleccionando Agregar contenido dinámico junto a la propiedad que desea parametrizar.

Conceptos de parámetros

Puede usar parámetros para pasar valores externos a canalizaciones, conjuntos de datos, servicios vinculados y flujos de datos. Por ejemplo, si tiene un conjunto de datos que tiene acceso a las carpetas de Azure Blob Storage, puede parametrizar la ruta de acceso de la carpeta para que pueda reutilizar el mismo conjunto de datos para acceder a diferentes carpetas cada vez que se ejecute la canalización.

Los parámetros son similares a las variables, pero difieren en que los parámetros son externos y, por tanto, se pasan a canalizaciones, conjuntos de datos, servicios vinculados y flujos de datos, mientras que las variables se definen y usan dentro de una canalización. Los parámetros son de solo lectura, mientras que las variables se pueden modificar dentro de una canalización mediante la actividad Establecer variable.

Puede usar parámetros por sí mismos o como parte de las expresiones. Y el valor de un parámetro puede ser un valor literal o una expresión que se evalúa en tiempo de ejecución.

Por ejemplo:

"name": "value"

o

"name": "@pipeline().parameters.password"

Expresiones con parámetros

Las expresiones se usan para construir valores dinámicos en varias partes de una canalización, un conjunto de datos, un servicio vinculado o una definición de flujo de datos. Las expresiones empiezan siempre por una arroba (@) seguida del cuerpo de la expresión entre paréntesis. Por ejemplo, la expresión siguiente usa la concat función para combinar dos cadenas:

@concat('Hello, ', 'World!')

Al hacer referencia a parámetros en expresiones, se usa la sintaxis siguiente:

@pipeline().parameters.parameterName

o

@dataset().parameters.parameterName

Puede obtener más información sobre las expresiones en el artículo Información general del lenguaje de expresiones, pero estos son algunos ejemplos de uso de parámetros en expresiones.

Ejemplo de expresión compleja

En el ejemplo siguiente se hace referencia a un subcampo detallado del resultado de la actividad. Para hacer referencia a un parámetro de canalización que se evalúa como un subcampo, use la sintaxis [] en lugar del operador dot(.) (como en el caso de subcampo1 y subcampo2).

@activity('*activityName*').output.*subfield1*.*subfield2*[pipeline().parameters.*subfield3*].*subfield4*

Editor de contenido dinámico

El editor de contenido dinámico convierte automáticamente los caracteres de escape en el contenido cuando finaliza la edición. Por ejemplo, el siguiente contenido en el editor de contenido es una interpolación de cadenas con dos funciones de expresión.

{ 
  "type": "@{if(equals(1, 2), 'Blob', 'Table' )}",
  "name": "@{toUpper('myData')}"
}

El editor de contenido dinámico convierte el contenido anterior en la expresión "{ \n \"type\": \"@{if(equals(1, 2), 'Blob', 'Table' )}\",\n \"name\": \"@{toUpper('myData')}\"\n}". El resultado de esta expresión es una cadena de formato JSON, que se muestra a continuación.

{
  "type": "Table",
  "name": "MYDATA"
}

Conjunto de datos con parámetros

En el ejemplo siguiente, BlobDataset toma un parámetro llamado path. Su valor establece un valor para la propiedad folderPath mediante la expresión : dataset().path.

{
    "name": "BlobDataset",
    "properties": {
        "type": "AzureBlob",
        "typeProperties": {
            "folderPath": "@dataset().path"
        },
        "linkedServiceName": {
            "referenceName": "AzureStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "path": {
                "type": "String"
            }
        }
    }
}

Canalización con parámetros

En el ejemplo siguiente, la canalización toma los parámetros inputPath y outputPath. La ruta de acceso del conjunto de datos de blobs con parámetros se establece mediante los valores de estos parámetros. La sintaxis utilizada aquí es: pipeline().parameters.parametername.

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "name": "CopyFromBlobToBlob",
                "type": "Copy",
                "inputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.inputPath"
                        },
                        "type": "DatasetReference"
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.outputPath"
                        },
                        "type": "DatasetReference"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                }
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            }
        }
    }
}

Ejemplos detallados para practicar

Canalización de copia de Azure Data Factory con parámetros

Este tutorial de Azure Data Factory para el paso de parámetros en una canalización de copia le guía sobre cómo pasar parámetros entre una canalización y una actividad, y también entre actividades.

Canalización de flujo de datos de asignación con parámetros

Siga la guía Mapping data flow with parameters (Flujo de datos de mapeo con parámetros) para obtener un ejemplo completo de cómo usar parámetros en el flujo de datos.

Canalización controlada por metadatos con parámetros

Siga la guía Canalización controlada por metadatos con parámetros para obtener más información sobre cómo usar parámetros para diseñar canalizaciones controladas por metadatos. Este es un caso de uso común para los parámetros.

Para obtener una lista de las variables del sistema que se pueden usar en las expresiones, vea Variables del sistema.