Kopiowanie i przekształcanie danych do i z programu SQL Server przy użyciu usługi Azure Data Factory lub Azure Synapse Analytics

DOTYCZY: Azure Data Factory Azure Synapse Analytics

Napiwek

Wypróbuj usługę Data Factory w usłudze Microsoft Fabric — rozwiązanie analityczne typu all-in-one dla przedsiębiorstw. Usługa Microsoft Fabric obejmuje wszystko, od przenoszenia danych do nauki o danych, analizy w czasie rzeczywistym, analizy biznesowej i raportowania. Dowiedz się, jak bezpłatnie rozpocząć nową wersję próbną !

W tym artykule opisano sposób używania działania kopiowania w potokach usługi Azure Data Factory i Azure Synapse w celu kopiowania danych z bazy danych i do bazy danych programu SQL Server oraz używania Przepływ danych do przekształcania danych w bazie danych programu SQL Server. Aby dowiedzieć się więcej, przeczytaj artykuł wprowadzający dotyczący usługi Azure Data Factory lub Azure Synapse Analytics.

Obsługiwane możliwości

Ten łącznik programu SQL Server jest obsługiwany w następujących funkcjach:

Obsługiwane możliwości IR
działanie Kopiuj (źródło/ujście) (1) (2)
Przepływ danych mapowania (źródło/ujście) (1)
Działanie Lookup (1) (2)
Działanie GetMetadata (1) (2)
Działanie skryptu (1) (2)
Działanie procedury składowanej (1) (2)

(1) Środowisko Azure Integration Runtime (2) Self-hosted Integration Runtime

Aby uzyskać listę magazynów danych obsługiwanych jako źródła lub ujścia przez działanie kopiowania, zobacz tabelę Obsługiwane magazyny danych.

W szczególności ten łącznik programu SQL Server obsługuje następujące funkcje:

  • PROGRAM SQL Server w wersji 2005 lub nowszej.
  • Kopiowanie danych przy użyciu uwierzytelniania SQL lub Windows.
  • Jako źródło pobieranie danych przy użyciu zapytania SQL lub procedury składowanej. Możesz również wybrać opcję równoległego kopiowania ze źródła programu SQL Server. Aby uzyskać szczegółowe informacje, zobacz sekcję Kopia równoległa z bazy danych SQL.
  • Jako ujście automatycznie tworzy tabelę docelową, jeśli nie istnieje na podstawie schematu źródłowego; dołączanie danych do tabeli lub wywoływanie procedury składowanej za pomocą logiki niestandardowej podczas kopiowania.

Baza danych LocalDB programu SQL Server Express nie jest obsługiwana.

Ważne

Źródło danych musi obsługiwać typ danych NVARCHAR, ponieważ ma wpływ na kodowanie danych, gdy na danych jest stosowane nietypowe kodowanie.

Wymagania wstępne

Jeśli magazyn danych znajduje się wewnątrz sieci lokalnej, sieci wirtualnej platformy Azure lub chmury prywatnej Amazon Virtual, musisz skonfigurować własne środowisko Integration Runtime , aby się z nim połączyć.

Jeśli magazyn danych jest zarządzaną usługą danych w chmurze, możesz użyć środowiska Azure Integration Runtime. Jeśli dostęp jest ograniczony do adresów IP zatwierdzonych w regułach zapory, możesz dodać adresy IP środowiska Azure Integration Runtime do listy dozwolonych.

Możesz również użyć funkcji środowiska Integration Runtime zarządzanej sieci wirtualnej w usłudze Azure Data Factory, aby uzyskać dostęp do sieci lokalnej bez instalowania i konfigurowania własnego środowiska Integration Runtime.

Aby uzyskać więcej informacji na temat mechanizmów zabezpieczeń sieci i opcji obsługiwanych przez usługę Data Factory, zobacz Strategie dostępu do danych.

Rozpocznij

Aby wykonać działanie Kopiuj za pomocą potoku, możesz użyć jednego z następujących narzędzi lub zestawów SDK:

Tworzenie połączonej usługi PROGRAMU SQL Server przy użyciu interfejsu użytkownika

Wykonaj poniższe kroki, aby utworzyć połączoną usługę PROGRAMU SQL Server w interfejsie użytkownika witryny Azure Portal.

  1. Przejdź do karty Zarządzanie w obszarze roboczym usługi Azure Data Factory lub Synapse i wybierz pozycję Połączone usługi, a następnie kliknij pozycję Nowy:

  2. Wyszukaj ciąg SQL i wybierz łącznik programu SQL Server.

    Zrzut ekranu przedstawiający łącznik programu SQL Server.

  3. Skonfiguruj szczegóły usługi, przetestuj połączenie i utwórz nową połączoną usługę.

    Zrzut ekranu przedstawiający konfigurację połączonej usługi PROGRAMU SQL Server.

szczegóły konfiguracji Połączenie or

Poniższe sekcje zawierają szczegółowe informacje o właściwościach używanych do definiowania jednostek potoku usługi Data Factory i synapse specyficznych dla łącznika bazy danych programu SQL Server.

Właściwości połączonej usługi

Ten łącznik programu SQL Server obsługuje następujące typy uwierzytelniania. Aby uzyskać szczegółowe informacje, zobacz odpowiednie sekcje.

Napiwek

Jeśli wystąpi błąd z kodem błędu "UserErrorFailedTo Połączenie ToSqlServer", a komunikat taki jak "Limit sesji dla bazy danych to XXX i został osiągnięty", dodaj Pooling=false go do parametry połączenia i spróbuj ponownie.

Uwierzytelnianie SQL

Aby użyć uwierzytelniania SQL, obsługiwane są następujące właściwości:

Właściwości Opis Wymagania
type Właściwość type musi być ustawiona na SqlServer. Tak
Parametry połączenia Określ informacje connectionString potrzebne do nawiązania połączenia z bazą danych programu SQL Server. Określ nazwę logowania jako nazwę użytkownika i upewnij się, że baza danych, którą chcesz połączyć, jest mapowana na to logowanie. Zapoznaj się z poniższymi przykładami. Tak
hasło Jeśli chcesz umieścić hasło w usłudze Azure Key Vault, pobierz password konfigurację z parametry połączenia. Aby uzyskać więcej informacji, zobacz przykład JSON poniżej tabeli i Przechowywanie poświadczeń w usłudze Azure Key Vault. Nie.
alwaysEncrypted Ustawienia Określ zawszeszyfrowanesettings informacje potrzebne do włączenia funkcji Always Encrypted w celu ochrony poufnych danych przechowywanych na serwerze SQL przy użyciu tożsamości zarządzanej lub jednostki usługi. Aby uzyskać więcej informacji, zobacz przykład JSON w poniższej tabeli i sekcję Using Always Encrypted (Używanie funkcji Always Encrypted ). Jeśli nie zostanie określone, domyślne ustawienie zawsze szyfrowane jest wyłączone. Nie.
connectVia To środowisko Integration Runtime służy do nawiązywania połączenia z magazynem danych. Dowiedz się więcej w sekcji Wymagania wstępne . Jeśli nie zostanie określony, zostanie użyte domyślne środowisko Azure Integration Runtime. Nie.

Przykład: Używanie uwierzytelniania SQL

{
    "name": "SqlServerLinkedService",
    "properties": {
        "type": "SqlServer",
        "typeProperties": {
            "connectionString": "Data Source=<servername>\\<instance name if using named instance>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Przykład: używanie uwierzytelniania SQL z hasłem w usłudze Azure Key Vault

{
    "name": "SqlServerLinkedService",
    "properties": {
        "type": "SqlServer",
        "typeProperties": {
            "connectionString": "Data Source=<servername>\\<instance name if using named instance>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Przykład: Używanie funkcji Always Encrypted

{
    "name": "SqlServerLinkedService",
    "properties": {
        "type": "SqlServer",
        "typeProperties": {
            "connectionString": "Data Source=<servername>\\<instance name if using named instance>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;"
        },
        "alwaysEncryptedSettings": {
            "alwaysEncryptedAkvAuthType": "ServicePrincipal",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Uwierzytelnianie systemu Windows

Aby użyć uwierzytelniania systemu Windows, obsługiwane są następujące właściwości:

Właściwości Opis Wymagania
type Właściwość type musi być ustawiona na SqlServer. Tak
Parametry połączenia Określ informacje connectionString potrzebne do nawiązania połączenia z bazą danych programu SQL Server. Zapoznaj się z poniższymi przykładami.
userName Określ nazwę użytkownika. Przykładem jest nazwa_domeny\nazwa_użytkownika. Tak
hasło Określ hasło dla konta użytkownika określonego dla nazwy użytkownika. Oznacz to pole jako SecureString , aby bezpiecznie je przechowywać. Możesz też odwołać się do wpisu tajnego przechowywanego w usłudze Azure Key Vault. Tak
alwaysEncrypted Ustawienia Określ zawszeszyfrowanesettings informacje potrzebne do włączenia funkcji Always Encrypted w celu ochrony poufnych danych przechowywanych na serwerze SQL przy użyciu tożsamości zarządzanej lub jednostki usługi. Aby uzyskać więcej informacji, zobacz sekcję Using Always Encrypted (Używanie funkcji Always Encrypted ). Jeśli nie zostanie określone, domyślne ustawienie zawsze szyfrowane jest wyłączone. Nie.
connectVia To środowisko Integration Runtime służy do nawiązywania połączenia z magazynem danych. Dowiedz się więcej w sekcji Wymagania wstępne . Jeśli nie zostanie określony, zostanie użyte domyślne środowisko Azure Integration Runtime. Nie.

Uwaga

Uwierzytelnianie systemu Windows nie jest obsługiwane w przepływie danych.

Przykład: Korzystanie z uwierzytelniania systemu Windows

{
    "name": "SqlServerLinkedService",
    "properties": {
        "type": "SqlServer",
        "typeProperties": {
            "connectionString": "Data Source=<servername>\\<instance name if using named instance>;Initial Catalog=<databasename>;Integrated Security=True;",
            "userName": "<domain\\username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Przykład: używanie uwierzytelniania systemu Windows z hasłem w usłudze Azure Key Vault

{
    "name": "SqlServerLinkedService",
    "properties": {
        "annotations": [],
        "type": "SqlServer",
        "typeProperties": {
            "connectionString": "Data Source=<servername>\\<instance name if using named instance>;Initial Catalog=<databasename>;Integrated Security=True;",
            "userName": "<domain\\username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                },
                "secretName": "<secretName>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Właściwości zestawu danych

Pełna lista sekcji i właściwości dostępnych do definiowania zestawów danych znajduje się w artykule dotyczącym zestawów danych. Ta sekcja zawiera listę właściwości obsługiwanych przez zestaw danych programu SQL Server.

Aby skopiować dane z i do bazy danych programu SQL Server, obsługiwane są następujące właściwości:

Właściwości Opis Wymagania
type Właściwość type zestawu danych musi być ustawiona na SqlServerTable. Tak
schema Nazwa schematu. Nie dla źródła, Tak dla ujścia
table Nazwa tabeli/widoku. Nie dla źródła, Tak dla ujścia
tableName Nazwa tabeli/widoku ze schematem. Ta właściwość jest obsługiwana w celu zapewnienia zgodności z poprzednimi wersjami. W przypadku nowego obciążenia użyj polecenia schema i table. Nie dla źródła, Tak dla ujścia

Przykład

{
    "name": "SQLServerDataset",
    "properties":
    {
        "type": "SqlServerTable",
        "linkedServiceName": {
            "referenceName": "<SQL Server linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "typeProperties": {
            "schema": "<schema_name>",
            "table": "<table_name>"
        }
    }
}

Właściwości działania kopiowania

Aby uzyskać pełną listę sekcji i właściwości dostępnych do użycia do definiowania działań, zobacz artykuł Pipelines (Potoki ). Ta sekcja zawiera listę właściwości obsługiwanych przez źródło i ujście programu SQL Server.

SQL Server jako źródło

Napiwek

Aby wydajnie ładować dane z programu SQL Server przy użyciu partycjonowania danych, dowiedz się więcej na temat kopiowania równoległego z bazy danych SQL.

Aby skopiować dane z programu SQL Server, ustaw typ źródła w działaniu kopiowania na wartość SqlSource. Następujące właściwości są obsługiwane w sekcji źródło działania kopiowania:

Właściwości Opis Wymagania
type Właściwość type źródła działania kopiowania musi być ustawiona na Wartość SqlSource. Tak
sqlReaderQuery Użyj niestandardowego zapytania SQL, aby odczytać dane. Może to być na przykład select * from MyTable. Nie.
sqlReaderStoredProcedureName Ta właściwość jest nazwą procedury składowanej, która odczytuje dane z tabeli źródłowej. Ostatnia instrukcja SQL musi być instrukcją SELECT w procedurze składowanej. Nie.
storedProcedureParameters Te parametry są przeznaczone dla procedury składowanej.
Dozwolone wartości to pary nazw lub wartości. Nazwy i wielkość liter parametrów muszą być zgodne z nazwami i wielkością parametrów procedury składowanej.
Nie.
Isolationlevel Określa zachowanie blokowania transakcji dla źródła SQL. Dozwolone wartości to: ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Snapshot. Jeśli nie zostanie określony, zostanie użyty domyślny poziom izolacji bazy danych. Aby uzyskać więcej informacji, zapoznaj się z tym dokumentem . Nie.
partitionOptions Określa opcje partycjonowania danych używane do ładowania danych z programu SQL Server.
Dozwolone wartości to: Brak (wartość domyślna), PhysicalPartitionsOfTable i DynamicRange.
Jeśli opcja partycji jest włączona (czyli nie None), stopień równoległości równoczesnego ładowania danych z programu SQL Server jest kontrolowany przez parallelCopies ustawienie działania kopiowania.
Nie.
partycja Ustawienia Określ grupę ustawień partycjonowania danych.
Zastosuj, gdy opcja partycji nie Nonejest .
Nie.
W obszarze partitionSettings:
partitionColumnName Określ nazwę kolumny źródłowej w liczbą całkowitą lub typu daty/daty/godziny (int, smallint, smalldatetimedatedatetimebigintdatetime2lub datetimeoffset), która będzie używana przez partycjonowanie zakresu na potrzeby kopiowania równoległego. Jeśli nie zostanie określony, indeks lub klucz podstawowy tabeli zostanie automatycznie wykryty i użyty jako kolumna partycji.
Zastosuj, gdy opcja partycji to DynamicRange. Jeśli używasz zapytania do pobierania danych źródłowych, należy podłączyć ?AdfDynamicRangePartitionCondition się do klauzuli WHERE. Aby zapoznać się z przykładem, zobacz sekcję Kopiowanie równoległe z bazy danych SQL.
Nie.
partitionUpperBound Maksymalna wartość kolumny partycji dla podziału zakresu partycji. Ta wartość służy do decydowania o kroku partycji, a nie do filtrowania wierszy w tabeli. Wszystkie wiersze w tabeli lub wyniku zapytania zostaną podzielone na partycje i skopiowane. Jeśli nie zostanie określony, działanie kopiowania automatycznie wykrywa wartość.
Zastosuj, gdy opcja partycji to DynamicRange. Aby zapoznać się z przykładem, zobacz sekcję Kopiowanie równoległe z bazy danych SQL.
Nie.
partitionLowerBound Minimalna wartość kolumny partycji dla podziału zakresu partycji. Ta wartość służy do decydowania o kroku partycji, a nie do filtrowania wierszy w tabeli. Wszystkie wiersze w tabeli lub wyniku zapytania zostaną podzielone na partycje i skopiowane. Jeśli nie zostanie określony, działanie kopiowania automatycznie wykrywa wartość.
Zastosuj, gdy opcja partycji to DynamicRange. Aby zapoznać się z przykładem, zobacz sekcję Kopiowanie równoległe z bazy danych SQL.
Nie.

Pamiętaj o następujących kwestiach:

  • Jeśli dla usługi SqlSource określono wartość sqlReaderQuery, działanie kopiowania uruchamia to zapytanie względem źródła programu SQL Server w celu pobrania danych. Można również określić procedurę składowaną, określając parametry sqlReaderStoredProcedureName i storedProcedureParameters .
  • W przypadku używania procedury składowanej w źródle do pobierania danych należy pamiętać, że procedura składowana jest zaprojektowana jako zwracanie innego schematu po przekazaniu innej wartości parametru, może wystąpić błąd lub nieoczekiwany wynik podczas importowania schematu z interfejsu użytkownika lub kopiowania danych do bazy danych SQL z automatycznym tworzeniem tabeli.

Przykład: używanie zapytania SQL

"activities":[
    {
        "name": "CopyFromSQLServer",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SQL Server input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlSource",
                "sqlReaderQuery": "SELECT * FROM MyTable"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Przykład: używanie procedury składowanej

"activities":[
    {
        "name": "CopyFromSQLServer",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SQL Server input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlSource",
                "sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
                "storedProcedureParameters": {
                    "stringData": { "value": "str3" },
                    "identifier": { "value": "$$Text.Format('{0:yyyy}', <datetime parameter>)", "type": "Int"}
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Definicja procedury składowanej

CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
    @stringData varchar(20),
    @identifier int
)
AS
SET NOCOUNT ON;
BEGIN
    select *
    from dbo.UnitTestSrcTable
    where dbo.UnitTestSrcTable.stringData != stringData
    and dbo.UnitTestSrcTable.identifier != identifier
END
GO

Program SQL Server jako ujście

Napiwek

Dowiedz się więcej o obsługiwanych zachowaniach zapisu, konfiguracjach i najlepszych rozwiązaniach z sekcji Najlepsze rozwiązanie dotyczące ładowania danych do programu SQL Server.

Aby skopiować dane do programu SQL Server, ustaw typ ujścia w działaniu kopiowania na sqlSink. Następujące właściwości są obsługiwane w sekcji ujścia działania kopiowania:

Właściwości Opis Wymagania
type Właściwość type ujścia działania kopiowania musi być ustawiona na SqlSink. Tak
preCopyScript Ta właściwość określa zapytanie SQL dla działania kopiowania do uruchomienia przed zapisaniem danych w programie SQL Server. Jest wywoływany tylko raz na przebieg kopiowania. Za pomocą tej właściwości można wyczyścić wstępnie załadowane dane. Nie.
tableOption Określa, czy automatycznie utworzyć tabelę ujścia, jeśli nie istnieje na podstawie schematu źródłowego. Automatyczne tworzenie tabeli nie jest obsługiwane, gdy ujście określa procedurę składowaną. Dozwolone wartości to: none (wartość domyślna), autoCreate. Nie.
sqlWriterStoredProcedureName Nazwa procedury składowanej, która definiuje sposób stosowania danych źródłowych do tabeli docelowej.
Ta procedura składowana jest wywoływana na partię. W przypadku operacji uruchamianych tylko raz i nie ma nic wspólnego z danymi źródłowymi, na przykład usuń lub obcinaj, użyj preCopyScript właściwości .
Zobacz przykład z wywołania procedury składowanej z ujścia SQL.
Nie.
storedProcedureTableTypeParameterName Nazwa parametru typu tabeli określona w procedurze składowanej. Nie.
sqlWriterTableType Nazwa typu tabeli, która ma być używana w procedurze składowanej. Działanie kopiowania sprawia, że dane są przenoszone w tabeli tymczasowej z tym typem tabeli. Kod procedury składowanej może następnie scalić dane kopiowane z istniejącymi danymi. Nie.
storedProcedureParameters Parametry procedury składowanej.
Dozwolone wartości to pary nazw i wartości. Nazwy i wielkość liter parametrów muszą być zgodne z nazwami i wielkością parametrów procedury składowanej.
Nie.
writeBatchSize Liczba wierszy do wstawienia do tabeli SQL na partię.
Dozwolone wartości to liczby całkowite dla liczby wierszy. Domyślnie usługa dynamicznie określa odpowiedni rozmiar partii na podstawie rozmiaru wiersza.
Nie.
writeBatchTimeout Czas oczekiwania na ukończenie operacji wstawiania, operacji upsert i procedury składowanej przed przekroczeniem limitu czasu.
Dozwolone wartości są dla przedziału czasu. Przykładem jest "00:30:00" przez 30 minut. Jeśli żadna wartość nie jest określona, limit czasu jest domyślnie ustawiona na "00:30:00".
Nie.
 maxConcurrent Połączenie ions Górny limit połączeń współbieżnych ustanowionych z magazynem danych podczas uruchamiania działania. Określ wartość tylko wtedy, gdy chcesz ograniczyć połączenia współbieżne.  Nr
WriteBehavior Określ zachowanie zapisu dla działania kopiowania w celu załadowania danych do bazy danych programu SQL Server.
Dozwolona wartość to Insert i Upsert. Domyślnie usługa używa wstawiania do ładowania danych.
Nie.
upsert Ustawienia Określ grupę ustawień zachowania zapisu.
Zastosuj, gdy opcja WriteBehavior ma wartość Upsert.
Nie.
W obszarze upsertSettings:
useTempDB Określ, czy chcesz użyć globalnej tabeli tymczasowej, czy tabeli fizycznej jako tabeli tymczasowej dla operacji upsert.
Domyślnie usługa używa globalnej tabeli tymczasowej jako tabeli tymczasowej. wartość to true.
Nie.
interimSchemaName Określ schemat tymczasowy do tworzenia tabeli tymczasowej, jeśli jest używana tabela fizyczna. Uwaga: użytkownik musi mieć uprawnienia do tworzenia i usuwania tabeli. Domyślnie tabela tymczasowa będzie współdzielić ten sam schemat co tabela ujścia.
Zastosuj, gdy opcja useTempDB to False.
Nie.
keys Określ nazwy kolumn dla unikatowej identyfikacji wierszy. Można użyć pojedynczego klucza lub serii kluczy. Jeśli nie zostanie określony, używany jest klucz podstawowy. Nie.

Przykład 1. Dołączanie danych

"activities":[
    {
        "name": "CopyToSQLServer",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<SQL Server output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SqlSink",
                "tableOption": "autoCreate",
                "writeBatchSize": 100000
            }
        }
    }
]

Przykład 2: Wywoływanie procedury składowanej podczas kopiowania

Dowiedz się więcej na stronie Wywoływanie procedury składowanej z ujścia SQL.

"activities":[
    {
        "name": "CopyToSQLServer",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<SQL Server output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SqlSink",
                "sqlWriterStoredProcedureName": "CopyTestStoredProcedureWithParameters",
                "storedProcedureTableTypeParameterName": "MyTable",
                "sqlWriterTableType": "MyTableType",
                "storedProcedureParameters": {
                    "identifier": { "value": "1", "type": "Int" },
                    "stringData": { "value": "str1" }
                }
            }
        }
    }
]

Przykład 3. Dane upsert

"activities":[
    {
        "name": "CopyToSQLServer",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<SQL Server output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SqlSink",
                "tableOption": "autoCreate",
                "writeBehavior": "upsert",
                "upsertSettings": {
                    "useTempDB": true,
                    "keys": [
                        "<column name>"
                    ]
                },
            }
        }
    }
]

Równoległa kopia z bazy danych SQL

Łącznik programu SQL Server w działaniu kopiowania zapewnia wbudowane partycjonowanie danych w celu równoległego kopiowania danych. Opcje partycjonowania danych można znaleźć na karcie Źródło działania kopiowania.

Zrzut ekranu przedstawiający opcje partycji

Po włączeniu kopii partycjonowanej działanie kopiowania uruchamia zapytania równoległe względem źródła programu SQL Server w celu załadowania danych według partycji. Stopień równoległy jest kontrolowany przez parallelCopies ustawienie działania kopiowania. Jeśli na przykład ustawiono parallelCopies wartość cztery, usługa jednocześnie generuje i uruchamia cztery zapytania na podstawie określonej opcji partycji i ustawień, a każde zapytanie pobiera część danych z programu SQL Server.

Zaleca się włączenie kopiowania równoległego z partycjonowaniem danych, szczególnie w przypadku ładowania dużej ilości danych z programu SQL Server. Poniżej przedstawiono sugerowane konfiguracje dla różnych scenariuszy. Podczas kopiowania danych do magazynu danych opartego na plikach zaleca się zapisywanie w folderze jako wielu plików (tylko określ nazwę folderu), w tym przypadku wydajność jest lepsza niż zapisywanie w jednym pliku.

Scenariusz Sugerowane ustawienia
Pełne ładowanie z dużej tabeli z partycjami fizycznymi. Opcja partycji: fizyczne partycje tabeli.

Podczas wykonywania usługa automatycznie wykrywa partycje fizyczne i kopiuje dane według partycji.

Aby sprawdzić, czy tabela ma partycję fizyczną, czy nie, możesz odwołać się do tego zapytania.
Pełne ładowanie z dużej tabeli, bez partycji fizycznych, podczas gdy z liczbą całkowitą lub kolumną datetime na potrzeby partycjonowania danych. Opcje partycji: partycja zakresu dynamicznego.
Kolumna partycji (opcjonalnie): określ kolumnę używaną do partycjonowania danych. Jeśli nie zostanie określona, zostanie użyta kolumna klucza podstawowego.
Górna granica partycji i dolna granica partycji (opcjonalnie): określ, czy chcesz określić krok partycji. Nie dotyczy to filtrowania wierszy w tabeli. Wszystkie wiersze w tabeli zostaną podzielone na partycje i skopiowane. Jeśli nie zostanie określony, działanie kopiowania automatycznie wykrywa wartości i może zająć dużo czasu w zależności od wartości MIN i MAX. Zaleca się podanie górnej granicy i dolnej granicy.

Jeśli na przykład kolumna partycji "ID" zawiera wartości z zakresu od 1 do 100, a dolna granica zostanie ustawiona na wartość 20, a górna granica to 80, z kopią równoległą jako 4, usługa pobiera dane według 4 partycji — identyfikatory w zakresie <=20, [21, 50], [51, 80] i >=81.
Załaduj dużą ilość danych przy użyciu zapytania niestandardowego, bez partycji fizycznych, natomiast z liczbą całkowitą lub kolumną date/datetime na potrzeby partycjonowania danych. Opcje partycji: partycja zakresu dynamicznego.
Zapytanie: SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>.
Kolumna partycji: określ kolumnę używaną do partycjonowania danych.
Górna granica partycji i dolna granica partycji (opcjonalnie): określ, czy chcesz określić krok partycji. Nie jest to przeznaczone do filtrowania wierszy w tabeli, wszystkie wiersze w wyniku zapytania zostaną partycjonowane i skopiowane. Jeśli nie zostanie określony, działanie kopiowania automatycznie wykrywa wartość.

Podczas wykonywania usługa zastępuje ?AdfRangePartitionColumnName rzeczywistą nazwę kolumny i zakresy wartości dla każdej partycji i wysyła je do programu SQL Server.
Jeśli na przykład kolumna partycji "ID" zawiera wartości z zakresu od 1 do 100, a dolna granica zostanie ustawiona jako 20 i górna granica jako 80, z kopią równoległą jako 4, usługa pobiera dane według 4 partycji — identyfikatory w zakresie <=20, [21, 50], [51, 80] i >=81.

Poniżej przedstawiono więcej przykładowych zapytań dla różnych scenariuszy:
1. Wykonaj zapytanie względem całej tabeli:
SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition
2. Kwerenda z tabeli z zaznaczeniem kolumny i dodatkowymi filtrami klauzuli where:
SELECT <column_list> FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>
3. Kwerenda z podzapytaniami:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>
4. Kwerenda z partycją w podzapytaniu:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition) AS T

Najlepsze rozwiązania dotyczące ładowania danych z opcją partycji:

  1. Wybierz charakterystyczną kolumnę jako kolumnę partycji (np. klucz podstawowy lub unikatowy klucz), aby uniknąć niesymetryczności danych.
  2. Jeśli tabela ma wbudowaną partycję, użyj opcji partycji "Partycje fizyczne tabeli", aby uzyskać lepszą wydajność.
  3. Jeśli używasz środowiska Azure Integration Runtime do kopiowania danych, możesz ustawić większe wartości "Integracja danych Units (DIU)" (>4) w celu korzystania z większej liczby zasobów obliczeniowych. Sprawdź odpowiednie scenariusze.
  4. "Stopień równoległości kopiowania" steruje numerami partycji, ustawiając tę liczbę zbyt dużą, czasami boli wydajność, zaleca się ustawienie tej liczby jako (DIU lub liczba węzłów własnego środowiska IR) * (od 2 do 4).

Przykład: pełne ładowanie z dużej tabeli z partycjami fizycznymi

"source": {
    "type": "SqlSource",
    "partitionOption": "PhysicalPartitionsOfTable"
}

Przykład: zapytanie z partycją zakresu dynamicznego

"source": {
    "type": "SqlSource",
    "query": "SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>",
    "partitionOption": "DynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<partition_column_name>",
        "partitionUpperBound": "<upper_value_of_partition_column (optional) to decide the partition stride, not as data filter>",
        "partitionLowerBound": "<lower_value_of_partition_column (optional) to decide the partition stride, not as data filter>"
    }
}

Przykładowe zapytanie do sprawdzania partycji fizycznej

SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id 
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id 
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id 
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id 
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id 
WHERE s.name='[your schema]' AND t.name = '[your table name]'

Jeśli tabela ma partycję fizyczną, zostanie wyświetlona wartość "HasPartition" jako "tak", jak pokazano poniżej.

Wynik zapytania SQL

Najlepsze rozwiązanie dotyczące ładowania danych do programu SQL Server

Podczas kopiowania danych do programu SQL Server może być wymagane inne zachowanie zapisu:

  • Dołącz: Moje dane źródłowe mają tylko nowe rekordy.
  • Upsert: Moje dane źródłowe mają zarówno wstawki, jak i aktualizacje.
  • Zastąp: Chcę ponownie załadować całą tabelę wymiarów za każdym razem.
  • Pisanie za pomocą logiki niestandardowej: potrzebuję dodatkowego przetwarzania przed ostatecznym wstawieniem do tabeli docelowej.

Zapoznaj się z odpowiednimi sekcjami, aby dowiedzieć się, jak skonfigurować i najlepsze rozwiązania.

Dołączanie danych

Dołączanie danych to domyślne zachowanie tego łącznika ujścia programu SQL Server. usługa wykonuje operację wstawiania zbiorczego w celu wydajnego zapisu w tabeli. Źródło i ujście można skonfigurować odpowiednio w działaniu kopiowania.

Wykonywanie operacji upsert dla danych

działanie Kopiuj teraz obsługuje natywne ładowanie danych do tabeli tymczasowej bazy danych, a następnie aktualizowanie danych w tabeli ujścia, jeśli klucz istnieje i w przeciwnym razie wstaw nowe dane. Aby dowiedzieć się więcej na temat ustawień upsert w działaniach kopiowania, zobacz SQL Server jako ujście.

Zastąp całą tabelę

Właściwość preCopyScript można skonfigurować w ujściu działania kopiowania. W takim przypadku dla każdego uruchomionego działania kopiowania usługa uruchamia skrypt jako pierwszy. Następnie uruchamia kopię, aby wstawić dane. Aby na przykład zastąpić całą tabelę najnowszymi danymi, określ skrypt, aby najpierw usunąć wszystkie rekordy przed zbiorczym załadowaniem nowych danych ze źródła.

Zapisywanie danych przy użyciu logiki niestandardowej

Kroki zapisywania danych za pomocą logiki niestandardowej są podobne do kroków opisanych w sekcji Dane upsert. Jeśli musisz zastosować dodatkowe przetwarzanie przed ostatecznym wstawieniem danych źródłowych do tabeli docelowej, możesz załadować do tabeli przejściowej, a następnie wywołać działanie procedury składowanej lub wywołać procedurę składowaną w ujściu działania kopiowania, aby zastosować dane.

Wywoływanie procedury składowanej z ujścia SQL

Podczas kopiowania danych do bazy danych programu SQL Server można również skonfigurować i wywołać procedurę składowaną określoną przez użytkownika z dodatkowymi parametrami w każdej partii tabeli źródłowej. Funkcja procedury składowanej korzysta z parametrów wartości tabeli. Należy pamiętać, że usługa automatycznie opakowuje procedurę składowaną we własnej transakcji, więc każda transakcja utworzona wewnątrz procedury składowanej stanie się transakcją zagnieżdżona i może mieć wpływ na obsługę wyjątków.

Procedurę składowaną można użyć, gdy wbudowane mechanizmy kopiowania nie obsługują tego celu. Przykładem jest zastosowanie dodatkowego przetwarzania przed ostatecznym wstawieniem danych źródłowych do tabeli docelowej. Niektóre dodatkowe przykłady przetwarzania to, gdy chcesz scalić kolumny, wyszukać dodatkowe wartości i wstawić je do więcej niż jednej tabeli.

W poniższym przykładzie pokazano, jak za pomocą procedury składowanej wykonać operację upsert w tabeli w bazie danych programu SQL Server. Załóżmy, że dane wejściowe i tabela Marketing ujścia mają trzy kolumny: ProfileID, State i Category. Wykonaj upsert na podstawie kolumny ProfileID i zastosuj ją tylko do określonej kategorii o nazwie "ProductA".

  1. W bazie danych zdefiniuj typ tabeli o takiej samej nazwie jak sqlWriterTableType. Schemat typu tabeli jest taki sam jak schemat zwracany przez dane wejściowe.

    CREATE TYPE [dbo].[MarketingType] AS TABLE(
        [ProfileID] [varchar](256) NOT NULL,
        [State] [varchar](256) NOT NULL,
        [Category] [varchar](256) NOT NULL
    )
    
  2. W bazie danych zdefiniuj procedurę składowaną o takiej samej nazwie jak sqlWriterStoredProcedureName. Obsługuje dane wejściowe z określonego źródła i scala je z tabelą wyjściową. Nazwa parametru typu tabeli w procedurze składowanej jest taka sama jak nazwa_tabeli zdefiniowana w zestawie danych.

    CREATE PROCEDURE spOverwriteMarketing @Marketing [dbo].[MarketingType] READONLY, @category varchar(256)
    AS
    BEGIN
    MERGE [dbo].[Marketing] AS target
    USING @Marketing AS source
    ON (target.ProfileID = source.ProfileID and target.Category = @category)
    WHEN MATCHED THEN
        UPDATE SET State = source.State
    WHEN NOT MATCHED THEN
        INSERT (ProfileID, State, Category)
        VALUES (source.ProfileID, source.State, source.Category);
    END
    
  3. Zdefiniuj sekcję ujścia SQL w działaniu kopiowania w następujący sposób:

    "sink": {
        "type": "SqlSink",
        "sqlWriterStoredProcedureName": "spOverwriteMarketing",
        "storedProcedureTableTypeParameterName": "Marketing",
        "sqlWriterTableType": "MarketingType",
        "storedProcedureParameters": {
            "category": {
                "value": "ProductA"
            }
        }
    }
    

Właściwości przepływu mapowania danych

Podczas przekształcania danych w przepływie mapowania danych można odczytywać i zapisywać w tabelach z bazy danych programu SQL Server. Aby uzyskać więcej informacji, zobacz przekształcanie źródła i przekształcanie ujścia w przepływach danych mapowania.

Uwaga

Aby uzyskać dostęp do lokalnego programu SQL Server, musisz użyć usługi Azure Data Factory lub zarządzanej sieci wirtualnej obszaru roboczego usługi Synapse przy użyciu prywatnego punktu końcowego. Zapoznaj się z tym samouczkiem , aby uzyskać szczegółowe instrukcje.

Przekształcanie źródła

W poniższej tabeli wymieniono właściwości obsługiwane przez źródło programu SQL Server. Te właściwości można edytować na karcie Opcje źródła.

Nazwa/nazwisko opis Wymagania Dozwolone wartości Właściwość skryptu przepływu danych
Table W przypadku wybrania pozycji Tabela jako danych wejściowych przepływ danych pobiera wszystkie dane z tabeli określonej w zestawie danych. Nie. - -
Query Jeśli wybierzesz pozycję Zapytanie jako dane wejściowe, określ zapytanie SQL, aby pobrać dane ze źródła, które zastępuje dowolną tabelę, którą określisz w zestawie danych. Korzystanie z zapytań to doskonały sposób na zmniejszenie liczby wierszy na potrzeby testowania lub wyszukiwania.

Klauzula Order By nie jest obsługiwana, ale można ustawić pełną instrukcję SELECT FROM. Można również użyć funkcji tabeli zdefiniowanych przez użytkownika. select * from udfGetData() is a UDF in SQL that zwraca tabelę, której można użyć w przepływie danych.
Przykład zapytania: Select * from MyTable where customerId > 1000 and customerId < 2000
Nie. String zapytanie
Rozmiar partii Określ rozmiar partii do dzielenia dużych danych na odczyty. Nie. Integer batchSize
Poziom izolacji Wybierz jeden z następujących poziomów izolacji:
- Odczyt zatwierdzony
- Odczyt niezatwierdzony (ustawienie domyślne)
- Powtarzalny odczyt
-Serializacji
- Brak (ignoruj poziom izolacji)
Nie. READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZACJI
BRAK
Isolationlevel
Włączanie wyodrębniania przyrostowego Użyj tej opcji, aby poinformować usługę ADF o przetwarzaniu tylko wierszy, które uległy zmianie od czasu ostatniego wykonania potoku. Nie. - -
Kolumna daty przyrostowej W przypadku korzystania z funkcji wyodrębniania przyrostowego należy wybrać kolumnę daty/godziny, która ma być używana jako znak wodny w tabeli źródłowej. Nie. - -
Włączanie natywnego przechwytywania danych zmian (wersja zapoznawcza) Użyj tej opcji, aby poinformować usługę ADF o przetwarzaniu tylko danych różnicowych przechwyconych przez technologię przechwytywania zmian SQL od czasu ostatniego wykonania potoku. Dzięki tej opcji dane różnicowe, w tym wstawianie wierszy, aktualizowanie i usuwanie, zostaną załadowane automatycznie bez konieczności wprowadzania przyrostowej kolumny dat. Przed użyciem tej opcji w usłudze ADF należy włączyć przechwytywanie zmian danych w programie SQL Server. Aby uzyskać więcej informacji na temat tej opcji w usłudze ADF, zobacz przechwytywanie danych zmian natywnych. Nie. - -
Rozpocznij czytanie od początku Ustawienie tej opcji przy użyciu wyodrębniania przyrostowego spowoduje, że usługa ADF odczytuje wszystkie wiersze podczas pierwszego wykonywania potoku z włączonym wyodrębnieniem przyrostowym. Nie. - -

Napiwek

Wspólne wyrażenie tabeli (CTE) w języku SQL nie jest obsługiwane w trybie zapytania przepływu danych mapowania, ponieważ wymaganie wstępne korzystania z tego trybu polega na tym, że zapytania mogą być używane w klauzuli FROM zapytania SQL, ale nie można tego zrobić. Aby użyć CTK, należy utworzyć procedurę składowaną przy użyciu następującego zapytania:

CREATE PROC CTESP @query nvarchar(max)
AS
BEGIN
EXECUTE sp_executesql @query;
END

Następnie użyj trybu Procedury składowanej w transformacji źródłowej przepływu danych mapowania i ustaw @query przykładowy .with CTE as (select 'test' as a) select * from CTE Następnie można użyć ctEs zgodnie z oczekiwaniami.

Przykład skryptu źródłowego programu SQL Server

W przypadku używania programu SQL Server jako typu źródłowego skojarzony skrypt przepływu danych to:

source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from MYTABLE',
    format: 'query') ~> SQLSource

Przekształcenie ujścia

W poniższej tabeli wymieniono właściwości obsługiwane przez ujście programu SQL Server. Te właściwości można edytować na karcie Opcje ujścia.

Nazwa/nazwisko opis Wymagania Dozwolone wartości Właściwość skryptu przepływu danych
Metoda aktualizacji Określ, jakie operacje są dozwolone w miejscu docelowym bazy danych. Ustawieniem domyślnym jest zezwalanie tylko na wstawianie.
Aby zaktualizować, upsert lub usunąć wiersze, do tagowania wierszy dla tych akcji jest wymagane przekształcenie alter wiersza.
Tak true lub false możliwe do usunięcia
możliwość wstawienia
Aktualizowana
upsertable
Kolumny kluczy W przypadku aktualizacji, operacji upserts i delete należy ustawić kolumny kluczy, aby określić, który wiersz ma zostać zmieniony.
Nazwa kolumny wybranej jako klucz będzie używana w ramach kolejnej aktualizacji, upsert, delete. W związku z tym należy wybrać kolumnę, która istnieje w mapowaniu ujścia.
Nie. Tablica keys
Pomijanie zapisywania kolumn kluczy Jeśli nie chcesz zapisywać wartości w kolumnie klucza, wybierz pozycję "Pomiń pisanie kolumn kluczy". Nie. true lub false skipKeyWrites
Akcja tabeli Określa, czy należy ponownie utworzyć lub usunąć wszystkie wiersze z tabeli docelowej przed zapisem.
- Brak: żadna akcja nie zostanie wykonana w tabeli.
- Utwórz ponownie: tabela zostanie porzucona i utworzona ponownie. Wymagane w przypadku dynamicznego tworzenia nowej tabeli.
- Obcinanie: wszystkie wiersze z tabeli docelowej zostaną usunięte.
Nie. true lub false Odtworzyć
truncate
Rozmiar partii Określ liczbę wierszy zapisywanych w każdej partii. Większe rozmiary partii zwiększają kompresję i optymalizację pamięci, ale ryzykuj z wyjątków pamięci podczas buforowania danych. Nie. Integer batchSize
Skrypty pre-sql i post Określ wielowierszowe skrypty SQL, które będą wykonywane przed (wstępne przetwarzanie) i po (przetwarzaniu po przetwarzaniu) dane są zapisywane w bazie danych ujścia. Nie. String preSQLs
postSQLs

Napiwek

  1. Zaleca się podzielenie pojedynczych skryptów wsadowych z wieloma poleceniami na wiele partii.
  2. W ramach partii można uruchamiać tylko instrukcje języka DDL (Data Definition Language) i Języka manipulowania danymi (DML), które zwracają prostą liczbę aktualizacji. Dowiedz się więcej na temat wykonywania operacji wsadowych

Przykładowy skrypt ujścia programu SQL Server

W przypadku używania programu SQL Server jako typu ujścia skojarzony skrypt przepływu danych to:

IncomingStream sink(allowSchemaDrift: true,
    validateSchema: false,
    deletable:false,
    insertable:true,
    updateable:true,
    upsertable:true,
    keys:['keyColumn'],
    format: 'table',
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> SQLSink

Mapowanie typów danych dla programu SQL Server

Podczas kopiowania danych z i do programu SQL Server następujące mapowania są używane z typów danych programu SQL Server do tymczasowych typów danych usługi Azure Data Factory. Potoki usługi Synapse, które implementują usługę Data Factory, używają tych samych mapowań. Aby dowiedzieć się, jak działanie kopiowania mapuje schemat źródłowy i typ danych na ujście, zobacz Mapowania schematu i typu danych.

Typ danych programu SQL Server Typ danych tymczasowych usługi Data Factory
bigint Int64
dane binarne Bajt[]
bitowe Wartość logiczna
char Ciąg, Znak[]
data DateTime
Datetime DateTime
datetime2 DateTime
Datetimeoffset DateTimeOffset
Dziesiętne Dziesiętne
ATRYBUT FILESTREAM (varbinary(max)) Bajt[]
Liczba zmiennoprzecinkowa Liczba rzeczywista
obraz Bajt[]
int Int32
pieniędzy Dziesiętne
nchar Ciąg, Znak[]
Ntext Ciąg, Znak[]
numeryczne Dziesiętne
nvarchar Ciąg, Znak[]
rzeczywiste Pojedynczy
Rowversion Bajt[]
smalldatetime DateTime
smallint Int16
smallmoney Dziesiętne
Sql_variant Objekt
text Ciąg, Znak[]
time przedział_czasu
timestamp Bajt[]
tinyint Int16
uniqueidentifier Identyfikator GUID
varbinary Bajt[]
varchar Ciąg, Znak[]
xml String

Uwaga

W przypadku typów danych mapujących na typ tymczasowy dziesiętny obecnie działanie Kopiuj obsługuje precyzję do 28. Jeśli masz dane, które wymagają precyzji większej niż 28, rozważ przekonwertowanie na ciąg w zapytaniu SQL.

Podczas kopiowania danych z programu SQL Server przy użyciu usługi Azure Data Factory typ danych bitowych jest mapowany na typ danych tymczasowych wartości logicznych. Jeśli masz dane, które muszą być przechowywane jako typ danych bitowych, użyj zapytań z funkcją T-SQL CAST lub KONWERTUJ.

Właściwości działania wyszukiwania

Aby dowiedzieć się więcej o właściwościach, sprawdź działanie Wyszukiwania.

Właściwości działania GetMetadata

Aby dowiedzieć się więcej o właściwościach, sprawdź działanie GetMetadata

Korzystanie z funkcji Always Encrypted

Podczas kopiowania danych z/do programu SQL Server z funkcją Always Encrypted wykonaj następujące kroki:

  1. Przechowywanie klucza głównego kolumny (CMK) w usłudze Azure Key Vault. Dowiedz się więcej na temat konfigurowania funkcji Always Encrypted przy użyciu usługi Azure Key Vault

  2. Upewnij się, że udzielono dostępu do magazynu kluczy, w którym jest przechowywany klucz główny kolumny (CMK ). Zapoznaj się z tym artykułem , aby uzyskać wymagane uprawnienia.

  3. Utwórz połączoną usługę w celu nawiązania połączenia z bazą danych SQL i włącz funkcję "Always Encrypted" przy użyciu tożsamości zarządzanej lub jednostki usługi.

Uwaga

Funkcja Sql Server Always Encrypted obsługuje poniższe scenariusze:

  1. Magazyny danych źródła lub ujścia używają tożsamości zarządzanej lub jednostki usługi jako typu uwierzytelniania dostawcy kluczy.
  2. Magazyny danych źródła i ujścia używają tożsamości zarządzanej jako typu uwierzytelniania dostawcy kluczy.
  3. Magazyny danych źródła i ujścia używają tej samej jednostki usługi co typ uwierzytelniania dostawcy kluczy.

Uwaga

Obecnie funkcja Always Encrypted programu SQL Server jest obsługiwana tylko w przypadku przekształcania źródła w przepływach danych mapowania.

Przechwytywanie danych zmian natywnych

Usługa Azure Data Factory może obsługiwać natywne funkcje przechwytywania danych zmian dla programów SQL Server, Azure SQL DB i Azure SQL MI. Zmienione dane, w tym wstawianie wierszy, aktualizowanie i usuwanie w magazynach SQL, można automatycznie wykrywać i wyodrębniać przez przepływ danych mapowania usługi ADF. Bez użycia kodu w przepływie danych mapowania użytkownicy mogą łatwo osiągnąć scenariusz replikacji danych z magazynów SQL, dołączając bazę danych jako magazyn docelowy. Co więcej, użytkownicy mogą również tworzyć dowolną logikę przekształcania danych między w celu osiągnięcia przyrostowego scenariusza ETL z magazynów SQL.

Upewnij się, że nazwa potoku i działania pozostaje niezmieniona, aby punkt kontrolny mógł być rejestrowany przez usługę ADF w celu automatycznego pobierania zmienionych danych z ostatniego uruchomienia. Jeśli zmienisz nazwę potoku lub nazwę działania, punkt kontrolny zostanie zresetowany, co prowadzi do rozpoczęcia od początku lub pobrania zmian od teraz w następnym uruchomieniu. Jeśli chcesz zmienić nazwę potoku lub nazwę działania, ale nadal zachowaj punkt kontrolny, aby automatycznie uzyskać zmienione dane z ostatniego uruchomienia, użyj własnego klucza punktu kontrolnego w działaniu przepływu danych, aby to osiągnąć.

Podczas debugowania potoku ta funkcja działa tak samo. Pamiętaj, że punkt kontrolny zostanie zresetowany podczas odświeżania przeglądarki podczas uruchamiania debugowania. Po zadowoleniu z wyniku potoku z przebiegu debugowania możesz przejść do przodu, aby opublikować i wyzwolić potok. W momencie, gdy po raz pierwszy wyzwalasz opublikowany potok, automatycznie uruchamia się ponownie od początku lub pobiera zmiany od teraz.

W sekcji monitorowania zawsze masz możliwość ponownego uruchomienia potoku. W tym przypadku zmienione dane są zawsze przechwytywane z poprzedniego punktu kontrolnego wybranego przebiegu potoku.

Przykład 1:

Jeśli bezpośrednio utworzysz łańcuch przekształcenia źródłowego, do którego odwołujesz się do zestawu danych z włączoną usługą SQL CDC z przekształceniem ujścia, do którego odwołujesz się do bazy danych w przepływie mapowania, zmiany wprowadzone w źródle SQL zostaną automatycznie zastosowane do docelowej bazy danych, dzięki czemu można łatwo uzyskać scenariusz replikacji danych między bazami danych. Możesz użyć metody aktualizacji w transformacji ujścia, aby wybrać, czy chcesz zezwolić na wstawianie, zezwalanie na aktualizowanie lub zezwalanie na usuwanie w docelowej bazie danych. Przykładowy skrypt w przepływie danych mapowania jest następujący.

source(output(
		id as integer,
		name as string
	),
	allowSchemaDrift: true,
	validateSchema: false,
	enableNativeCdc: true,
	netChanges: true,
	skipInitialLoad: false,
	isolationLevel: 'READ_UNCOMMITTED',
	format: 'table') ~> source1
source1 sink(allowSchemaDrift: true,
	validateSchema: false,
	deletable:true,
	insertable:true,
	updateable:true,
	upsertable:true,
	keys:['id'],
	format: 'table',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true,
	errorHandlingOption: 'stopOnFirstError') ~> sink1

Przykład 2:

Jeśli chcesz włączyć scenariusz ETL zamiast replikacji danych między bazą danych za pośrednictwem usługi SQL CDC, możesz użyć wyrażeń w przepływie danych mapowania, w tym isInsert(1), isUpdate(1) i isDelete(1) w celu odróżnienia wierszy z różnymi typami operacji. Poniżej przedstawiono jeden z przykładowych skryptów mapowania przepływu danych na wyprowadzanie jednej kolumny z wartością: 1, aby wskazać wstawione wiersze, 2, aby wskazać zaktualizowane wiersze i 3, aby wskazać usunięte wiersze dla przekształceń podrzędnych w celu przetwarzania danych różnicowych.

source(output(
		id as integer,
		name as string
	),
	allowSchemaDrift: true,
	validateSchema: false,
	enableNativeCdc: true,
	netChanges: true,
	skipInitialLoad: false,
	isolationLevel: 'READ_UNCOMMITTED',
	format: 'table') ~> source1
source1 derive(operationType = iif(isInsert(1), 1, iif(isUpdate(1), 2, 3))) ~> derivedColumn1
derivedColumn1 sink(allowSchemaDrift: true,
	validateSchema: false,
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> sink1

Znane ograniczenie:

Rozwiązywanie problemów z połączeniem

  1. Skonfiguruj wystąpienie programu SQL Server tak, aby akceptowały połączenia zdalne. Uruchom program SQL Server Management Studio, kliknij prawym przyciskiem myszy serwer i wybierz polecenie Właściwości. Wybierz pozycję Połączenie ions z listy i zaznacz pole wyboru Zezwalaj na połączenia zdalne z tym serwerem.

    Włącz połączenia zdalne

    Aby uzyskać szczegółowe instrukcje, zobacz Konfigurowanie opcji konfiguracji serwera dostępu zdalnego.

  2. Uruchom program SQL Server Configuration Manager. Rozwiń węzeł Konfiguracja sieci programu SQL Server dla żądanego wystąpienia i wybierz pozycję Protokoły dla serwera MSSQLSERVER. Protokoły są wyświetlane w okienku po prawej stronie. Włącz protokół TCP/IP, klikając prawym przyciskiem myszy tcp /IP i wybierając pozycję Włącz.

    Włączanie protokołu TCP/IP

    Aby uzyskać więcej informacji i alternatywne sposoby włączania protokołu TCP/IP, zobacz Włączanie lub wyłączanie protokołu sieciowego serwera.

  3. W tym samym oknie kliknij dwukrotnie tcp /IP , aby uruchomić okno Właściwości protokołu TCP/IP.

  4. Przejdź do karty Adresy IP. Przewiń w dół, aby wyświetlić sekcję IPAll . Zapisz port TCP. Wartość domyślna to 1433.

  5. Utwórz regułę zapory systemu Windows na maszynie, aby zezwolić na ruch przychodzący przez ten port.

  6. Sprawdź połączenie: aby nawiązać połączenie z programem SQL Server przy użyciu w pełni kwalifikowanej nazwy, użyj programu SQL Server Management Studio z innej maszyny. Może to być na przykład "<machine>.<domain>.corp.<company>.com,1433".

Aby uzyskać listę magazynów danych obsługiwanych jako źródła i ujścia działania kopiowania, zobacz Obsługiwane magazyny danych.