Establecimiento del valor devuelto de canalización en Azure Data Factory y Azure Synapse Analytics

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.

En el paradigma de canalización de llamada a canalización secundaria, puede usar la actividad de establecimiento de variable para devolver valores de la canalización secundaria a la canalización de llamada. En el escenario siguiente, tenemos una canalización secundaria mediante la actividad de ejecución de canalización. También queremos recuperar información de la canalización secundaria y, después, usarla en la canalización de llamada.

Captura de pantalla con la actividad ExecutePipeline.

Introduce el valor devuelto de la canalización, un diccionario de pares clave-valor, que permite las comunicaciones entre las canalizaciones secundarias y la canalización primaria.

Requisito previo: llamada a una canalización secundaria

Como requisito previo, el diseño necesita una Actividad de ejecución de canalización que llama a una canalización secundaria, con el parámetro Wait on Completion (Esperar a que se complete) habilitado en la actividad.

Configuración de captura de pantalla de la Actividad ExecutePipeline para esperar hasta la finalización.

Configuración del valor devuelto de canalización en la canalización secundaria

Hemos ampliado la actividad de establecer variable para incluir variables del sistema Valor devuelto de la canalización. No es necesario definirlas en el nivel de canalización (en lugar de cualquier otra variable que use en la canalización).

  1. Busque Establecer variable en el panel Actividades de la canalización y arrastre una actividad Eliminar al lienzo de la canalización.
  2. Seleccione la actividad de establecimiento de variable en el lienzo, si aún no está seleccionada y, después, su pestaña Variables para editar sus información.
  3. Elija Pipeline return value (Valor devuelto de la canalización) para el tipo de variable.
  4. Seleccione Nuevo para agregar un par clave-valor nuevo.
  5. El número de pares clave-valor que se pueden agregar solo está limitado por el límite de tamaño del JSON devuelto (4 MB).

Captura de pantalla en la que se muestra la interfaz de usuario para el valor devuelto de la canalización.

Hay algunas opciones para los tipos de valor, entre las que se incluyen las siguientes:

Nombre del tipo Descripción
String Valor de cadena constante. por ejemplo: "ADF es genial"
Expresión Te permite referenciar el resultado de actividades anteriores. Aquí puede usar la interpolación de cadenas para incluir valores de expresión en línea, como "The value is @{guid()}".
Matriz Espera una matriz de valores de cadena. Presione la tecla "Entrar" para separar los valores de la matriz.
Boolean Verdadero o falso
Null Estado del marcador de posición de señal; el valor es null constante.
Int Un valor numérico de tipo entero. Por ejemplo: 42
Flotante Valor numérico de tipo decimal. Por ejemplo: 2.71828
Objeto Advertencia: Solo en casos de uso complicados. Permite insertar una lista de pares clave-valor para el valor.

El valor del tipo de objeto se define de la siguiente manera:

[{"key": "myKey1", "value": {"type": "String", "content": "hello world"}}, 
 {"key": "myKey2", "value": {"type": "String", "content": "hi"}}
]

Recuperación del valor en la canalización de llamadas

El valor devuelto de la canalización secundaria se convierte en la salida de la actividad de ejecución de canalización. Puede recuperar la información con @activity('Execute Pipeline1').output.pipelineReturnValue.keyName. El caso de uso es ilimitado. Por ejemplo, puede usar

Captura de pantalla en la que se muestra la canalización de llamada.

Hay dos llamadas destacables al hacer referencia a los valores devueltos de la canalización.

  1. Con el tipo Object, puede profundizar más en un objeto JSON anidado, como @activity('Execute Pipeline1').output.pipelineReturnValue.keyName.nextLevelKey
  2. Con el tipo Array, puede especificar el índice en la lista, con @activity('Execute Pipeline1').output.pipelineReturnValue.keyName[0]. El número tiene índice cero, lo que significa que comienza por 0.

Nota

Asegúrese de que el elemento keyName al que hace referencia existe en la canalización secundaria. El generador de expresiones de ADF no puede confirmar la comprobación de referencia. Si falta la clave a la que se hace referencia en la carga se producirá un error en la canalización.

Consideraciones especiales

  • Aunque se pueden incluir varias actividades de Establecer valor de devolución de canalización en una canalización, es importante asegurarse de que solo una de ellas se ejecuta en la canalización.

    Captura de pantalla con el Valor devuelto de la canalización y Ramificación.

    Para evitar lo indicado anteriormente sobre que falte una clave en la canalización de llamada, le recomendamos que tenga la misma lista de claves en todas las ramas de la canalización secundaria. Considere la posibilidad de usar tipos null para las claves que no tienen valores en una rama específica.

  • El lenguaje de expresiones Azure Data Factory no admite directamente objetos JSON insertados. En su lugar, es necesario concatenar cadenas y expresiones correctamente.

    Por ejemplo, para la siguiente expresión JSON:

    {
      "datetime": "@{utcnow()}",
      "date": "@{substring(utcnow(),0,10)}",
      "year": "@{substring(utcnow(),0,4)}",
      "month": "@{substring(utcnow(),5,2)}",
      "day": "@{substring(utcnow(),8,2)}"
    }
    

    Una expresión de Azure Data Factory equivalente sería:

    @{
      concat(
        '{',
        '"datetime": "', utcnow(), '", ',
        '"date": "', substring(utcnow(),0,10), '", ',
        '"year": "', substring(utcnow(),0,4), '", ',
        '"month": "', substring(utcnow(),5,2), '", ',
        '"day": "', substring(utcnow(),8,2), '"',
        '}'
      )
    }
    

Obtenga información sobre otra actividad de flujo de control relacionada: