Compartir a través de


Creación de una actividad de script en Microsoft Fabric Data Factory

SE APLICA A: Azure Database para PostgreSQL - Servidor Flexible

En este artículo, aprenderá a crear una actividad de script en Microsoft Fabric Data Factory para ejecutar consultas de PostgreSQL personalizadas. Una actividad de script permite ejecutar varios tipos de comandos de PostgreSQL directamente en las canalizaciones. Entre estos comandos se incluyen:

  • Instrucciones INSERTdel lenguaje de manipulación de datos (DML): , UPDATE, DELETEy SELECT.
  • Instrucciones del lenguaje de definición de datos (DDL): CREATE, ALTER y DROP.

Prerrequisitos

Creación de una actividad de script

  1. En Microsoft Fabric, seleccione el área de trabajo, cambie a Factoría de datos y, a continuación, seleccione el botón Nuevo elemento .

  2. En el panel Nuevo elemento , busque canalización y seleccione el icono Canalización de datos .

    Captura de pantalla que muestra las selecciones para iniciar el proceso de creación de una canalización de datos.

  3. En el cuadro de diálogo Nueva canalización , escriba un nombre y, a continuación, seleccione el botón Crear para crear una canalización de datos.

    Captura de pantalla que muestra el cuadro de diálogo para asignar un nombre a una nueva canalización.

  4. En el menú Actividades , seleccione el icono Script .

    Captura de pantalla que muestra el icono para seleccionar una actividad de script.

  5. Con la actividad de script seleccionada en el lienzo de canalización de datos, en la pestaña General, escriba un nombre para la actividad.

    Captura de pantalla que muestra dónde escribir un nombre para una actividad de script en la pestaña General.

  6. En la pestaña Configuración , seleccione la conexión de Azure Database for PostgreSQL o cree una nueva mediante la opción Más . Obtenga más información sobre cómo conectarse a los datos mediante la experiencia de obtención de datos moderna para canalizaciones de datos.

    Captura de pantalla que muestra una configuración de ejemplo para una conexión.

  7. Seleccione la opción Consulta o NonQuery , en función del script.

    Captura de pantalla que resalta las opciones de consulta y no consulta de un script.

    La actividad de script admite instrucciones query y nonquery.

    Las instrucciones de consulta ejecutan instrucciones PostgreSQL (a menudo SELECT instrucciones) que devuelven resultados. Una consulta devuelve registros de datos.

    Captura de pantalla que muestra un ejemplo de un script de consulta.

    Esta es una carga de ejemplo con una instrucción de consulta:

    {
       "name": "Sample of select statement",
       "type": "Script",
       "dependsOn": [],
       "policy": {
          "timeout": "0.12:00:00",
          "retry": 0,
          "retryIntervalInSeconds": 30,
          "secureOutput": false,
          "secureInput": false
       },
       "typeProperties": {
          "scripts": [
                {
                   "type": "Query",
                   "text": {
                      "value": "SELECT *  FROM sample_table WHERE sample_int =100",
                      "type": "Expression"
                   }
                }
          ],
          "scriptBlockExecutionTimeout": "02:00:00"
       },
       "externalReferences": {
          "connection": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
       }
    }
    

Creación de varios scripts dentro de una actividad de script

En la pestaña Configuración , puede configurar varias consultas en una actividad de script. Para agregar una nueva entrada de script, seleccione el botón más (+) en el área Script .

Captura de pantalla que muestra un ejemplo del botón y el cuadro para crear una nueva entrada de script.

Puede seleccionar el + botón varias veces, en función del número de entradas de script que quiera crear. Por ejemplo, para agregar dos entradas de script nuevas, seleccione el + botón dos veces.

Captura de pantalla que muestra cómo agregar un segundo cuadro para la entrada de script.

Si desea eliminar un cuadro de entrada de consulta, seleccione el icono Eliminar de ese cuadro.

Captura de pantalla que muestra el icono Eliminar para los cuadros de entrada de script.

Esta es una carga de ejemplo con dos consultas independientes:

{
    "name": "Sample of multiple select statements",
    "type": "Script",
    "dependsOn": [],
    "policy": {
        "timeout": "0.12:00:00",
        "retry": 0,
        "retryIntervalInSeconds": 30,
        "secureOutput": false,
        "secureInput": false
    },
    "typeProperties": {
        "scripts": [
            {
                "type": "Query",
                "text": {
                    "value": "SELECT * FROM sample_table WHERE sample_int = 100;",
                    "type": "Expression"
                }
            },
            {
                "type": "Query",
                "text": {
                    "value": "SELECT * FROM sample_table WHERE sample_int > 250;",
                    "type": "Expression"
                }
            }
        ],
        "scriptBlockExecutionTimeout": "02:00:00"
    },
    "externalReferences": {
        "connection": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}

Uso de parámetros de script

Importante

No se admiten instrucciones de consulta múltiple que usan parámetros de salida. Debe dividir las consultas de salida en bloques de script independientes dentro de una actividad de script.

Una actividad de script admite dos tipos de parámetros de script:

  • Los parámetros con nombre se basan en el nombre de los parámetros y se especifican como @<name> en la consulta.
  • Los parámetros posicionales se basan en el índice de los parámetros y se especifican en la consulta (en orden) como $<position number> con un índice inicial de 1.

Para los parámetros con nombre como parámetros de salida, use el @ prefijo . Establezca el valor como null con la casilla Tratar como nulo activada en la UI y deje la carga en blanco o null. El valor del texto debe ser null.

Captura de pantalla que muestra un ejemplo de parámetro de salida con casillas seleccionadas para tratar los valores como NULL.

El nombre establecido en el procedimiento para la salida es el nombre usado dentro de la resultSets salida de datos. El nombre establecido en la fila de salida de la interfaz de usuario se usa para el nombre de outputParameters.

Este es un resultado de ejemplo de la ejecución de la interfaz de usuario:

{
   "resultSetCount": 1,
   "recordsAffected": 0,
   "resultSets": [
      {
         "rowCount": 1,
         "rows": [
            {
               "output1": 10,
               "output2": "\"Hello World\""
            }
         ]
      }
   ],
   "outputParameters": {
      "output10": 10,
      "output20": "\"Hello World\""
   }
}

Este es un ejemplo de carga para el parámetro de salida:

{
    "scripts": [
        {
            "type": "NonQuery",
            "text": "CREATE OR REPLACE PROCEDURE swap_proc (input1 IN TEXT, input2 IN BIGINT, output1 OUT BIGINT, output2 OUT TEXT) LANGUAGE plpgsql AS $$ DECLARE BEGIN output2 := input1; output1 := input2; END $$ "
        },
        {
            "parameters": [
                {
                    "name": "input1",
                    "type": "String",
                    "value": "Hello world",
                    "direction": "Input"
                },
                {
                    "name": "input2",
                    "type": "Int32",
                    "value": "1234",
                    "direction": "Input"
                },
                {
                    "name": "output1",
                    "type": "Int32",
                    "value": "",
                    "direction": "Output"
                },
                {
                    "name": "output2",
                    "type": "String",
                    "value": "",
                    "direction": "Output",
                    "size": 100
                }
            ],
            "type": "Query",
            "text": "CALL swap_proc(@input1, @input2, null, null)"
        }
    ],
    "scriptBlockExecutionTimeout": "02:00:00"
}

Parámetros posicionales

Importante

No se admiten instrucciones de varias consultas que usan parámetros posicionales. Asegúrese de que las consultas que tengan parámetros posicionales estén en bloques de script independientes dentro de una actividad de script.

Para usar parámetros posicionales, use un marcador de posición de $<positional number> en la consulta. En la interfaz de usuario, en Parámetros de script, el cuadro Nombre debe dejarse en blanco. En la carga, el name campo debe especificarse como null.

En el ejemplo siguiente se muestra un parámetro posicional válido.

Captura de pantalla que muestra un ejemplo de un parámetro posicional válido.

{
    "name": "Sample for valid positional parameter",
    "type": "Script",
    "dependsOn": [],
    "policy": {
        "timeout": "0.12:00:00",
        "retry": 0,
        "retryIntervalInSeconds": 30,
        "secureOutput": false,
        "secureInput": false
    },
   "typeProperties": {
        "scripts": [
            {
                "parameters": [
                    {
                        "type": "String",
                        "value": "John",
                        "direction": "Input"
                    },
                    {
                        "type": "Int32",
                        "value": "52",
                        "direction": "Input"
                    }
                ],
                "type": "Query",
                "text": {
                    "value": "SELECT * FROM customers WHERE first_name = $1 and age = $2;",
                    "type": "Expression"
                }
            }
        ],
        "scriptBlockExecutionTimeout": "02:00:00"
    },
    "externalReferences": {
        "connection": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}

En el ejemplo siguiente se muestra un parámetro posicional no válido:

{
    "name": "Sample for invalid positional parameter",
    "type": "Script",
    "dependsOn": [],
    "policy": {
        "timeout": "0.12:00:00",
        "retry": 0,
        "retryIntervalInSeconds": 30,
        "secureOutput": false,
        "secureInput": false
    },
    "typeProperties": {
        "scripts": [
            {
                "parameters": [
                    {
                        "type": "String",
                        "value": "John",
                        "direction": "Input"
                    },
                    {
                        "type": "Int32",
                        "value": "52",
                        "direction": "Input"
                    }
                ],
                "type": "Query",
                "text": {
                    "value": "SELECT * FROM customers WHERE first_name = $1; SELECT * FROM customers WHERE age = $2;",
                    "type": "Expression"
                }
            }
        ],
        "scriptBlockExecutionTimeout": "02:00:00"
    },
    "externalReferences": {
        "connection": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
}

Opciones de configuración avanzada

Tiempo de espera de ejecución para bloques de scripts

Puede configurar un tiempo de espera en minutos para cada bloque de script que ejecute. Si algún bloque de script dentro de la actividad de script supera el tiempo de espera especificado, se produce un error en toda la actividad.

Captura de pantalla que muestra una configuración avanzada en una actividad de script para establecer el tiempo de espera de ejecución de un bloque de script.

    "typeProperties": {
        "scripts": [
            {
                "type": "Query",
                "text": {
                    "value": "SELECT pg_sleep(75);",
                    "type": "Expression"
                }
            }
        ],
        "scriptBlockExecutionTimeout": "00:01:00"
    },
    "externalReferences": {
        "connection": "9b351899-a92f-4e00-bc48-200a2c287f4c"
    }

Registro

Puede registrar avisos de PostgreSQL en una cuenta externa de Azure Blob Storage o en un almacenamiento interno.

Almacenamiento externo

Para configurar el registro externo:

  1. En la pestaña Configuración , expanda la sección Opciones avanzadas .

  2. Seleccione la casilla Habilitar registro y la opción Almacenamiento externo.

  3. Agregue una cuenta de Blob Storage mediante la creación de un nuevo servicio vinculado para la cuenta de Blob Storage.

  4. Opcionalmente, puede proporcionar una ruta de acceso de carpeta. Si deja el cuadro Ruta de acceso de carpeta en blanco, los registros van a la carpeta scriptactivity-logs.

Captura de pantalla que muestra un ejemplo de registro externo.

"typeProperties": {
   "scripts": [
      {
         "type": "Query",
         "text": "DO $$ BEGIN RAISE Notice 'Hello'; RAISE Notice 'World!'; END $$;"
      }
   ],
   "scriptBlockExecutionTimeout": "02:00:00",
   "logSettings": {
      "logDestination": "ExternalStore",
      "logLocationSettings": {
         "linkedServiceName": {
            "referenceName": "<Azure Blob Storage linked service name>",
            "type": "LinkedServiceReference"
         },
         "path": "<Azure Blob Storage folder path>"
      }
   }
}

Salida de la actividad

Para configurar el registro en la salida de la actividad:

  1. En la pestaña Configuración , expanda la sección Opciones avanzadas .

  2. Seleccione la casilla Habilitar registro y la opción Actividad de salida.

Captura de pantalla que muestra las selecciones para configurar el registro de salida de actividad.

"typeProperties": {
   "scripts": [
      {
         "type": "Query",
         "text": "DO $$ BEGIN RAISE Notice 'Hello'; RAISE Notice 'World!'; END $$;"
      }
   ],
   "scriptBlockExecutionTimeout": "02:00:00",
   "logSettings": {
      "logDestination": "ActivityOutput"
   }
}