Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
INSERT
del lenguaje de manipulación de datos (DML): ,UPDATE
,DELETE
ySELECT
. - Instrucciones del lenguaje de definición de datos (DDL):
CREATE
,ALTER
yDROP
.
Prerrequisitos
- Un servidor flexible de Azure Database for PostgreSQL. Para más información, vaya a Creación de un servidor flexible de Azure Database for PostgreSQL.
- Una canalización de datos de Microsoft Fabric Data Factory.
Creación de una actividad de script
En Microsoft Fabric, seleccione el área de trabajo, cambie a Factoría de datos y, a continuación, seleccione el botón Nuevo elemento .
En el panel Nuevo elemento , busque canalización y seleccione el icono Canalización de datos .
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.
En el menú Actividades , seleccione el icono Script .
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.
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.
Seleccione la opción Consulta o NonQuery , en función del 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.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 .
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.
Si desea eliminar un cuadro de entrada de consulta, seleccione el icono Eliminar de ese cuadro.
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 de1
.
Parámetros con nombre (recomendado)
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
.
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.
{
"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.
"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:
En la pestaña Configuración , expanda la sección Opciones avanzadas .
Seleccione la casilla Habilitar registro y la opción Almacenamiento externo.
Agregue una cuenta de Blob Storage mediante la creación de un nuevo servicio vinculado para la cuenta de Blob Storage.
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
.
"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:
En la pestaña Configuración , expanda la sección Opciones avanzadas .
Seleccione la casilla Habilitar registro y la opción Actividad de salida.
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": "DO $$ BEGIN RAISE Notice 'Hello'; RAISE Notice 'World!'; END $$;"
}
],
"scriptBlockExecutionTimeout": "02:00:00",
"logSettings": {
"logDestination": "ActivityOutput"
}
}