Kopírování a transformace dat ve službě Azure SQL Database pomocí služby Azure Data Factory nebo Azure Synapse Analytics

PLATÍ PRO: Azure Data Factory Azure Synapse Analytics

Tip

Vyzkoušejte si službu Data Factory v Microsoft Fabric, řešení pro analýzy typu all-in-one pro podniky. Microsoft Fabric zahrnuje všechno od přesunu dat až po datové vědy, analýzy v reálném čase, business intelligence a vytváření sestav. Přečtěte si, jak začít používat novou zkušební verzi zdarma.

Tento článek popisuje, jak pomocí aktivity kopírování v kanálech Azure Data Factory nebo Azure Synapse kopírovat data z a do Azure SQL Database a jak pomocí Tok dat transformovat data ve službě Azure SQL Database. Další informace najdete v úvodním článku pro Azure Data Factory nebo Azure Synapse Analytics.

Podporované funkce

Tento konektor Azure SQL Database je podporovaný pro následující funkce:

Podporované funkce IR Spravovaný privátní koncový bod
aktivita Copy (zdroj/jímka) (1) (2)
Mapování toku dat (zdroj/jímka) (1)
Aktivita Lookup (1) (2)
Aktivita GetMetadata (1) (2)
Aktivita skriptu (1) (2)
Aktivita uložená procedura (1) (2)

(1) Prostředí Azure Integration Runtime (2) Místní prostředí Integration Runtime

Pro aktivita Copy podporuje tento konektor Azure SQL Database tyto funkce:

  • Kopírování dat pomocí ověřování SQL a ověřování tokenu aplikace Microsoft Entra s instančním objektem nebo spravovanými identitami pro prostředky Azure
  • Jako zdroj načítá data pomocí dotazu SQL nebo uložené procedury. Můžete také zvolit paralelní kopírování ze zdroje služby Azure SQL Database. Podrobnosti najdete v části Paralelní kopírování z databáze SQL.
  • Jako jímka automaticky vytváří cílovou tabulku, pokud neexistuje na základě zdrojového schématu; připojení dat k tabulce nebo vyvolání uložené procedury s vlastní logikou během kopírování

Pokud používáte bezserverovou úroveň Služby Azure SQL Database, mějte na paměti, že když je server pozastavený, spuštění aktivity se nezdaří, a nečeká, až bude automatické obnovení připravené. Můžete přidat opakování aktivity nebo zřetězit další aktivity, abyste měli jistotu, že je server aktivní při skutečném spuštění.

Důležité

Pokud kopírujete data pomocí prostředí Azure Integration Runtime, nakonfigurujte pravidlo brány firewall na úrovni serveru tak, aby ke serveru mohly přistupovat služby Azure. Pokud kopírujete data pomocí místního prostředí Integration Runtime, nakonfigurujte bránu firewall tak, aby povolila odpovídající rozsah IP adres. Tento rozsah zahrnuje IP adresu počítače, která se používá pro připojení ke službě Azure SQL Database.

Začínáme

K provedení aktivita Copy s kanálem můžete použít jeden z následujících nástrojů nebo sad SDK:

Vytvoření propojené služby Azure SQL Database pomocí uživatelského rozhraní

Pomocí následujících kroků vytvořte propojenou službu Azure SQL Database v uživatelském rozhraní webu Azure Portal.

  1. Přejděte na kartu Správa v pracovním prostoru Azure Data Factory nebo Synapse a vyberte Propojené služby a pak klikněte na Nový:

  2. Vyhledejte SQL a vyberte konektor služby Azure SQL Database.

    Vyberte konektor azure SQL Database.

  3. Nakonfigurujte podrobnosti o službě, otestujte připojení a vytvořte novou propojenou službu.

    Snímek obrazovky s konfigurací propojené služby Azure SQL Database

podrobnosti o konfiguraci Připojení oru

Následující části obsahují podrobnosti o vlastnostech, které slouží k definování entit kanálu Služby Azure Data Factory nebo Synapse specifických pro konektor služby Azure SQL Database.

Vlastnosti propojené služby

Pro propojenou službu Azure SQL Database se podporují tyto obecné vlastnosti:

Vlastnost Popis Povinní účastníci
type Vlastnost typu musí být nastavena na AzureSqlDatabase. Ano
připojovací řetězec Zadejte informace potřebné pro připojení k instanci služby Azure SQL Database pro vlastnost connectionString .
Do služby Azure Key Vault můžete také vložit heslo nebo instanční klíč. Pokud se jedná o ověřování SQL, vytáhněte password konfiguraci z připojovací řetězec. Další informace najdete v příkladu JSON, který následuje za tabulkou a přihlašovacími údaji k úložišti ve službě Azure Key Vault.
Ano
azureCloudType Pro ověřování instančního objektu zadejte typ cloudového prostředí Azure, ke kterému je zaregistrovaná vaše aplikace Microsoft Entra.
Povolené hodnoty jsou AzurePublic, AzureChina, AzureUsGovernment a AzureGermany. Ve výchozím nastavení se používá cloudové prostředí datové továrny nebo kanálu Synapse.
No
alwaysEncrypted Nastavení Zadejte informace o alwaysencryptedsettings , které jsou potřeba k povolení funkce Always Encrypted k ochraně citlivých dat uložených na SQL Serveru pomocí spravované identity nebo instančního objektu. Další informace najdete v příkladu JSON podle tabulky a použití oddílu Always Encrypted . Pokud není zadáno, výchozí nastavení always encrypted je zakázané. No
connectVia Tento modul runtime integrace slouží k připojení k úložišti dat. Pokud se vaše úložiště dat nachází v privátní síti, můžete použít prostředí Azure Integration Runtime nebo místní prostředí Integration Runtime. Pokud není zadaný, použije se výchozí prostředí Azure Integration Runtime. No

Informace o různých typech ověřování najdete v následujících částech o konkrétních vlastnostech, požadavcích a ukázkách JSON:

Tip

Pokud dojde k chybě s kódem chyby UserErrorFailedTo Připojení ToSqlServer a zobrazí se zpráva typu Limit relace pro databázi XXX a bylo dosaženo, přidejte Pooling=false do svého připojovací řetězec a zkuste to znovu. Pooling=false doporučuje se také pro nastavení propojené služby typu SHIR (Self Hosted Integration Runtime ). Sdružování a další parametry připojení lze přidat jako nové názvy parametrů a hodnoty v části Další vlastnosti připojení ve formuláři pro vytvoření propojené služby.

Ověřování SQL

Chcete-li použít typ ověřování ověřování SQL, zadejte obecné vlastnosti popsané v předchozí části.

Příklad: Použití ověřování SQL

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlDatabase",
        "typeProperties": {
            "connectionString": "Data Source=tcp:<servername>.database.windows.net,1433;Initial Catalog=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Příklad: heslo ve službě Azure Key Vault

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlDatabase",
        "typeProperties": {
            "connectionString": "Data Source=tcp:<servername>.database.windows.net,1433;Initial Catalog=<databasename>;User ID=<username>@<servername>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                },
                "secretName": "<secretName>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Příklad: Použití funkce Always Encrypted

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlDatabase",
        "typeProperties": {
            "connectionString": "Data Source=tcp:<servername>.database.windows.net,1433;Initial Catalog=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
        },
        "alwaysEncryptedSettings": {
            "alwaysEncryptedAkvAuthType": "ServicePrincipal",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Ověřování instančního objektu

Pokud chcete použít ověřování instančního objektu, kromě obecných vlastností popsaných v předchozí části zadejte následující vlastnosti:

Vlastnost Popis Povinní účastníci
servicePrincipalId Zadejte ID klienta aplikace. Ano
servicePrincipalKey Zadejte klíč aplikace. Označte toto pole jako SecureString , abyste ho mohli bezpečně uložit, nebo odkazovat na tajný kód uložený ve službě Azure Key Vault. Ano
tenant Zadejte informace o tenantovi, například název domény nebo ID tenanta, pod kterým se vaše aplikace nachází. Načtěte ho tak, že nainstalujete myš v pravém horním rohu webu Azure Portal. Ano

Musíte také postupovat podle následujících kroků:

  1. Na webu Azure Portal vytvořte aplikaci Microsoft Entra. Poznamenejte si název aplikace a následující hodnoty, které definují propojenou službu:

    • ID aplikace
    • Klíč aplikace
    • ID tenanta
  2. Pokud jste to ještě neudělali, zřiďte správce Microsoft Entra pro váš server na webu Azure Portal. Správce Microsoft Entra musí být uživatel Microsoft Entra nebo skupina Microsoft Entra, ale nemůže to být instanční objekt. Tento krok se provede tak, že v dalším kroku můžete pomocí identity Microsoft Entra vytvořit uživatele databáze s omezením pro instanční objekt.

  3. Vytvořte uživatele databáze s omezením pro instanční objekt. Připojení do databáze nebo do které chcete kopírovat data pomocí nástrojů, jako je SQL Server Management Studio, s identitou Microsoft Entra, která má alespoň oprávnění ALTER ANY USER. Spusťte následující příkaz T-SQL:

    CREATE USER [your application name] FROM EXTERNAL PROVIDER;
    
  4. Udělte instančnímu objektu potřebná oprávnění jako obvykle pro uživatele SQL nebo jiné uživatele. Spusťte následující kód. Další možnosti najdete v tomto dokumentu.

    ALTER ROLE [role name] ADD MEMBER [your application name];
    
  5. Nakonfigurujte propojenou službu Azure SQL Database v pracovním prostoru Azure Data Factory nebo Synapse.

Příklad propojené služby, který používá ověřování instančního objektu

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlDatabase",
        "typeProperties": {
            "connectionString": "Data Source=tcp:<servername>.database.windows.net,1433;Initial Catalog=<databasename>;Connection Timeout=30",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Ověřování spravované identity přiřazené systémem

Pracovní prostor datové továrny nebo Synapse je možné přidružit ke spravované identitě přiřazené systémem pro prostředky Azure, která představuje službu při ověřování v jiných prostředcích v Azure. Tuto spravovanou identitu můžete použít pro ověřování azure SQL Database. Určený pracovní prostor továrny nebo Synapse může přistupovat k datům z databáze nebo do databáze a kopírovat je pomocí této identity.

Pokud chcete použít ověřování spravované identity přiřazené systémem, zadejte obecné vlastnosti popsané v předchozí části a postupujte podle těchto kroků.

  1. Pokud jste to ještě neudělali, zřiďte správce Microsoft Entra pro váš server na webu Azure Portal. Správcem Microsoft Entra může být uživatel Microsoft Entra nebo skupina Microsoft Entra. Pokud skupině udělíte roli správce spravované identity, přeskočte kroky 3 a 4. Správce má úplný přístup k databázi.

  2. Vytvořte uživatele databáze s omezením pro spravovanou identitu. Připojení do databáze nebo do které chcete kopírovat data pomocí nástrojů, jako je SQL Server Management Studio, s identitou Microsoft Entra, která má alespoň oprávnění ALTER ANY USER. Spusťte následující příkaz T-SQL:

    CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
    
  3. Udělte spravované identitě potřebná oprávnění jako obvykle pro uživatele SQL a další uživatele. Spusťte následující kód. Další možnosti najdete v tomto dokumentu.

    ALTER ROLE [role name] ADD MEMBER [your_resource_name];
    
  4. Nakonfigurujte propojenou službu Azure SQL Database.

Příklad

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlDatabase",
        "typeProperties": {
            "connectionString": "Data Source=tcp:<servername>.database.windows.net,1433;Initial Catalog=<databasename>;Connection Timeout=30"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Ověřování spravované identity přiřazené uživatelem

Pracovní prostor datové továrny nebo Synapse je možné přidružit ke spravovaným identitám přiřazeným uživatelem, které představují službu při ověřování v jiných prostředcích v Azure. Tuto spravovanou identitu můžete použít pro ověřování azure SQL Database. Určený pracovní prostor továrny nebo Synapse může přistupovat k datům z databáze nebo do databáze a kopírovat je pomocí této identity.

Pokud chcete použít ověřování spravované identity přiřazené uživatelem, kromě obecných vlastností popsaných v předchozí části zadejte následující vlastnosti:

Vlastnost Popis Povinní účastníci
přihlašovací údaje Jako objekt přihlašovacích údajů zadejte spravovanou identitu přiřazenou uživatelem. Ano

Musíte také postupovat podle následujících kroků:

  1. Pokud jste to ještě neudělali, zřiďte správce Microsoft Entra pro váš server na webu Azure Portal. Správcem Microsoft Entra může být uživatel Microsoft Entra nebo skupina Microsoft Entra. Pokud skupině udělíte spravovanou identitu přiřazenou uživatelem roli správce, přeskočte kroky 3. Správce má úplný přístup k databázi.

  2. Vytvořte uživatele databáze s omezením pro spravovanou identitu přiřazenou uživatelem. Připojení do databáze nebo do které chcete kopírovat data pomocí nástrojů, jako je SQL Server Management Studio, s identitou Microsoft Entra, která má alespoň oprávnění ALTER ANY USER. Spusťte následující příkaz T-SQL:

    CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
    
  3. Vytvořte jednu nebo více spravovaných identit přiřazených uživatelem a udělte spravované identitě přiřazené uživatelem potřebná oprávnění jako obvykle pro uživatele SQL a další. Spusťte následující kód. Další možnosti najdete v tomto dokumentu.

    ALTER ROLE [role name] ADD MEMBER [your_resource_name];
    
  4. Přiřaďte k datové továrně jednu nebo více spravovaných identit přiřazených uživatelem a vytvořte přihlašovací údaje pro každou spravovanou identitu přiřazenou uživatelem.

  5. Nakonfigurujte propojenou službu Azure SQL Database.

Příklad:

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlDatabase",
        "typeProperties": {
            "connectionString": "Data Source=tcp:<servername>.database.windows.net,1433;Initial Catalog=<databasename>;Connection Timeout=30",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Vlastnosti datové sady

Úplný seznam oddílů a vlastností dostupných pro definování datových sad najdete v tématu Datové sady.

Pro datovou sadu Azure SQL Database se podporují následující vlastnosti:

Vlastnost Popis Povinní účastníci
type Vlastnost typu datové sady musí být nastavená na AzureSqlTable. Ano
schema Název schématu Ne pro zdroj, Ano pro jímku
table Název tabulky nebo zobrazení Ne pro zdroj, Ano pro jímku
tableName Název tabulky nebo zobrazení se schématem Tato vlastnost je podporována pro zpětnou kompatibilitu. Pro nové úlohy použijte schema a table. Ne pro zdroj, Ano pro jímku

Příklad vlastností datové sady

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

Vlastnosti aktivity kopírování

Úplný seznam oddílů a vlastností dostupných pro definování aktivit najdete v tématu Kanály. Tato část obsahuje seznam vlastností podporovaných zdrojem a jímkou služby Azure SQL Database.

Azure SQL Database jako zdroj

Tip

Pokud chcete efektivně načítat data z Azure SQL Database pomocí dělení dat, přečtěte si další informace z paralelní kopie z databáze SQL.

Pokud chcete kopírovat data ze služby Azure SQL Database, podporují se ve zdrojové části aktivity kopírování následující vlastnosti:

Vlastnost Popis Povinní účastníci
type Vlastnost typu zdroje aktivity kopírování musí být nastavena na AzureSqlSource. Typ SqlSource je stále podporován kvůli zpětné kompatibilitě. Ano
sqlReaderQuery Tato vlastnost používá vlastní dotaz SQL ke čtení dat. Příklad: select * from MyTable. No
sqlReaderStoredProcedureName Název uložené procedury, která čte data ze zdrojové tabulky. Poslední příkaz SQL musí být příkaz SELECT v uložené proceduře. No
storedProcedureParameters Parametry uložené procedury.
Povolené hodnoty jsou dvojice názvů nebo hodnot. Názvy a velikost písmen parametrů musí odpovídat názvům a velikostem písmen parametrů uložené procedury.
No
Isolationlevel Určuje chování uzamčení transakce pro zdroj SQL. Povolené hodnoty jsou: ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Snapshot. Pokud není zadáno, použije se výchozí úroveň izolace databáze. Další podrobnosti najdete v tomto dokumentu . No
partitionOptions Určuje možnosti dělení dat, které se používají k načtení dat z Azure SQL Database.
Povolené hodnoty jsou: None (výchozí), PhysicalPartitionsOfTable a DynamicRange.
Pokud je povolená možnost oddílu (tj. ne None), stupeň paralelismu pro souběžné načítání dat z Azure SQL Database se řídí parallelCopies nastavením aktivity kopírování.
No
oddíl Nastavení Zadejte skupinu nastavení pro dělení dat.
Použít, pokud možnost oddílu není None.
No
V části partitionSettings:
partitionColumnName Zadejte název zdrojového sloupce v celočíselném čísle nebo typu date/datetime (int, smallint, bigint, smalldatetimedate, , datetime, datetime2nebo datetimeoffset), který bude použit dělením rozsahu pro paralelní kopírování. Pokud není zadaný, index nebo primární klíč tabulky se automaticky rozdetekuje a použije se jako sloupec oddílu.
Použít, pokud je DynamicRangemožnost oddílu . Pokud k načtení zdrojových dat použijete dotaz, připojte se ?AdfDynamicRangePartitionCondition do klauzule WHERE. Příklad najdete v části Paralelní kopírování z databáze SQL.
No
partitionUpperBound Maximální hodnota sloupce oddílu pro rozdělení rozsahu oddílů. Tato hodnota se používá k rozhodování o kroku oddílu, nikoli k filtrování řádků v tabulce. Všechny řádky v tabulce nebo výsledku dotazu se rozdělí a zkopírují. Pokud není zadáno, aktivita kopírování automaticky rozpozná hodnotu.
Použít, pokud je DynamicRangemožnost oddílu . Příklad najdete v části Paralelní kopírování z databáze SQL.
No
partitionLowerBound Minimální hodnota sloupce oddílu pro rozdělení rozsahu oddílů. Tato hodnota se používá k rozhodování o kroku oddílu, nikoli k filtrování řádků v tabulce. Všechny řádky v tabulce nebo výsledku dotazu se rozdělí a zkopírují. Pokud není zadáno, aktivita kopírování automaticky rozpozná hodnotu.
Použít, pokud je DynamicRangemožnost oddílu . Příklad najdete v části Paralelní kopírování z databáze SQL.
No

Je třeba počítat s následujícím:

  • Pokud je pro AzureSqlSource zadán sqlReaderQuery, aktivita kopírování spustí tento dotaz na zdroj služby Azure SQL Database, aby získala data. Uloženou proceduru můžete také zadat zadáním sqlReaderStoredProcedureName a storedProcedureParameters , pokud uložená procedura přebírá parametry.
  • Při použití uložené procedury ve zdroji k načtení dat si všimněte, že uložená procedura je navržena jako vrácení jiného schématu, pokud je předána jiná hodnota parametru, může dojít k selhání nebo může dojít k neočekávanému výsledku při importu schématu z uživatelského rozhraní nebo při kopírování dat do databáze SQL s automatickým vytvořením tabulky.

Příklad dotazu SQL

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

Příklad uložené procedury

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

Definice uložené procedury

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

Azure SQL Database jako jímka

Tip

Přečtěte si další informace o podporovaných chováních při zápisu, konfiguracích a osvědčených postupech z osvědčených postupů pro načítání dat do služby Azure SQL Database.

Pokud chcete zkopírovat data do služby Azure SQL Database, podporují se v části jímky aktivity kopírování následující vlastnosti:

Vlastnost Popis Povinní účastníci
type Vlastnost typu jímky aktivity kopírování musí být nastavena na AzureSqlSink. Typ SqlSink je stále podporován kvůli zpětné kompatibilitě. Ano
preCopyScript Zadejte dotaz SQL pro aktivitu kopírování, který se má spustit před zápisem dat do služby Azure SQL Database. Vyvolá se pouze jednou za každé spuštění kopírování. Tato vlastnost slouží k vyčištění předem načtených dat. No
tableOption Určuje, zda se má automaticky vytvořit tabulka jímky, pokud neexistuje na základě zdrojového schématu.
Automatické vytváření tabulek není podporováno, pokud jímka určuje uloženou proceduru.
Povolené hodnoty jsou: none (výchozí), autoCreate.
No
sqlWriterStoredProcedureName Název uložené procedury, která definuje, jak použít zdrojová data do cílové tabulky.
Tato uložená procedura se vyvolá na dávku. Pro operace, které běží pouze jednou a nemají nic společného se zdrojovými daty, například odstranit nebo zkrátit, použijte preCopyScript vlastnost.
Viz příklad volání uložené procedury z jímky SQL.
No
storedProcedureTableTypeParameterName Název parametru typu tabulky zadaného v uložené proceduře. No
sqlWriterTableType Název typu tabulky, který se má použít v uložené proceduře. Aktivita kopírování zpřístupní data přesunutá v dočasné tabulce s tímto typem tabulky. Kód uložené procedury pak může sloučit data, která se kopírují s existujícími daty. No
storedProcedureParameters Parametry uložené procedury.
Povolené hodnoty jsou dvojice názvů a hodnot. Názvy a velikost písmen parametrů musí odpovídat názvům a velikostem písmen parametrů uložené procedury.
No
writeBatchSize Početřádkůch
Povolená hodnota je celé číslo (počet řádků). Ve výchozím nastavení služba dynamicky určuje odpovídající velikost dávky na základě velikosti řádku.
No
writeBatchTimeout Doba čekání na dokončení operace vložení, upsertu a uložené procedury před vypršením časového limitu.
Povolené hodnoty jsou pro časový rozsah. Příkladem je 00:30:00 po dobu 30 minut. Pokud není zadána žádná hodnota, časový limit je výchozí hodnota 00:30:00.
No
disableMetricsCollection Služba shromažďuje metriky, jako jsou DTU služby Azure SQL Database pro optimalizaci výkonu kopírování a doporučení, která představují další hlavní přístup k databázi. Pokud máte obavy o toto chování, určete true , jestli chcete toto chování vypnout. Ne (výchozí hodnota je false)
 maxConcurrent Připojení ions Horní limit souběžných připojení vytvořených k úložišti dat během spuštění aktivity. Zadejte hodnotu pouze v případech, kdy chcete omezit souběžná připojení.  Ne
WriteBehavior Zadejte chování zápisu aktivity kopírování pro načtení dat do služby Azure SQL Database.
Povolená hodnota je Insert a Upsert. Ve výchozím nastavení služba používá k načtení dat vložení.
No
upsert Nastavení Zadejte skupinu nastavení pro chování zápisu.
Použít, pokud je Upsertmožnost WriteBehavior .
No
V části upsertSettings:
useTempDB Určete, zda se má jako dočasná tabulka pro upsert použít globální dočasná tabulka nebo fyzická tabulka.
Ve výchozím nastavení služba používá jako dočasnou tabulku globální dočasnou tabulku. hodnota je true.
No
interimSchemaName Zadejte dočasné schéma pro vytvoření dočasné tabulky, pokud se použije fyzická tabulka. Poznámka: Uživatel musí mít oprávnění k vytváření a odstraňování tabulek. Ve výchozím nastavení bude dočasná tabulka sdílet stejné schéma jako tabulka jímky.
Použít, pokud je Falseparametr useTempDB .
No
keys Zadejte názvy sloupců pro jedinečnou identifikaci řádků. Můžete použít jeden klíč nebo řadu klíčů. Pokud není zadaný, použije se primární klíč. No

Příklad 1: Připojení dat

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

Příklad 2: Vyvolání uložené procedury během kopírování

Další informace najdete v části Volání uložené procedury z jímky SQL.

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

Příklad 3: Upsert data

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

Paralelní kopírování z databáze SQL

Konektor Služby Azure SQL Database v aktivitě kopírování poskytuje integrované dělení dat pro paralelní kopírování dat. Možnosti dělení dat najdete na kartě Zdroj aktivity kopírování.

Snímek obrazovky s možnostmi oddílu

Když povolíte dělené kopírování, aktivita kopírování spouští paralelní dotazy na zdroj služby Azure SQL Database, aby načetla data podle oddílů. Paralelní stupeň se řídí parallelCopies nastavením aktivity kopírování. Pokud například nastavíte parallelCopies hodnotu čtyři, služba souběžně vygeneruje a spouští čtyři dotazy na základě zadané možnosti a nastavení oddílu a každý dotaz načte část dat z vaší služby Azure SQL Database.

Doporučujeme povolit paralelní kopírování s dělením dat, zejména pokud načítáte velké množství dat ze služby Azure SQL Database. Následující konfigurace jsou navržené pro různé scénáře. Při kopírování dat do souborového úložiště dat se doporučuje zapisovat do složky jako více souborů (zadat pouze název složky), v takovém případě je výkon lepší než zápis do jednoho souboru.

Scénář Navrhovaná nastavení
Úplné načtení z velké tabulky s fyzickými oddíly Možnost oddílu: Fyzické oddíly tabulky.

Během provádění služba automaticky rozpozná fyzické oddíly a kopíruje data podle oddílů.

Pokud chcete zkontrolovat, jestli tabulka obsahuje fyzický oddíl nebo ne, můžete odkazovat na tento dotaz.
Úplné načtení z velké tabulky bez fyzických oddílů, zatímco s celočíselnou nebo datetime sloupcem pro dělení dat. Možnosti oddílu: Oddíl dynamického rozsahu
Sloupec oddílu (volitelné): Zadejte sloupec použitý k dělení dat. Pokud není zadaný, použije se sloupec indexu nebo primárního klíče.
Horní mez oddílu a dolní mez oddílu (volitelné): Určete, jestli chcete určit krok oddílu. To není pro filtrování řádků v tabulce, všechny řádky v tabulce budou rozděleny a zkopírovány. Pokud není zadáno, aktivita kopírování automaticky rozpozná hodnoty.

Pokud má například sloupec oddílu ID hodnoty od 1 do 100 a dolní mez nastavíte jako 20 a horní mez jako 80, přičemž paralelní kopírování je 4, služba načte data o 4 oddílech – ID v rozsahu <=20, [21, 50], [51, 80] a >=81.
Načtěte velké množství dat pomocí vlastního dotazu bez fyzických oddílů, zatímco s celočíselnou nebo datem a datem a časem pro dělení dat. Možnosti oddílu: Oddíl dynamického rozsahu
Dotaz: SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>.
Sloupec oddílu: Zadejte sloupec použitý k rozdělení dat.
Horní mez oddílu a dolní mez oddílu (volitelné): Určete, jestli chcete určit krok oddílu. To není pro filtrování řádků v tabulce, všechny řádky ve výsledku dotazu budou rozděleny a zkopírovány. Pokud není zadáno, aktivita kopírování automaticky rozpozná hodnotu.

Během provádění služba nahradí ?AdfRangePartitionColumnName skutečný název sloupce a rozsahy hodnot pro každý oddíl a odešle do služby Azure SQL Database.
Pokud má například sloupec oddílu ID hodnoty od 1 do 100 a dolní mez nastavíte jako 20 a horní mez 80, přičemž paralelní kopírování je 4, služba načte data podle 4 oddílů v rozsahu <=20, [21, 50], [51, 80] a >=81.

Tady jsou další ukázkové dotazy pro různé scénáře:
1. Dotaz na celou tabulku:
SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition
2. Dotaz z tabulky s výběrem sloupce a dalšími filtry klauzule where:
SELECT <column_list> FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>
3. Dotaz s poddotazy:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>
4. Dotaz s oddílem v poddotazu:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition) AS T

Osvědčené postupy pro načtení dat s možností oddílu:

  1. Zvolte výrazný sloupec jako sloupec oddílu (například primární klíč nebo jedinečný klíč), abyste se vyhnuli nerovnoměrné distribuci dat.
  2. Pokud tabulka obsahuje předdefinovaný oddíl, použijte možnost oddílu Fyzické oddíly tabulky, abyste dosáhli lepšího výkonu.
  3. Pokud ke kopírování dat používáte Prostředí Azure Integration Runtime, můžete nastavit větší počet jednotek Integrace Dat (DIU) (>4) a využít tak více výpočetních prostředků. Zkontrolujte tam příslušné scénáře.
  4. "Stupeň paralelismu kopírování" řídí čísla oddílů, nastavení příliš velkého čísla někdy snižuje výkon, doporučujeme nastavit toto číslo jako (DIU nebo počet uzlů místního prostředí IR) * (2 až 4).

Příklad: Úplné načtení z velké tabulky s fyzickými oddíly

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

Příklad: Dotaz s oddílem dynamického rozsahu

"source": {
    "type": "AzureSqlSource",
    "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>"
    }
}

Ukázkový dotaz pro kontrolu fyzického oddílu

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]'

Pokud tabulka obsahuje fyzický oddíl, zobrazí se "HasPartition" jako "ano", například následující.

Výsledek dotazu SQL

Osvědčený postup při načítání dat do služby Azure SQL Database

Při kopírování dat do služby Azure SQL Database můžete vyžadovat jiné chování při zápisu:

  • Připojení: Zdrojová data mají pouze nové záznamy.
  • Upsert: Zdrojová data obsahují vložení i aktualizace.
  • Přepsat: Pokaždé chci znovu načíst celou tabulku dimenzí.
  • Psaní s vlastní logikou: Potřebuji další zpracování před posledním vložením do cílové tabulky.

Informace o konfiguraci služby a osvědčených postupů najdete v příslušných částech.

Připojení dat

Připojení dat je výchozím chováním tohoto konektoru jímky Azure SQL Database. služba provede hromadné vložení pro efektivní zápis do tabulky. Zdroj a jímku můžete odpovídajícím způsobem nakonfigurovat v aktivitě kopírování.

Upsert dat

aktivita Copy teď podporuje nativní načítání dat do dočasné tabulky databáze a následné aktualizace dat v tabulce jímky, pokud existuje klíč, a jinak vložit nová data. Další informace o nastavení upsertu v aktivitách kopírování najdete v Azure SQL Database jako jímce.

Přepsat celou tabulku

Vlastnost preCopyScript můžete nakonfigurovat v jímce aktivity kopírování. V tomto případě pro každou aktivitu kopírování, která se spouští, služba nejprve spustí skript. Potom spustí kopii pro vložení dat. Pokud chcete například přepsat celou tabulku nejnovějšími daty, zadejte skript, který nejprve odstraní všechny záznamy před hromadným načtením nových dat ze zdroje.

Zápis dat pomocí vlastní logiky

Postup zápisu dat s vlastní logikou je podobný krokům popsaným v části Upsert data . Pokud potřebujete použít dodatečné zpracování před posledním vložením zdrojových dat do cílové tabulky, můžete načíst do pracovní tabulky a pak vyvolat aktivitu uložené procedury nebo vyvolat uloženou proceduru v jímce aktivity kopírování, která použije data, nebo použít mapování Tok dat.

Vyvolání uložené procedury z jímky SQL

Při kopírování dat do služby Azure SQL Database můžete také nakonfigurovat a vyvolat uživatelem zadanou uloženou proceduru s dalšími parametry v každé dávce zdrojové tabulky. Funkce uložené procedury využívá parametry hodnot tabulky.

Uloženou proceduru můžete použít, když předdefinované mechanismy kopírování neslouží k účelu. Příkladem je, když chcete použít dodatečné zpracování před posledním vložením zdrojových dat do cílové tabulky. Některé další příklady zpracování jsou, když chcete sloučit sloupce, vyhledat další hodnoty a vložit do více než jedné tabulky.

Následující ukázka ukazuje, jak pomocí uložené procedury provést upsert do tabulky ve službě Azure SQL Database. Předpokládejme, že vstupní data a tabulka Marketing jímky mají tři sloupce: ProfileID, State a Category. Proveďte upsert založený na sloupci ProfileID a použijte ho pouze pro konkrétní kategorii s názvem ProductA.

  1. V databázi definujte typ tabulky se stejným názvem jako sqlWriterTableType. Schéma typu tabulky je stejné jako schéma vrácené vstupními daty.

    CREATE TYPE [dbo].[MarketingType] AS TABLE(
        [ProfileID] [varchar](256) NOT NULL,
        [State] [varchar](256) NOT NULL,
        [Category] [varchar](256) NOT NULL
    )
    
  2. V databázi definujte uloženou proceduru se stejným názvem jako sqlWriterStoredProcedureName. Zpracovává vstupní data ze zadaného zdroje a slučuje se do výstupní tabulky. Název parametru typu tabulky v uložené proceduře je stejný jako tableName definovaný v datové sadě.

    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. V kanálu Služby Azure Data Factory nebo Synapse definujte oddíl jímky SQL v aktivitě kopírování následujícím způsobem:

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

Při zápisu dat do služby Azure SQL Database pomocí uložené procedury jímka rozdělí zdrojová data do mini dávek, takže další dotaz v uložené proceduře se dá spustit několikrát. Pokud máte dotaz, aby se aktivita kopírování spustila před zápisem dat do služby Azure SQL Database, nedoporučuje se ji přidat do uložené procedury, přidat ji do pole Před kopírováním skriptu .

Mapování vlastností toku dat

Při transformaci dat při mapování toku dat můžete číst a zapisovat do tabulek z Azure SQL Database. Další informace najdete v tématu transformace zdroje a transformace jímky v mapování toků dat.

Transformace zdroje

Nastavení specifické pro Azure SQL Database jsou k dispozici v nástroji Karta Možnosti zdroje transformace zdroje

Vstup: Vyberte, jestli zdroj nasměrujete na tabulku (ekvivalent ) Select * from <table-name>nebo zadáte vlastní dotaz SQL.

Dotaz: Pokud ve vstupním poli vyberete Dotaz, zadejte dotaz SQL pro zdroj. Toto nastavení přepíše všechny tabulky, které jste zvolili v datové sadě. Klauzule Order By se tady nepodporují, ale můžete nastavit úplný příkaz SELECT FROM. Můžete také použít uživatelem definované funkce tabulek. select * from udfGetData() je UDF v SQL, který vrací tabulku. Tento dotaz vytvoří zdrojovou tabulku, kterou můžete použít ve svém toku dat. Použitídotazůch

Tip

Běžný výraz tabulky (CTE) v SQL není podporován v režimu dotazu mapování toku dat, protože předpokladem použití tohoto režimu je, že dotazy lze použít v klauzuli FROM dotazu SQL, ale CTE to neudělají. Pokud chcete používat CTE, musíte vytvořit uloženou proceduru pomocí následujícího dotazu:

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

Pak použijte režim Uložená procedura ve zdrojové transformaci mapování toku dat a nastavte @query podobný příklad with CTE as (select 'test' as a) select * from CTE. Pak můžete použít CTE podle očekávání.

Uložená procedura: Tuto možnost zvolte, pokud chcete vygenerovat projekce a zdrojová data z uložené procedury, která se spouští ze zdrojové databáze. Můžete zadat schéma, název procedury a parametry nebo kliknutím na Aktualizovat požádat službu, aby objevila schémata a názvy procedur. Potom můžete kliknutím na importovat všechny parametry procedury pomocí formuláře @paraName.

Uložená procedura

  • Příklad SQL: Select * from MyTable where customerId > 1000 and customerId < 2000
  • Parametrizovaný příklad SQL: "select * from {$tablename} where orderyear > {$year}"

Velikost dávky: Zadejte velikost dávky pro rozdělení velkých dat do čtení.

Úroveň izolace: Výchozí hodnota pro zdroje SQL v mapování toku dat je nepotvrzená. Úroveň izolace můžete změnit tady na jednu z těchto hodnot:

  • Přečteno potvrzeno
  • Nepotvrzené čtení
  • Opakovatelné čtení
  • Serializovatelný
  • Žádné (ignorovat úroveň izolace)

Úroveň izolace

Povolit přírůstkový extrahování: Pomocí této možnosti můžete službě ADF sdělit, aby zpracovávaly pouze řádky, které se od posledního spuštění kanálu změnily. Pokud chcete povolit přírůstkové extrakce s posunem schématu, zvolte tabulky založené na sloupcích přírůstkového nebo vodoznaku místo tabulek, které jsou povolené pro nativní zachytávání dat změn.

Přírůstkový sloupec: Při použití funkce přírůstkového extrakce musíte zvolit sloupec data a času nebo číselného sloupce, který chcete použít jako vodoznak ve zdrojové tabulce.

Povolit nativní zachytávání dat změn(Preview): Pomocí této možnosti můžete ADF sdělit, aby zpracovávala jenom rozdílová data zachycená technologií zachytávání dat změn SQL od posledního spuštění kanálu. S touto možností se rozdílová data včetně vložení, aktualizace a odstranění načtou automaticky bez nutnosti přírůstkového sloupce. Před použitím této možnosti v ADF musíte povolit zachytávání dat změn ve službě Azure SQL DB. Další informace o této možnosti v ADF najdete v nativním zachytávání dat změn.

Začněte číst od začátku: Nastavení této možnosti přírůstkovým extrahováním dá ADF pokyn ke čtení všech řádků při prvním spuštění kanálu se zapnutým přírůstkovým extrahováním.

Transformace jímky

Nastavení specifické pro Azure SQL Database jsou k dispozici na kartě Nastavení transformace jímky.

Metoda aktualizace: Určuje, jaké operace jsou povoleny v cíli databáze. Výchozí hodnota je povolit pouze vkládání. Pokud chcete aktualizovat, upsertovat nebo odstranit řádky, je pro tyto akce potřeba transformace alter-row. Pro aktualizace, upserty a odstranění je nutné nastavit klíčový sloupec nebo sloupce, aby bylo možné určit, který řádek se má změnit.

Klíčové sloupce

Název sloupce, který vyberete jako klíč, bude služba používat jako součást následné aktualizace, upsert, delete. Proto je nutné vybrat sloupec, který existuje v mapování jímky. Pokud chcete hodnotu do tohoto klíčového sloupce nezapsat, klikněte na Přeskočit psaní sloupců klíčů.

Můžete parametrizovat klíčový sloupec použitý tady pro aktualizaci cílové tabulky Azure SQL Database. Pokud máte více sloupců pro složený klíč, klikněte na Vlastní výraz a budete moct přidat dynamický obsah pomocí jazyka výrazu toku dat, který může obsahovat pole řetězců s názvy sloupců pro složený klíč.

Akce tabulky: Určuje, zda se mají před zápisem znovu vytvořit nebo odebrat všechny řádky z cílové tabulky.

  • Žádné: V tabulce se neprovede žádná akce.
  • Znovu vytvořte: Tabulka se přehodí a znovu vytvoří. Vyžaduje se při dynamickém vytváření nové tabulky.
  • Zkrácení: Odeberou se všechny řádky z cílové tabulky.

Velikost dávky: Určuje, kolik řádků se zapisuje v každém kontejneru. Větší velikosti dávek zlepšují kompresi a optimalizaci paměti, ale při ukládání dat do mezipaměti riskují výjimky z paměti.

Použití databáze TempDB: Ve výchozím nastavení bude služba používat globální dočasnou tabulku k ukládání dat v rámci procesu načítání. Alternativně můžete zrušit zaškrtnutí možnosti Použít databázi tempDB a místo toho požádat službu, aby ukládala dočasnou tabulku uchovávání v uživatelské databázi, která se nachází v databázi, která se používá pro tuto jímku.

Použití dočasné databáze

Skripty předběžného a post SQL: Zadejte víceřádkové skripty SQL, které se spustí před (předběžné zpracování) a po (po zpracování) zapisují do databáze jímky.

Snímek obrazovky zobrazující nastavení jímky s skripty předběžného a následného zpracování SQL

Tip

  1. Doporučujeme rozdělit jednotlivé dávkové skripty několika příkazy do několika dávek.
  2. Jako součást dávky je možné spustit pouze příkazy DDL (Data Definition Language) a DML (Data Manipulation Language), které vracejí jednoduchý počet aktualizací. Další informace o provádění dávkových operací

Zpracování chybového řádku

Při zápisu do Azure SQL Db může dojít k selhání určitých řádků dat kvůli omezením nastaveným cílem. Mezi běžné chyby patří:

  • Řetězcová nebo binární data by byla v tabulce zkrácena.
  • Hodnotu NULL nelze vložit do sloupce.
  • Příkaz INSERT byl v konfliktu s omezením CHECK.

Spuštění toku dat ve výchozím nastavení selže při první chybě, která se zobrazí. Můžete se rozhodnout pokračovat v chybě , která umožňuje dokončení toku dat, i když mají jednotlivé řádky chyby. Služba poskytuje různé možnosti, jak tyto řádky chyb zpracovat.

Potvrzení transakce: Zvolte, zda se vaše data zapisuje do jedné transakce nebo v dávkách. Jedna transakce bude poskytovat horší výkon, ale žádná zapsaná data nebudou viditelná ostatním, dokud se transakce nedokoní.

Odmítnutá data výstupu: Pokud je tato možnost povolená, můžete vypíšete řádky chyb do souboru CSV ve službě Azure Blob Storage nebo účtu Azure Data Lake Storage Gen2 podle vašeho výběru. Tím se zapíšou řádky chyb se třemi dalšími sloupci: operace SQL, jako je INSERT nebo UPDATE, kód chyby toku dat a chybová zpráva na řádku.

Nahlášení úspěchu při chybě: Pokud je tok dat povolený, označí se jako úspěšný i v případě, že jsou nalezeny řádky chyb.

Zpracování chybového řádku

Mapování datových typů pro Azure SQL Database

Když se data zkopírují z azure SQL Database nebo do služby Azure SQL Database, použijí se následující mapování z datových typů Azure SQL Database na dočasné datové typy služby Azure Data Factory. Stejná mapování používají funkce kanálu Synapse, která implementuje Přímo službu Azure Data Factory. Informace o tom, jak aktivita kopírování mapuje zdrojové schéma a datový typ na jímku, najdete v tématu Mapování schématu a datového typu.

Datový typ Azure SQL Database Dočasný datový typ služby Data Factory
bigint Int64
binární Bajt[]
bitové Logická hodnota
char Řetězec, znak[]
datum DateTime
Datum a čas DateTime
datetime2 DateTime
Datetimeoffset DateTimeOffset
Desetinné číslo Desetinné číslo
ATRIBUT FILESTREAM (varbinary(max)) Bajt[]
Float Hodnota s dvojitou přesností
image Bajt[]
int Int32
Peníze Desetinné číslo
Nchar Řetězec, znak[]
Ntext Řetězec, znak[]
numerické Desetinné číslo
Nvarchar Řetězec, znak[]
real Jeden
Rowversion Bajt[]
Smalldatetime DateTime
smallint Int16
Smallmoney Desetinné číslo
Sql_variant Object
text Řetězec, znak[]
čas TimeSpan
časové razítko Bajt[]
tinyint Byte
Uniqueidentifier Guid
Varbinary Bajt[]
varchar Řetězec, znak[]
xml String

Poznámka:

U datových typů mapovaných na dočasný typ Decimal aktuálně aktivita Copy podporuje přesnost až 28. Pokud máte data s přesností větší než 28, zvažte převod na řetězec v dotazu SQL.

Vlastnosti aktivity vyhledávání

Podrobnosti o vlastnostech najdete v aktivitě Vyhledávání.

Vlastnosti aktivity GetMetadata

Podrobnosti o vlastnostech najdete v aktivitě GetMetadata.

Použití funkce Always Encrypted

Při kopírování dat z nebo do služby Azure SQL Database s funkcí Always Encrypted postupujte následovně:

  1. Uložte hlavní klíč sloupce (CMK) ve službě Azure Key Vault. Další informace o konfiguraci funkce Always Encrypted pomocí služby Azure Key Vault

  2. Ujistěte se, že máte přístup k trezoru klíčů, ve kterém je uložený hlavní klíč sloupce (CMK ). Požadovaná oprávnění najdete v tomto článku .

  3. Vytvořte propojenou službu pro připojení k databázi SQL a povolte funkci Always Encrypted pomocí spravované identity nebo instančního objektu.

Poznámka:

Azure SQL Database Always Encrypted podporuje následující scénáře:

  1. Úložiště dat zdroje nebo jímky používají spravovanou identitu nebo instanční objekt jako typ ověřování zprostředkovatele klíčů.
  2. Úložiště dat zdrojového i jímky používají spravovanou identitu jako typ ověřování zprostředkovatele klíče.
  3. Úložiště dat zdroje i jímky používají stejný instanční objekt jako typ ověřování zprostředkovatele klíčů.

Poznámka:

Azure SQL Database Always Encrypted se v současné době podporuje pouze pro transformaci zdroje při mapování toků dat.

Nativní zachytávání dat změn

Azure Data Factory může podporovat nativní možnosti zachytávání dat změn pro SQL Server, Azure SQL DB a Azure SQL MI. Změněná data, včetně vložení, aktualizace a odstranění řádků v úložištích SQL, je možné automaticky rozpoznat a extrahovat mapováním toku dat ADF. Bez zkušeností s kódem při mapování toku dat můžou uživatelé snadno dosáhnout scénáře replikace dat z úložišť SQL připojením databáze jako cílového úložiště. Kromě toho mohou uživatelé také vytvořit libovolnou logiku transformace dat mezi tím, aby dosáhli scénáře přírůstkového ETL z úložišť SQL.

Ujistěte se, že název kanálu a aktivity zůstane beze změny, aby bylo možné kontrolní bod zaznamenat službou ADF, abyste získali změněná data z posledního spuštění automaticky. Pokud změníte název kanálu nebo název aktivity, kontrolní bod se resetuje, což vás povede k zahájení nebo získání změn odteď v dalším spuštění. Pokud chcete změnit název kanálu nebo název aktivity, ale přesto zachovat kontrolní bod, abyste získali změněná data z posledního spuštění automaticky, použijte k tomu vlastní klíč kontrolního bodu v aktivitě toku dat.

Při ladění kanálu funguje tato funkce stejně. Mějte na paměti, že kontrolní bod se resetuje při aktualizaci prohlížeče během spuštění ladění. Jakmile budete spokojeni s výsledkem kanálu spuštění ladění, můžete pokračovat v publikování a aktivaci kanálu. V okamžiku, kdy poprvé aktivujete publikovaný kanál, se automaticky restartuje od začátku nebo od této chvíle dojde ke změnám.

V části monitorování máte vždy možnost znovu spustit kanál. Když to uděláte, změněná data se vždy zaznamenávají z předchozího kontrolního bodu vybraného kanálu.

Příklad 1:

Když přímo zřetězíte zdrojovou transformaci odkazovanou na datovou sadu s povolenou datovou sadou SQL CDC s transformací jímky odkazovanou na databázi v mapování toku dat, změny provedené ve zdroji SQL se automaticky použijí na cílovou databázi, abyste mohli snadno získat scénář replikace dat mezi databázemi. Metodu aktualizace v transformaci jímky můžete použít k výběru, jestli chcete povolit vložení, povolit aktualizaci nebo povolit odstranění v cílové databázi. Ukázkový skript mapování toku dat je následující.

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

Příklad 2:

Pokud chcete povolit scénář ETL místo replikace dat mezi databází prostřednictvím SLUŽBY CDC SQL, můžete použít výrazy v mapování toku dat včetně isInsert(1), isUpdate(1) a isDelete(1) k rozlišení řádků s různými typy operací. Následuje jeden z ukázkových skriptů pro mapování toku dat na odvození jednoho sloupce s hodnotou: 1 pro označení vložených řádků, 2 pro označení aktualizovaných řádků a 3 pro označení odstraněných řádků pro podřízené transformace pro zpracování rozdílových dat.

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

Známé omezení:

Seznam úložišť dat podporovaných jako zdroje a jímky aktivitou kopírování najdete v tématu Podporované úložiště a formáty dat.