Freigeben über


Erstellen einer Skriptaktivität in Microsoft Fabric Data Factory

GILT FÜR: Azure-Datenbank für PostgreSQL – Flexibler Server

In diesem Artikel erfahren Sie, wie Sie eine Skriptaktivität in Microsoft Fabric Data Factory erstellen, um benutzerdefinierte PostgreSQL-Abfragen auszuführen. Mit einer Skriptaktivität können Sie verschiedene Arten von PostgreSQL-Befehlen direkt in Ihren Pipelines ausführen. Zu diesen Befehlen zählen:

  • DML-Anweisungen (Data Manipulation Language): INSERT, UPDATE, , DELETEund SELECT.
  • Data Definition Language (DDL)-Anweisungen: CREATE, ALTER, und DROP.

Voraussetzungen

Erstellen einer Skriptaktivität

  1. Wählen Sie in Microsoft Fabric Ihren Arbeitsbereich aus, wechseln Sie zu Data Factory, und wählen Sie dann die Schaltfläche " Neues Element " aus.

  2. Suchen Sie im Bereich "Neues Element" nach Pipeline , und wählen Sie die Kachel "Datenpipeline" aus.

    Screenshot der Auswahl zum Starten des Prozesses zum Erstellen einer Datenpipeline.

  3. Geben Sie im Dialogfeld "Neue Pipeline " einen Namen ein, und wählen Sie dann die Schaltfläche " Erstellen " aus, um eine Datenpipeline zu erstellen.

    Screenshot des Dialogfelds zum Benennen einer neuen Pipeline.

  4. Wählen Sie im Menü "Aktivitäten " das Symbol "Skript " aus.

    Screenshot, der das Symbol zum Auswählen einer Skriptaktivität zeigt.

  5. Wählen Sie die Skriptaktivität auf der Datenpipeline-Canvas aus und geben Sie im Tab Allgemein einen Namen für die Aktivität ein.

    Screenshot, der zeigt, wo ein Name für eine Skriptaktivität auf der Registerkarte

  6. Wählen Sie auf der Registerkarte "Einstellungen " Ihre Azure-Datenbank für Die PostgreSQL-Verbindung aus, oder erstellen Sie eine neue, indem Sie die Option "Weitere " verwenden. Erfahren Sie mehr über das Herstellen einer Verbindung mit Ihren Daten mithilfe der modernen Get-Data-Erfahrung für Datenpipelinen.

    Screenshot einer Beispieleinstellung für eine Verbindung.

  7. Wählen Sie je nach Skript entweder die Option "Abfrage" oder " Nichtabfrage" aus.

    Screenshot, das die Abfrage- und Nicht-Abfrageoptionen für ein Skript hervorhebt.

    Die Skriptaktivität unterstützt sowohl Abfrage- als auch Nichtabfrageanweisungen.

    Abfrageanweisungen führen PostgreSQL-Anweisungen (häufig SELECT Anweisungen) aus, die Ergebnisse zurückgeben. Eine query-Anweisung gibt Datensätze zurück.

    Screenshot eines Beispiels für ein Abfrageskript.

    Hier finden Sie Beispielnutzdaten mit einer query-Anweisung:

    {
       "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"
       }
    }
    

Erstellen mehrerer Skripts innerhalb einer Skriptaktivität

Auf der Registerkarte "Einstellungen " können Sie mehrere Abfragen in einer Skriptaktivität konfigurieren. Um eine neue Skripteingabe hinzuzufügen, wählen Sie im Skriptbereich die Schaltfläche plus (+) aus.

Screenshot, der ein Beispiel für die Schaltfläche und das Feld zum Erstellen einer neuen Skripteingabe zeigt.

Sie können die + Schaltfläche mehrmals auswählen, je nachdem, wie viele Skripteingaben Sie erstellen möchten. Wenn Sie beispielsweise zwei neue Skripteingaben hinzufügen möchten, wählen Sie die + Schaltfläche zweimal aus.

Screenshot, der zeigt, wie Sie ein zweites Feld für die Skripteingabe hinzufügen.

Wenn Sie ein Abfrageeingabefeld löschen möchten, wählen Sie das Symbol "Löschen " für dieses Feld aus.

Screenshot des Symbols

Hier ist ein Beispiel für eine Nutzlast mit zwei unterschiedlichen Abfragen:

{
    "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"
    }
}

Verwenden von Skriptparametern

Von Bedeutung

Mehrfachabfrageanweisungen, die Ausgabeparameter verwenden, werden nicht unterstützt. Sie müssen alle Ausgabeabfragen in separate Skriptblöcke innerhalb einer Skriptaktivität aufteilen.

Eine Skriptaktivität unterstützt zwei Typen von Skriptparametern:

  • Benannte Parameter basieren auf dem Namen der Parameter und werden wie @<name> in der Abfrage angegeben.
  • Positionsparameter basieren auf dem Index der Parameter und werden in der Abfrage (in der Reihenfolge) wie $<position number> bei einem Anfangsindex von 1angegeben.

Verwenden Sie für benannte Parameter als Ausgabeparameter das @ Präfix. Setzen Sie den Wert auf null, indem Sie das Kontrollkästchen "Als NULL behandeln" auf der Benutzeroberfläche aktivieren, und lassen Sie die Nutzlast leer oder null. Der Wert im Text sollte sein null.

Screenshot eines Ausgabeparameterbeispiels mit aktivierten Kontrollkästchen zum Behandeln der Werte als NULL.

Der innerhalb der Prozedur für die Ausgabe festgelegte Name ist der Name, der in der resultSets Datenausgabe verwendet wird. Der in der UI-Ausgabezeile festgelegte Name wird für den Namen von outputParameters verwendet.

Hier sehen Sie ein Beispielergebnis aus der Ui-Ausführung:

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

Hier ist ein Nutzlastbeispiel für den Ausgabeparameter:

{
    "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"
}

Positionsparameter

Von Bedeutung

Mehrfachabfrageanweisungen, die Positionsparameter verwenden, werden nicht unterstützt. Stellen Sie sicher, dass alle Abfragen mit Positionsparametern in eigenen Skriptblöcken innerhalb einer Skriptaktivität eingebettet sind.

Verwenden Sie zum Verwenden von Positionsparametern einen Platzhalter $<positional number> in Ihrer Abfrage. Auf der Benutzeroberfläche muss unter Skriptparametern das Feld "Name " leer sein. In der Nutzlast muss das name Feld als nullangegeben werden.

Das folgende Beispiel zeigt einen gültigen Positionsparameter.

Screenshot, der ein Beispiel für einen gültigen Positionsparameter zeigt.

{
    "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"
    }
}

Das folgende Beispiel zeigt einen ungültigen Positionsparameter:

{
    "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"
    }
}

Erweiterte Einstellungen konfigurieren

Ausführungstimeout für Skriptblöcke

Sie können ein Timeout in Minuten für jeden ausgeführten Skriptblock konfigurieren. Wenn ein Skriptblock innerhalb Ihrer Skriptaktivität das angegebene Timeout überschreitet, schlägt die gesamte Aktivität fehl.

Screenshot einer erweiterten Einstellung in einer Skriptaktivität zum Festlegen des Ausführungstimeouts für einen Skriptblock.

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

Protokollierung

Sie können PostgreSQL-Hinweise auf ein externes Azure Blob Storage-Konto oder internen Speicher protokollieren.

Externer Speicher

So richten Sie die externe Protokollierung ein:

  1. Erweitern Sie auf der Registerkarte "Einstellungen " den Abschnitt "Erweitert ".

  2. Aktivieren Sie das Kontrollkästchen "Protokollierung aktivieren " und die Option " Externer Speicher ".

  3. Fügen Sie ein Blob Storage-Konto hinzu, indem Sie einen neuen verknüpften Dienst für Ihr Blob Storage-Konto erstellen.

  4. Optional können Sie einen Ordnerpfad angeben. Wenn Sie das Feld "Ordnerpfad " leer lassen, wechseln die Protokolle zum scriptactivity-logs Ordner.

Screenshot eines Beispiels für eine externe Protokollierung.

"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>"
      }
   }
}

Aktivitätsausgabe

So richten Sie die Protokollierung in der Aktivitätsausgabe ein:

  1. Erweitern Sie auf der Registerkarte "Einstellungen " den Abschnitt "Erweitert ".

  2. Aktivieren Sie das Kontrollkästchen "Protokollierung aktivieren " und die Option "Aktivitätsausgabe ".

Screenshot, der die Auswahlmöglichkeiten zur Einrichtung der Aktivitätsprotokollierung zeigt.

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