Udostępnij za pośrednictwem


Tworzenie działania skryptu w usłudze Microsoft Fabric Data Factory

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 INSERTjęzyka manipulowania danymi (DML): , UPDATE, DELETEi SELECT.
  • Instrukcje języka Data Definition Language (DDL): CREATE, ALTER i DROP.

Wymagania wstępne

Utwórz działanie skryptu

  1. W usłudze Microsoft Fabric wybierz swój obszar roboczy, przejdź do fabryki danych, a następnie wybierz przycisk Nowy element .

  2. W okienku Nowy element wyszukaj pipeline i wybierz kafelek Potok danych.

    Zrzut ekranu przedstawiający opcje uruchamiania procesu tworzenia potoku danych.

  3. W oknie dialogowym Nowy potok wprowadź nazwę, a następnie wybierz przycisk Utwórz , aby utworzyć potok danych.

    Zrzut ekranu przedstawiający okno dialogowe do nadawania nazwy nowemu potokowi.

  4. W menu Działania wybierz ikonę Skrypt .

    Zrzut ekranu przedstawiający ikonę wybierania działania skryptu.

  5. Po wybraniu działania skryptu na kanwie potoku danych na karcie Ogólne wprowadź nazwę działania.

    Zrzut ekranu pokazujący, gdzie wprowadzić nazwę działania skryptu na karcie Ogólne.

  6. 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.

    Zrzut ekranu przedstawiający przykładowe ustawienie połączenia.

  7. Wybierz opcję Zapytanie lub Niezapytanie w zależności od skryptu.

    Zrzut ekranu przedstawiający opcje zapytania i niezapytania 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.

    Zrzut ekranu przedstawiający przykładowy skrypt zapytania.

    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 .

Zrzut ekranu przedstawiający przykład przycisku i pola tworzenia nowych danych wejściowych skryptu.

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.

Zrzut ekranu przedstawiający sposób dodawania drugiego pola dla danych wejściowych skryptu.

Jeśli chcesz usunąć pole wejściowe zapytania, wybierz ikonę Usuń dla tego pola.

Zrzut ekranu przedstawiający ikonę Usuń dla pól wejściowych skryptu.

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ątkowego 1.

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.

Zrzut ekranu przedstawiający przykład parametru wyjściowego z polami wyboru wybranymi do traktowania wartości jako 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.

Zrzut ekranu przedstawiający przykład prawidłowego parametru pozycyjnego.

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

Zrzut ekranu przedstawiający zaawansowane ustawienie w działaniu skryptu w celu ustawienia limitu czasu wykonywania dla bloku skryptu.

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

  1. Na karcie Ustawienia rozwiń sekcję Zaawansowane .

  2. Zaznacz pole wyboru Włącz rejestrowanie i opcję Pamięć zewnętrzna.

  3. Dodaj konto Blob Storage, tworząc nową połączoną usługę dla swojego konta Blob Storage.

  4. Opcjonalnie możesz podać ścieżkę folderu. Jeśli pozostawisz puste pole Ścieżka folderu , dzienniki przechodzą do scriptactivity-logs folderu.

Zrzut ekranu przedstawiający przykład rejestrowania zewnętrznego.

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

  1. Na karcie Ustawienia rozwiń sekcję Zaawansowane .

  2. Zaznacz pole wyboru Włącz rejestrowanie i opcję Dane wyjściowe działania .

Zrzut ekranu przedstawiający opcje konfigurowania rejestrowania danych wyjściowych działań.

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