Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny
Z tego artykułu dowiesz się, jak utworzyć działanie skryptu w usłudze Microsoft Fabric Data Factory w celu uruchamiania niestandardowych zapytań PostgreSQL. Akcja skryptu umożliwia uruchamianie różnych typów poleceń PostgreSQL bezpośrednio w pipeline'ach. Te polecenia obejmują:
- Instrukcje
INSERT
języka manipulowania danymi (DML): ,UPDATE
,DELETE
iSELECT
. - Instrukcje języka Data Definition Language (DDL):
CREATE
,ALTER
iDROP
.
Wymagania wstępne
- Elastyczny serwer Azure Database dla PostgreSQL. Aby dowiedzieć się więcej, zobacz Tworzenie elastycznego serwera usługi Azure Database for PostgreSQL.
- Potok danych usługi Microsoft Fabric Data Factory.
Utwórz działanie skryptu
W usłudze Microsoft Fabric wybierz swój obszar roboczy, przejdź do fabryki danych, a następnie wybierz przycisk Nowy element .
W okienku Nowy element wyszukaj pipeline i wybierz kafelek Potok danych.
W oknie dialogowym Nowy potok wprowadź nazwę, a następnie wybierz przycisk Utwórz , aby utworzyć potok danych.
W menu Działania wybierz ikonę Skrypt .
Po wybraniu działania skryptu na kanwie potoku danych na karcie Ogólne wprowadź nazwę działania.
Na karcie Ustawienia wybierz połączenie usługi Azure Database for PostgreSQL lub utwórz nowe przy użyciu opcji Więcej . Dowiedz się więcej na temat nawiązywania połączenia z danymi przy użyciu nowoczesnego środowiska pobierania danych dla potoków danych.
Wybierz opcję Zapytanie lub Niezapytanie w zależności od skryptu.
Działanie skryptu obsługuje zarówno instrukcje zapytania, jak i instrukcje niezapytania.
Instrukcje zapytań wykonują zapytania PostgreSQL (często
SELECT
instrukcje), które zwracają wyniki. Instrukcja zapytania zwraca rekordy danych.Oto przykładowy pakiet danych z zapytaniem:
{ "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" } }
Tworzenie wielu skryptów wewnątrz jednego działania skryptu
Na karcie Ustawienia można skonfigurować wiele zapytań w jednym działaniu skryptu. Aby dodać nowe dane wejściowe skryptu, wybierz przycisk plus (+) w obszarze Skrypt .
Możesz wybrać + przycisk wiele razy, w zależności od liczby danych wejściowych skryptu, które chcesz utworzyć. Aby na przykład dodać dwa nowe dane wejściowe skryptu, wybierz + przycisk dwa razy.
Jeśli chcesz usunąć pole wejściowe zapytania, wybierz ikonę Usuń dla tego pola.
Oto przykładowy ładunek z dwoma oddzielnymi zapytaniami:
{
"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"
}
}
Używanie parametrów skryptu
Ważne
Instrukcje z wieloma zapytaniami używające parametrów wyjściowych nie są obsługiwane. Należy podzielić wszystkie zapytania wyjściowe na oddzielne bloki skryptów w ramach działania skryptu.
Działanie skryptu obsługuje dwa typy parametrów skryptu:
- Nazwane parametry są oparte na nazwie parametrów i są określone jako
@<name>
w zapytaniu. - Parametry pozycyjne są oparte na indeksie parametrów i są określone w zapytaniu (w kolejności), tak jak
$<position number>
w przypadku indeksu początkowego1
.
Nazwane parametry (zalecane)
W przypadku nazwanych parametrów jako parametrów wyjściowych użyj prefiksu @
. Ustaw wartość na null
z zaznaczoną opcją Traktuj jako null w interfejsie, a pole pozostaw puste albo null
. Wartość w tekście powinna mieć wartość null
.
Nazwa ustawiona w ramach procedury dla wyników jest nazwą używaną w danych wyjściowych resultSets
. Nazwa ustawiona w wierszu danych wyjściowych interfejsu użytkownika jest używana dla nazwy outputParameters
.
Oto przykładowy wynik wykonania interfejsu użytkownika:
{
"resultSetCount": 1,
"recordsAffected": 0,
"resultSets": [
{
"rowCount": 1,
"rows": [
{
"output1": 10,
"output2": "\"Hello World\""
}
]
}
],
"outputParameters": {
"output10": 10,
"output20": "\"Hello World\""
}
}
Oto przykład ładunku dla parametru wyjściowego:
{
"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"
}
Parametry pozycyjne
Ważne
Instrukcje z wieloma zapytaniami używające parametrów pozycyjnych nie są obsługiwane. Upewnij się, że wszystkie zapytania, które mają parametry pozycyjne, znajdują się w oddzielnych blokach skryptu w ramach działania skryptu.
Aby użyć parametrów pozycyjnych, użyj symbolu zastępczego $<positional number>
w zapytaniu. W interfejsie użytkownika w obszarze Parametry skryptu pole Nazwa musi być puste. W ładunku pole name
musi być określone jako null
.
W poniższym przykładzie przedstawiono prawidłowy parametr pozycyjny.
{
"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"
}
}
W poniższym przykładzie przedstawiono nieprawidłowy parametr pozycyjny:
{
"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"
}
}
Konfigurowanie ustawień zaawansowanych
Limit czasu wykonywania dla bloków skryptu
Limit czasu można skonfigurować w minutach dla każdego uruchomionego bloku skryptu. Jeśli jakikolwiek blok skryptu w zadaniu skryptowym przekroczy określony limit czasu, całe zadanie zakończy się niepowodzeniem.
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": {
"value": "SELECT pg_sleep(75);",
"type": "Expression"
}
}
],
"scriptBlockExecutionTimeout": "00:01:00"
},
"externalReferences": {
"connection": "9b351899-a92f-4e00-bc48-200a2c287f4c"
}
Przemysł drzewny
Powiadomienia postgreSQL można rejestrować na zewnętrznym koncie usługi Azure Blob Storage lub w magazynie wewnętrznym.
Magazyn zewnętrzny
Aby skonfigurować rejestrowanie zewnętrzne:
Na karcie Ustawienia rozwiń sekcję Zaawansowane .
Zaznacz pole wyboru Włącz rejestrowanie i opcję Pamięć zewnętrzna.
Dodaj konto Blob Storage, tworząc nową połączoną usługę dla swojego konta Blob Storage.
Opcjonalnie możesz podać ścieżkę folderu. Jeśli pozostawisz puste pole Ścieżka folderu , dzienniki przechodzą do
scriptactivity-logs
folderu.
"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>"
}
}
}
Dane wyjściowe działania
Aby skonfigurować logowanie w danych wyjściowych działania:
Na karcie Ustawienia rozwiń sekcję Zaawansowane .
Zaznacz pole wyboru Włącz rejestrowanie i opcję Dane wyjściowe działania .
"typeProperties": {
"scripts": [
{
"type": "Query",
"text": "DO $$ BEGIN RAISE Notice 'Hello'; RAISE Notice 'World!'; END $$;"
}
],
"scriptBlockExecutionTimeout": "02:00:00",
"logSettings": {
"logDestination": "ActivityOutput"
}
}