Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
, ,DELETE
undSELECT
. - Data Definition Language (DDL)-Anweisungen:
CREATE
,ALTER
, undDROP
.
Voraussetzungen
- Eine Azure-Datenbank für Einen flexiblen Server für PostgreSQL. Weitere Informationen finden Sie unter Erstellen einer Instanz für Azure Database for PostgreSQL – Flexibler Server.
- Eine Microsoft Fabric Data Factory Datenpipeline.
Erstellen einer Skriptaktivität
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.
Suchen Sie im Bereich "Neues Element" nach Pipeline , und wählen Sie die Kachel "Datenpipeline" aus.
Geben Sie im Dialogfeld "Neue Pipeline " einen Namen ein, und wählen Sie dann die Schaltfläche " Erstellen " aus, um eine Datenpipeline zu erstellen.
Wählen Sie im Menü "Aktivitäten " das Symbol "Skript " aus.
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.
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.
Wählen Sie je nach Skript entweder die Option "Abfrage" oder " Nichtabfrage" aus.
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.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.
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.
Wenn Sie ein Abfrageeingabefeld löschen möchten, wählen Sie das Symbol "Löschen " für dieses Feld aus.
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 von1
angegeben.
Benannte Parameter (empfohlen)
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
.
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 null
angegeben werden.
Das folgende Beispiel zeigt einen gültigen Positionsparameter.
{
"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.
"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:
Erweitern Sie auf der Registerkarte "Einstellungen " den Abschnitt "Erweitert ".
Aktivieren Sie das Kontrollkästchen "Protokollierung aktivieren " und die Option " Externer Speicher ".
Fügen Sie ein Blob Storage-Konto hinzu, indem Sie einen neuen verknüpften Dienst für Ihr Blob Storage-Konto erstellen.
Optional können Sie einen Ordnerpfad angeben. Wenn Sie das Feld "Ordnerpfad " leer lassen, wechseln die Protokolle zum
scriptactivity-logs
Ordner.
"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:
Erweitern Sie auf der Registerkarte "Einstellungen " den Abschnitt "Erweitert ".
Aktivieren Sie das Kontrollkästchen "Protokollierung aktivieren " und die Option "Aktivitätsausgabe ".
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": "DO $$ BEGIN RAISE Notice 'Hello'; RAISE Notice 'World!'; END $$;"
}
],
"scriptBlockExecutionTimeout": "02:00:00",
"logSettings": {
"logDestination": "ActivityOutput"
}
}