Kopiera och transformera data i Azure SQL Database med hjälp av Azure Data Factory eller Azure Synapse Analytics

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

Den här artikeln beskriver hur du använder kopieringsaktivitet i Azure Data Factory- eller Azure Synapse-pipelines för att kopiera data från och till Azure SQL Database och använda Dataflöde för att transformera data i Azure SQL Database. Mer information finns i den inledande artikeln för Azure Data Factory eller Azure Synapse Analytics.

Funktioner som stöds

Den här Azure SQL-databasanslutningsappen stöds för följande funktioner:

Funktioner som stöds IR Hanterad privat slutpunkt
aktiviteten Kopiera (källa/mottagare) ① ②
Mappa dataflöde (källa/mottagare)
Sökningsaktivitet ① ②
GetMetadata-aktivitet ① ②
Skriptaktivitet ① ②
Lagrad proceduraktivitet ① ②

(1) Azure Integration Runtime (2) Lokalt installerad integrationskörning

För aktiviteten Kopiera stöder den här Azure SQL Database-anslutningsappen följande funktioner:

  • Kopiera data med hjälp av SQL-autentisering och Azure Active Directory (Azure AD) Programtokenautentisering med tjänstens huvudnamn eller hanterade identiteter för Azure-resurser.
  • Som källa hämtar du data med hjälp av en SQL-fråga eller en lagrad procedur. Du kan också välja att kopiera parallellt från en Azure SQL Database-källa. Mer information finns i avsnittet Parallellkopia från SQL Database.
  • Som mottagare skapar du automatiskt måltabellen om den inte finns baserat på källschemat. lägga till data i en tabell eller anropa en lagrad procedur med anpassad logik under kopieringen.

Om du använder Azure SQL serverlös databasnivå bör du observera att när servern har pausats misslyckas aktivitetskörningen i stället för att vänta på att det automatiska återuppta-programmet ska vara klart. Du kan lägga till ett nytt aktivitetsförsök eller länka ytterligare aktiviteter för att se till att servern är live vid den faktiska körningen.

Viktigt

Om du kopierar data med azure-integreringskörningen konfigurerar du en brandväggsregel på servernivå så att Azure-tjänster kan komma åt servern. Om du kopierar data med hjälp av en lokalt installerad integrationskörning konfigurerar du brandväggen så att den tillåter lämpligt IP-intervall. Det här intervallet omfattar datorns IP-adress som används för att ansluta till Azure SQL Database.

Kom igång

Om du vill utföra aktiviteten Kopiera med en pipeline kan du använda något av följande verktyg eller SDK:er:

Skapa en länkad Azure SQL Database-tjänst med hjälp av användargränssnittet

Använd följande steg för att skapa en länkad Azure SQL Database-tjänst i Azure Portal-användargränssnittet.

  1. Bläddra till fliken Hantera i din Azure Data Factory- eller Synapse-arbetsyta och välj Länkade tjänster och klicka sedan på Nytt:

  2. Sök efter SQL och välj anslutningsappen Azure SQL Database.

    Välj Azure SQL Databasanslutningsapp.

  3. Konfigurera tjänstinformationen, testa anslutningen och skapa den nya länkade tjänsten.

    Skärmbild av konfigurationen för den länkade tjänsten Azure SQL Database.

Konfigurationsinformation för anslutningsprogram

Följande avsnitt innehåller information om egenskaper som används för att definiera Azure Data Factory- eller Synapse-pipelineentiteter som är specifika för en Azure SQL Database-anslutningsapp.

Länkade tjänstegenskaper

Dessa allmänna egenskaper stöds för en länkad Azure SQL Database-tjänst:

Egenskap Beskrivning Krävs
typ Typegenskapen måste anges till AzureSqlDatabase. Ja
Connectionstring Ange information som behövs för att ansluta till Azure SQL Database-instansen för egenskapen connectionString.
Du kan också ange ett lösenord eller en nyckel för tjänstens huvudnamn i Azure Key Vault. Om det är SQL-autentisering hämtar du konfigurationen password från anslutningssträngen. Mer information finns i JSON-exemplet som följer tabellen och Store-autentiseringsuppgifterna i Azure Key Vault.
Ja
azureCloudType För autentisering med tjänstens huvudnamn anger du vilken typ av Azure-molnmiljö som ditt Azure AD program är registrerat i.
Tillåtna värden är AzurePublic, AzureChina, AzureUsGovernment och AzureGermany. Som standard används datafabriken eller Synapse-pipelinens molnmiljö.
Inga
alwaysEncryptedSettings Ange alwaysencryptedsettings-information som behövs för att aktivera Always Encrypted för att skydda känsliga data som lagras i SQL Server med hjälp av antingen hanterad identitet eller tjänstens huvudnamn. Mer information finns i JSON-exemplet som följer tabellen och avsnittet Använda Always Encrypted. Om inte anges inaktiveras standardinställningen alltid krypterad. Inga
connectVia Den här integrationskörningen används för att ansluta till datalagret. Du kan använda Azure Integration Runtime eller en lokalt installerad integrationskörning om datalagret finns i ett privat nätverk. Om inget anges används standardkörningen för Azure-integrering. Inga

För olika autentiseringstyper, se följande avsnitt om specifika egenskaper, krav respektive JSON-exempel:

Tips

Om du stöter på ett fel med felkoden "UserErrorFailedToConnectToSqlServer" och ett meddelande som "Sessionsgränsen för databasen är XXX och har nåtts" lägger du till Pooling=false i anslutningssträngen och försöker igen. Pooling=falserekommenderas också för konfiguration av länkad tjänst av typen SHIR (lokalt installerad Integration Runtime). Poolning och andra anslutningsparametrar kan läggas till som nya parameternamn och värden i avsnittet Ytterligare anslutningsegenskaper i formuläret för att skapa länkad tjänst.

SQL-autentisering

Om du vill använda autentiseringstypen SQL-autentisering anger du de allmänna egenskaper som beskrivs i föregående avsnitt.

Exempel: använda SQL-autentisering

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

Exempel: lösenord i 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"
        }
    }
}

Exempel: Använd 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"
        }
    }
}

Autentisering av tjänstens huvudnamn

Om du vill använda autentisering med tjänstens huvudnamn anger du, förutom de allmänna egenskaper som beskrivs i föregående avsnitt, följande egenskaper:

Egenskap Beskrivning Krävs
servicePrincipalId Ange programmets klient-ID. Ja
servicePrincipalKey Ange programmets nyckel. Markera det här fältet som SecureString för att lagra det på ett säkert sätt eller referera till en hemlighet som lagras i Azure Key Vault. Ja
tenant Ange information om klientorganisationen, till exempel domännamnet eller klientorganisations-ID:t, under vilket ditt program finns. Hämta den genom att hovra med musen i det övre högra hörnet av Azure Portal. Ja

Du måste också följa stegen nedan:

  1. Skapa ett Azure Active Directory-program från Azure Portal. Anteckna programnamnet och följande värden som definierar den länkade tjänsten:

    • Program-ID:t
    • Programnyckel
    • Klientorganisations-ID
  2. Etablera en Azure Active Directory-administratör för servern på Azure Portal om du inte redan har gjort det. Den Azure AD administratören måste vara en Azure AD användare eller Azure AD grupp, men det kan inte vara ett huvudnamn för tjänsten. Det här steget görs så att du i nästa steg kan använda en Azure AD-identitet för att skapa en oberoende databasanvändare för tjänstens huvudnamn.

  3. Skapa oberoende databasanvändare för tjänstens huvudnamn. Anslut till databasen från eller till vilken du vill kopiera data med hjälp av verktyg som SQL Server Management Studio, med en Azure AD identitet som har minst ALTER ANY USER-behörighet. Kör följande T-SQL:

    CREATE USER [your application name] FROM EXTERNAL PROVIDER;
    
  4. Bevilja tjänstens huvudnamn nödvändiga behörigheter som du normalt gör för SQL-användare eller andra. Kör följande kod. Fler alternativ finns i det här dokumentet.

    ALTER ROLE [role name] ADD MEMBER [your application name];
    
  5. Konfigurera en länkad Azure SQL Database-tjänst på en Azure Data Factory- eller Synapse-arbetsyta.

Exempel på länkad tjänst som använder autentisering av tjänstens huvudnamn

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

Systemtilldelad autentisering av hanterad identitet

En datafabrik eller Synapse-arbetsyta kan associeras med en systemtilldelad hanterad identitet för Azure-resurser som representerar tjänsten vid autentisering till andra resurser i Azure. Du kan använda den här hanterade identiteten för Azure SQL Database-autentisering. Den avsedda fabriken eller Synapse-arbetsytan kan komma åt och kopiera data från eller till databasen med hjälp av den här identiteten.

Om du vill använda systemtilldelad autentisering av hanterad identitet anger du de allmänna egenskaper som beskrivs i föregående avsnitt och följer dessa steg.

  1. Etablera en Azure Active Directory-administratör för servern på Azure Portal om du inte redan har gjort det. Den Azure AD administratören kan vara en Azure AD användare eller en Azure AD grupp. Om du beviljar gruppen med hanterad identitet en administratörsroll hoppar du över steg 3 och 4. Administratören har fullständig åtkomst till databasen.

  2. Skapa oberoende databasanvändare för den hanterade identiteten. Anslut till databasen från eller till vilken du vill kopiera data med hjälp av verktyg som SQL Server Management Studio, med en Azure AD identitet som har minst ALTER ANY USER-behörighet. Kör följande T-SQL:

    CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
    
  3. Bevilja den hanterade identiteten nödvändiga behörigheter som du normalt gör för SQL-användare och andra. Kör följande kod. Fler alternativ finns i det här dokumentet.

    ALTER ROLE [role name] ADD MEMBER [your_resource_name];
    
  4. Konfigurera en länkad Azure SQL Database-tjänst.

Exempel

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

Användartilldelad autentisering av hanterad identitet

En datafabrik eller Synapse-arbetsyta kan associeras med en användartilldelad hanterad identitet som representerar tjänsten vid autentisering till andra resurser i Azure. Du kan använda den här hanterade identiteten för Azure SQL Database-autentisering. Den avsedda fabriken eller Synapse-arbetsytan kan komma åt och kopiera data från eller till databasen med hjälp av den här identiteten.

Om du vill använda användartilldelad hanterad identitetsautentisering anger du, förutom de allmänna egenskaper som beskrivs i föregående avsnitt, följande egenskaper:

Egenskap Beskrivning Krävs
autentiseringsuppgifter Ange den användartilldelade hanterade identiteten som autentiseringsobjekt. Ja

Du måste också följa stegen nedan:

  1. Etablera en Azure Active Directory-administratör för servern på Azure Portal om du inte redan har gjort det. Den Azure AD administratören kan vara en Azure AD användare eller en Azure AD grupp. Om du ger gruppen med användartilldelad hanterad identitet en administratörsroll hoppar du över steg 3. Administratören har fullständig åtkomst till databasen.

  2. Skapa oberoende databasanvändare för den användartilldelade hanterade identiteten. Anslut till databasen från eller till vilken du vill kopiera data med hjälp av verktyg som SQL Server Management Studio, med en Azure AD identitet som har minst ALTER ANY USER-behörighet. Kör följande T-SQL:

    CREATE USER [your_resource_name] FROM EXTERNAL PROVIDER;
    
  3. Skapa en eller flera användartilldelade hanterade identiteter och ge den användartilldelade hanterade identiteten nödvändiga behörigheter som du normalt gör för SQL-användare och andra. Kör följande kod. Fler alternativ finns i det här dokumentet.

    ALTER ROLE [role name] ADD MEMBER [your_resource_name];
    
  4. Tilldela en eller flera användartilldelade hanterade identiteter till din datafabrik och skapa autentiseringsuppgifter för varje användartilldelad hanterad identitet.

  5. Konfigurera en länkad Azure SQL Database-tjänst.

Exempel:

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

Egenskaper för datamängd

En fullständig lista över avsnitt och egenskaper som är tillgängliga för att definiera datauppsättningar finns i Datauppsättningar.

Följande egenskaper stöds för Azure SQL Database-datauppsättning:

Egenskap Beskrivning Krävs
typ Typegenskapen för datauppsättningen måste anges till AzureSqlTable. Ja
schema Namnet på schemat. Nej för källa, Ja för mottagare
tabell Namnet på tabellen/vyn. Nej för källa, Ja för mottagare
tableName Namnet på tabellen/vyn med schemat. Den här egenskapen stöds för bakåtkompatibilitet. För ny arbetsbelastning använder du schema och table. Nej för källa, Ja för mottagare

Exempel på datauppsättningsegenskaper

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

Kopiera egenskaper för aktivitet

En fullständig lista över avsnitt och egenskaper som är tillgängliga för att definiera aktiviteter finns i Pipelines. Det här avsnittet innehåller en lista över egenskaper som stöds av Azure SQL Database-källa och mottagare.

Azure SQL Database som källa

Tips

Om du vill läsa in data från Azure SQL Database effektivt med hjälp av datapartitionering kan du läsa mer från Parallellkopiering från SQL-databas.

Om du vill kopiera data från Azure SQL Database stöds följande egenskaper i avsnittet kopieringsaktivitetskälla:

Egenskap Beskrivning Krävs
typ Typegenskapen för kopieringsaktivitetskällan måste anges till AzureSqlSource. Typen "SqlSource" stöds fortfarande för bakåtkompatibilitet. Ja
sqlReaderQuery Den här egenskapen använder den anpassade SQL-frågan för att läsa data. Ett exempel är select * from MyTable. Inga
sqlReaderStoredProcedureName Namnet på den lagrade proceduren som läser data från källtabellen. Den sista SQL-instruktionen måste vara en SELECT-instruktion i den lagrade proceduren. Inga
storedProcedureParameters Parametrar för den lagrade proceduren.
Tillåtna värden är namn- eller värdepar. Parametrarnas namn och hölje måste matcha namnen och höljet för parametrarna för den lagrade proceduren.
Inga
isolationLevel Anger transaktionslåsningsbeteendet för SQL-källan. De tillåtna värdena är: ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Snapshot. Om det inte anges används databasens standardisoleringsnivå. Mer information finns i det här dokumentet . Inga
partitionOptions Anger de alternativ för datapartitionering som används för att läsa in data från Azure SQL Database.
Tillåtna värden är: None (default), PhysicalPartitionsOfTable och DynamicRange.
När ett partitionsalternativ är aktiverat (dvs. inte None) styrs graden av parallellitet för att samtidigt läsa in data från en Azure SQL Database av parallelCopies inställningen för kopieringsaktiviteten.
Inga
partitionSettings Ange gruppen med inställningarna för datapartitionering.
Använd när partitionsalternativet inte Noneär .
Inga
Under partitionSettings:
partitionColumnName Ange namnet på källkolumnen i heltal eller datum/datetime-typ (int, , bigintsmallint, date, smalldatetime, datetime, datetime2eller datetimeoffset) som ska användas av intervallpartitionering för parallellkopiering. Om det inte anges identifieras indexet eller den primära nyckeln i tabellen automatiskt och används som partitionskolumn.
Använd när partitionsalternativet är DynamicRange. Om du använder en fråga för att hämta källdata kopplar ?AdfDynamicRangePartitionCondition du in WHERE-satsen. Ett exempel finns i avsnittet Parallellkopia från SQL Database .
Inga
partitionUpperBound Det maximala värdet för partitionskolumnen för partitionsintervalldelning. Det här värdet används för att bestämma partitionssteget, inte för att filtrera raderna i tabellen. Alla rader i tabellen eller frågeresultatet partitioneras och kopieras. Om inget anges identifierar kopieringsaktivitet automatiskt värdet.
Använd när partitionsalternativet är DynamicRange. Ett exempel finns i avsnittet Parallellkopia från SQL Database .
Inga
partitionLowerBound Minimivärdet för partitionskolumnen för partitionsintervalldelning. Det här värdet används för att bestämma partitionssteget, inte för att filtrera raderna i tabellen. Alla rader i tabellen eller frågeresultatet partitioneras och kopieras. Om inget anges identifierar kopieringsaktivitet automatiskt värdet.
Använd när partitionsalternativet är DynamicRange. Ett exempel finns i avsnittet Parallellkopia från SQL Database .
Inga

Observera följande punkter:

  • Om sqlReaderQuery har angetts för AzureSqlSource kör kopieringsaktiviteten den här frågan mot Azure SQL Database-källan för att hämta data. Du kan också ange en lagrad procedur genom att ange sqlReaderStoredProcedureName och storedProcedureParameters om den lagrade proceduren tar parametrar.
  • När du använder lagrad procedur i källan för att hämta data bör du tänka på att om den lagrade proceduren är utformad för att returnera ett annat schema när ett annat parametervärde skickas, kan det uppstå fel eller oväntade resultat när du importerar schema från användargränssnittet eller när du kopierar data till SQL Database med automatisk tabellskapande.

SQL-frågeexempel

"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>"
            }
        }
    }
]

Exempel på lagrad procedur

"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>"
            }
        }
    }
]

Definition av lagrad procedur

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 som mottagare

Tips

Läs mer om de skrivbeteenden, konfigurationer och metodtips som stöds från Bästa praxis för att läsa in data i Azure SQL Database.

Om du vill kopiera data till Azure SQL Database stöds följande egenskaper i avsnittet kopieringsaktivitetsmottagare:

Egenskap Beskrivning Krävs
typ Typegenskapen för kopieringsaktivitetsmottagaren måste anges till AzureSqlSink. Typen "SqlSink" stöds fortfarande för bakåtkompatibilitet. Ja
preCopyScript Ange en SQL-fråga för kopieringsaktiviteten som ska köras innan du skriver data till Azure SQL Database. Den anropas bara en gång per kopieringskörning. Använd den här egenskapen för att rensa förinlästa data. Inga
tableOption Anger om mottagartabellen ska skapas automatiskt om den inte finns baserat på källschemat.
Automatisk tabellskapande stöds inte när mottagaren anger lagrad procedur.
Tillåtna värden är: none (standard), autoCreate.
Inga
sqlWriterStoredProcedureName Namnet på den lagrade proceduren som definierar hur källdata ska tillämpas i en måltabell.
Den här lagrade proceduren anropas per batch. För åtgärder som bara körs en gång och som inte har något att göra med källdata, till exempel ta bort eller trunkera, använder du preCopyScript egenskapen .
Se exempel från Anropa en lagrad procedur från en SQL-mottagare.
Inga
storedProcedureTableTypeParameterName Parameternamnet för den tabelltyp som anges i den lagrade proceduren. Inga
sqlWriterTableType Tabelltypnamnet som ska användas i den lagrade proceduren. Kopieringsaktiviteten gör data som flyttas tillgängliga i en temporär tabell med den här tabelltypen. Lagrad procedurkod kan sedan sammanfoga de data som kopieras med befintliga data. Inga
storedProcedureParameters Parametrar för den lagrade proceduren.
Tillåtna värden är namn- och värdepar. Namn och hölje för parametrar måste matcha namnen och höljet för parametrarna för den lagrade proceduren.
Inga
writeBatchSize Antal rader som ska infogas i SQL-tabellen per batch.
Det tillåtna värdet är heltal (antal rader). Som standard avgör tjänsten dynamiskt lämplig batchstorlek baserat på radstorleken.
Inga
writeBatchTimeout Väntetiden för att batchinfogningsåtgärden ska slutföras innan tidsgränsen uppnås.
Det tillåtna värdet är tidsintervallet. Ett exempel är "00:30:00" (30 minuter).
Inga
disableMetricsCollection Tjänsten samlar in mått som Azure SQL Database DTU:er för optimering och rekommendationer för kopieringsprestanda, vilket ger ytterligare huvuddatabasåtkomst. Om du är intresserad av det här beteendet anger du true för att inaktivera det. Nej (standard är false)
 maxConcurrentConnections Den övre gränsen för samtidiga anslutningar som upprättas till datalagret under aktivitetskörningen. Ange endast ett värde när du vill begränsa samtidiga anslutningar.  Inga
WriteBehavior Ange skrivbeteendet för kopieringsaktiviteten för att läsa in data till Azure SQL Database.
Det tillåtna värdet är Insert och Upsert. Som standard använder tjänsten insert för att läsa in data.
Inga
upsertSettings Ange gruppen med inställningarna för skrivbeteende.
Använd när alternativet WriteBehavior är Upsert.
Inga
Under upsertSettings:
useTempDB Ange om du vill använda en global tillfällig tabell eller fysisk tabell som interimtabell för upsert.
Som standard använder tjänsten global tillfällig tabell som interimstabell. värdet är true.
Inga
interimSchemaName Ange interimschemat för att skapa interimtabell om fysisk tabell används. Obs! Användaren måste ha behörighet att skapa och ta bort tabellen. Som standard delar interimtabellen samma schema som mottagartabellen.
Använd när alternativet useTempDB är False.
Inga
keys Ange kolumnnamnen för unik radidentifiering. Antingen kan en enda nyckel eller en serie nycklar användas. Om inget anges används primärnyckeln. Inga

Exempel 1: Lägga till 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",
                "writeBatchSize": 100000
            }
        }
    }
]

Exempel 2: Anropa en lagrad procedur under kopieringen

Läs mer i Anropa en lagrad procedur från en SQL-mottagare.

"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" }
                }
            }
        }
    }
]

Exempel 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>"
                    ]
                },
            }
        }
    }
]

Parallellkopiering från SQL-databas

Anslutningsappen Azure SQL Database i kopieringsaktiviteten tillhandahåller inbyggd datapartitionering för att kopiera data parallellt. Du hittar alternativ för datapartitionering på fliken Källa för kopieringsaktiviteten.

Skärmbild av partitionsalternativ

När du aktiverar partitionerad kopiering kör kopieringsaktiviteten parallella frågor mot din Azure SQL-databaskälla för att läsa in data efter partitioner. Den parallella graden styrs av parallelCopies inställningen för kopieringsaktiviteten. Om du till exempel anger parallelCopies till fyra genererar och kör tjänsten samtidigt fyra frågor baserat på det angivna partitionsalternativet och inställningarna, och varje fråga hämtar en del av data från din Azure SQL Database.

Du rekommenderas att aktivera parallell kopiering med datapartitionering, särskilt när du läser in stora mängder data från din Azure SQL Database. Följande är föreslagna konfigurationer för olika scenarier. När du kopierar data till ett filbaserat datalager rekommenderar vi att du skriver till en mapp som flera filer (ange endast mappnamn), vilket innebär att prestandan är bättre än att skriva till en enda fil.

Scenario Inställningar för förslag
Full belastning från en stor tabell med fysiska partitioner. Partitionsalternativ: Fysiska partitioner i tabellen.

Under körningen identifierar tjänsten automatiskt de fysiska partitionerna och kopierar data efter partitioner.

Om du vill kontrollera om tabellen har fysisk partition eller inte kan du referera till den här frågan.
Full belastning från en stor tabell, utan fysiska partitioner, med ett heltal eller en datetime-kolumn för datapartitionering. Partitionsalternativ: Dynamisk intervallpartition.
Partitionskolumn (valfritt): Ange den kolumn som används för att partitionera data. Om inget anges används index- eller primärnyckelkolumnen.
Partitionens övre gräns och partitionens nedre gräns (valfritt): Ange om du vill fastställa partitionssteget. Detta gäller inte för filtrering av raderna i tabellen. Alla rader i tabellen partitioneras och kopieras. Om inget anges identifierar kopieringsaktiviteten värdena automatiskt.

Om partitionskolumnen "ID" till exempel har värden mellan 1 och 100 och du anger den nedre gränsen som 20 och den övre gränsen till 80, med parallellkopiering som 4, hämtar tjänsten data med 4 partitioner – ID:n i intervallet <=20, [21, 50], [51, 80] >respektive =81.
Läs in en stor mängd data med hjälp av en anpassad fråga, utan fysiska partitioner, med ett heltal eller en date/datetime-kolumn för datapartitionering. Partitionsalternativ: Dynamisk intervallpartition.
Fråga: SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>.
Partitionskolumn: Ange den kolumn som används för att partitionera data.
Partitionens övre gräns och partitionens nedre gräns (valfritt): Ange om du vill fastställa partitionssteget. Detta gäller inte för filtrering av raderna i tabellen. Alla rader i frågeresultatet partitioneras och kopieras. Om inget anges identifierar kopieringsaktivitet automatiskt värdet.

Under körningen ersätter ?AdfRangePartitionColumnName tjänsten med det faktiska kolumnnamnet och värdeintervallen för varje partition och skickar till Azure SQL Database.
Om partitionskolumnen "ID" till exempel har värden mellan 1 och 100 och du anger den nedre gränsen som 20 och den övre gränsen till 80, med parallellkopiering som 4, hämtar tjänsten data med 4 partitioner – ID:n i intervallet <=20, [21, 50], [51, 80] respektive >=81.

Här är fler exempelfrågor för olika scenarier:
1. Fråga hela tabellen:
SELECT * FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition
2. Fråga från en tabell med kolumnval och ytterligare where-clause-filter:
SELECT <column_list> FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>
3. Fråga med underfrågor:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?AdfDynamicRangePartitionCondition AND <your_additional_where_clause>
4. Fråga med partition i underfråga:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?AdfDynamicRangePartitionCondition) AS T

Metodtips för att läsa in data med partitionsalternativ:

  1. Välj distinkt kolumn som partitionskolumn (till exempel primärnyckel eller unik nyckel) för att undvika snedställning av data.
  2. Om tabellen har en inbyggd partition använder du partitionsalternativet "Fysiska partitioner av tabellen" för att få bättre prestanda.
  3. Om du använder Azure Integration Runtime för att kopiera data kan du ange större "Data Integration Units (DIU)" (>4) för att använda fler beräkningsresurser. Kontrollera tillämpliga scenarier där.
  4. "Grad av kopieringsparallellitet" styr partitionsnumren och ställer in det här antalet för stort ibland skadar prestandan, rekommenderar att du anger det här talet som (DIU eller antalet lokalt installerade IR-noder) * (2 till 4).

Exempel: fullständig belastning från stor tabell med fysiska partitioner

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

Exempel: fråga med dynamisk intervallpartition

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

Exempelfråga för att kontrollera fysisk partition

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

Om tabellen har en fysisk partition ser du "HasPartition" som "ja" som följande.

Sql-frågeresultat

Bästa praxis för att läsa in data i Azure SQL Database

När du kopierar data till Azure SQL Database kan du behöva olika skrivbeteenden:

  • Lägg till: Mina källdata har bara nya poster.
  • Upsert: Mina källdata har både infogningar och uppdateringar.
  • Skriv över: Jag vill läsa in en hel dimensionstabell varje gång.
  • Skriv med anpassad logik: Jag behöver extra bearbetning innan den slutliga infogningen i måltabellen.

Se respektive avsnitt om hur du konfigurerar i tjänsten och metodtips.

Lägga till data

Att lägga till data är standardbeteendet för den här anslutningsappen för Azure SQL-databasmottagare. tjänsten gör en massinfogning för att skriva till tabellen effektivt. Du kan konfigurera källan och mottagaren i enlighet med kopieringsaktiviteten.

Upserta data

aktiviteten Kopiera stöder nu inbyggt inläsning av data i en tillfällig databastabell och uppdaterar sedan data i mottagartabellen om nyckeln finns och infogar på annat sätt nya data. Mer information om upsert-inställningar i kopieringsaktiviteter finns i Azure SQL Database som mottagare.

Skriv över hela tabellen

Du kan konfigurera preCopyScript-egenskapen i kopieringsaktivitetens mottagare. I det här fallet kör tjänsten skriptet först för varje kopieringsaktivitet som körs. Sedan körs kopian för att infoga data. Om du till exempel vill skriva över hela tabellen med de senaste data anger du ett skript för att först ta bort alla poster innan du massinläser nya data från källan.

Skriva data med anpassad logik

Stegen för att skriva data med anpassad logik liknar de som beskrivs i avsnittet Upsert-data . När du behöver tillämpa extra bearbetning innan du slutligen infogar källdata i måltabellen kan du läsa in till en mellanlagringstabell och sedan anropa lagrad proceduraktivitet eller anropa en lagrad procedur i kopieringsaktivitetsmottagaren för att tillämpa data, eller använda Mappning Dataflöde.

Anropa en lagrad procedur från en SQL-mottagare

När du kopierar data till Azure SQL Database kan du också konfigurera och anropa en användardefinierad lagrad procedur med ytterligare parametrar i varje batch i källtabellen. Funktionen för lagrad procedur drar nytta av tabellvärdesparametrar.

Du kan använda en lagrad procedur när inbyggda kopieringsmekanismer inte tjänar syftet. Ett exempel är när du vill tillämpa extra bearbetning innan den slutliga infogningen av källdata i måltabellen. Några extra bearbetningsexempel är när du vill slå samman kolumner, leta upp ytterligare värden och infoga i mer än en tabell.

Följande exempel visar hur du använder en lagrad procedur för att göra en upsert till en tabell i Azure SQL Database. Anta att indata och marknadsföringstabellen för mottagare har tre kolumner vardera: ProfileID, State och Category. Gör upsert baserat på kolumnen ProfileID och tillämpa den bara för en specifik kategori som heter "ProductA".

  1. I databasen definierar du tabelltypen med samma namn som sqlWriterTableType. Schemat för tabelltypen är samma som schemat som returneras av dina indata.

    CREATE TYPE [dbo].[MarketingType] AS TABLE(
        [ProfileID] [varchar](256) NOT NULL,
        [State] [varchar](256) NOT NULL,
        [Category] [varchar](256) NOT NULL
    )
    
  2. I databasen definierar du den lagrade proceduren med samma namn som sqlWriterStoredProcedureName. Den hanterar indata från din angivna källa och sammanfogas till utdatatabellen. Parameternamnet för tabelltypen i den lagrade proceduren är samma som tableName som definierats i datauppsättningen.

    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. I din Azure Data Factory- eller Synapse-pipeline definierar du avsnittet SQL-mottagare i kopieringsaktiviteten enligt följande:

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

Mappa dataflödesegenskaper

När du transformerar data i dataflödesmappning kan du läsa och skriva till tabeller från Azure SQL Database. Mer information finns i källtransformering och mottagartransformering i mappning av dataflöden.

Källtransformering

Inställningar som är specifika för Azure SQL Database är tillgängliga på fliken Källalternativ i källomvandlingen.

Input: Välj om du ska peka källan mot en tabell (motsvarande Select * from <table-name>) eller ange en anpassad SQL-fråga.

Fråga: Om du väljer Fråga i indatafältet anger du en SQL-fråga för källan. Den här inställningen åsidosätter alla tabeller som du har valt i datauppsättningen. Order By-satser stöds inte här, men du kan ange en fullständig SELECT FROM-instruktion. Du kan också använda användardefinierade tabellfunktioner. select * from udfGetData() är en UDF i SQL som returnerar en tabell. Den här frågan skapar en källtabell som du kan använda i ditt dataflöde. Att använda frågor är också ett bra sätt att minska antalet rader för testning eller sökningar.

Tips

Det gemensamma tabelluttrycket (CTE) i SQL stöds inte i frågeläget för mappningsdataflödet, eftersom förutsättningen för att använda det här läget är att frågor kan användas i SQL-frågans FROM-sats, men DET går inte att göra detta. Om du vill använda CTE:er måste du skapa en lagrad procedur med hjälp av följande fråga:

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

Använd sedan läget Lagrad procedur i källomvandlingen av mappningsdataflödet och ange @query exemplet with CTE as (select 'test' as a) select * from CTE. Sedan kan du använda CTE:er som förväntat.

Lagrad procedur: Välj det här alternativet om du vill generera en projektion och källdata från en lagrad procedur som körs från källdatabasen. Du kan skriva in schemat, procedurnamnet och parametrarna eller klicka på Uppdatera för att be tjänsten att identifiera scheman och procedurnamn. Sedan kan du klicka på Importera för att importera alla procedureparametrar med hjälp av formuläret @paraName.

Lagrad procedur

  • SQL-exempel: Select * from MyTable where customerId > 1000 and customerId < 2000
  • Exempel på parametriserad SQL: "select * from {$tablename} where orderyear > {$year}"

Batchstorlek: Ange en batchstorlek för att segmentera stora data i läsningar.

Isoleringsnivå: Standardvärdet för SQL-källor i mappning av dataflöde är ogenomsläst. Du kan ändra isoleringsnivån här till något av följande värden:

  • Läs bekräftad
  • Ogenomförd läsning
  • Repeterbar läsning
  • Serialiserbar
  • Ingen (ignorera isoleringsnivå)

Isoleringsnivå

Aktivera inkrementellt extrahering: Använd det här alternativet för att instruera ADF att endast bearbeta rader som har ändrats sedan den senaste gången pipelinen kördes.

Inkrementell kolumn: När du använder funktionen för inkrementell extrahering måste du välja datum/tid eller numerisk kolumn som du vill använda som vattenstämpel i källtabellen.

Aktivera intern avbildning av ändringsdata (förhandsversion): Använd det här alternativet för att instruera ADF att endast bearbeta deltadata som hämtats av SQL-teknik för insamling av ändringsdata sedan den senaste gången pipelinen kördes. Med det här alternativet läses deltadata inklusive radinfogning, uppdatering och borttagning in automatiskt utan att någon inkrementell kolumn krävs. Du måste aktivera insamling av ändringsdata på Azure SQL DB innan du använder det här alternativet i ADF. Mer information om det här alternativet i ADF finns i intern insamling av ändringsdata.

Börja läsa från början: Om du anger det här alternativet med inkrementellt extrahering instrueras ADF att läsa alla rader vid första körningen av en pipeline med inkrementellt extrahering aktiverat.

Kanalomvandling

Inställningar som är specifika för Azure SQL Database är tillgängliga på fliken Inställningar i kanalmottagaretransformeringen.

Uppdateringsmetod: Avgör vilka åtgärder som tillåts på databasmålet. Standardvärdet är att endast tillåta infogningar. Om du vill uppdatera, uppdatera eller ta bort rader krävs en ändringsradstransformering för att tagga rader för dessa åtgärder. För uppdateringar, upserts och borttagningar måste en nyckelkolumn eller kolumner anges för att avgöra vilken rad som ska ändras.

Nyckelkolumner

Det kolumnnamn som du väljer som nyckel här kommer att användas av tjänsten som en del av den efterföljande uppdateringen, upsert, delete. Därför måste du välja en kolumn som finns i mappningen mottagare. Om du inte vill skriva värdet till den här nyckelkolumnen klickar du på "Hoppa över att skriva nyckelkolumner".

Du kan parametrisera nyckelkolumnen som används här för att uppdatera måltabellen Azure SQL Database. Om du har flera kolumner för en sammansatt nyckel klickar du på "Anpassat uttryck" och du kan lägga till dynamiskt innehåll med hjälp av dataflödesuttrycksspråket, som kan innehålla en matris med strängar med kolumnnamn för en sammansatt nyckel.

Tabellåtgärd: Avgör om du vill återskapa eller ta bort alla rader från måltabellen innan du skriver.

  • Ingen: Ingen åtgärd görs i tabellen.
  • Återskapa: Tabellen tas bort och återskapas. Krävs om du skapar en ny tabell dynamiskt.
  • Trunkera: Alla rader från måltabellen tas bort.

Batchstorlek: Styr hur många rader som skrivs i varje bucket. Större batchstorlekar förbättrar komprimering och minnesoptimering, men riskerar att få slut på minnesfel vid cachelagring av data.

Använd TempDB: Som standard använder tjänsten en global tillfällig tabell för att lagra data som en del av inläsningsprocessen. Du kan också avmarkera alternativet "Använd TempDB" och i stället be tjänsten att lagra den tillfälliga innehavstabellen i en användardatabas som finns i databasen som används för den här mottagaren.

Använda Temp DB

För- och efter-SQL-skript: Ange SQL-skript med flera rader som ska köras före (förbearbetning) och efter att (efterbearbetning) data har skrivits till din mottagardatabas

Skärmbild som visar inställningar för mottagare med för- och efterbearbetningsskript för SQL.

Tips

  1. Vi rekommenderar att du bryter skript med en enda batch med flera kommandon i flera batchar.
  2. Det går endast att köra instruktioner av typen Data Definition Language (DDL) och Data Manipulation Language (DML), som returnerar ett enda uppdateringsvärde, som del av en batch. Läs mer om att utföra batchåtgärder

Felhantering av poster

När du skriver till Azure SQL DB kan vissa datarader misslyckas på grund av begränsningar som anges av målet. Några vanliga fel är:

  • Sträng- eller binärdata trunkeras i tabellen
  • Det går inte att infoga värdet NULL i kolumnen
  • INSERT-instruktionen stred mot CHECK-villkoret

Som standard misslyckas en dataflödeskörning på det första felet den får. Du kan välja att Fortsätta vid fel som gör att dataflödet kan slutföras även om enskilda rader har fel. Tjänsten innehåller olika alternativ för att hantera dessa felrader.

Transaktionsincheckning: Välj om dina data ska skrivas i en enda transaktion eller i batchar. En enskild transaktion ger sämre prestanda, men inga data som skrivs visas för andra förrän transaktionen har slutförts.

Utdata avvisade data: Om aktiverad kan du mata ut felraderna till en csv-fil i Azure Blob Storage eller ett Azure Data Lake Storage Gen2 konto som du väljer. Då skrivs felraderna med ytterligare tre kolumner: SQL-åtgärden som INSERT eller UPDATE, felkoden för dataflödet och felmeddelandet på raden.

Rapportera lyckat fel: Om det är aktiverat markeras dataflödet som ett lyckat resultat även om felrader hittas.

Felhantering av poster

Datatypmappning för Azure SQL Database

När data kopieras från eller till Azure SQL Database används följande mappningar från Azure SQL Databasdatatyper till Azure Data Factory mellanliggande datatyper. Samma mappningar används av synapse-pipelinefunktionen, som implementerar Azure Data Factory direkt. Information om hur kopieringsaktiviteten mappar källschemat och datatypen till mottagaren finns i Schema- och datatypsmappningar.

Azure SQL Databasdatatyp Data Factory interimdatatyp
bigint Int64
binary Byte[]
bit Boolesk
char Sträng, tecken[]
datum DateTime
Datumtid DateTime
datetime2 DateTime
Datetimeoffset DateTimeOffset
Decimal Decimal
FILESTREAM-attribut (varbinary(max)) Byte[]
Float Double
image Byte[]
int Int32
money Decimal
nchar Sträng, tecken[]
ntext Sträng, tecken[]
numeric Decimal
nvarchar Sträng, tecken[]
real Enkel
Rowversion Byte[]
smalldatetime DateTime
smallint Int16
smallmoney Decimal
Sql_variant Objekt
text Sträng, tecken[]
time TimeSpan
timestamp Byte[]
tinyint Byte
uniqueidentifier GUID
varbinary Byte[]
varchar Sträng, tecken[]
xml Sträng

Anteckning

För datatyper som mappar till interimtypen Decimal stöder aktiviteten Kopiera för närvarande precision upp till 28. Om du har data med en precision som är större än 28 bör du överväga att konvertera till en sträng i SQL-frågan.

Egenskaper för uppslagsaktivitet

Mer information om egenskaperna finns i Sökningsaktivitet.

Egenskaper för GetMetadata-aktivitet

Mer information om egenskaperna finns i GetMetadata-aktiviteten

Använda Always Encrypted

När du kopierar data från/till Azure SQL Database med Always Encrypted följer du stegen nedan:

  1. Lagra kolumnhuvudnyckeln (CMK) i en Azure-Key Vault. Läs mer om hur du konfigurerar Always Encrypted med hjälp av Azure Key Vault

  2. Se till att få åtkomst till nyckelvalvet där kolumnhuvudnyckeln (CMK) lagras. I den här artikeln finns nödvändiga behörigheter.

  3. Skapa en länkad tjänst för att ansluta till din SQL-databas och aktivera funktionen "Always Encrypted" med hjälp av antingen hanterad identitet eller tjänstens huvudnamn.

Anteckning

Azure SQL Database Always Encrypted stöder följande scenarier:

  1. Datalager för antingen källa eller mottagare använder hanterad identitet eller tjänstens huvudnamn som autentiseringstyp för nyckelprovider.
  2. Både käll- och mottagardatalager använder hanterad identitet som nyckelproviderautentiseringstyp.
  3. Både käll- och mottagardatalager använder samma tjänsthuvudnamn som nyckelproviderns autentiseringstyp.

Anteckning

För närvarande stöds Azure SQL Database Always Encrypted endast för källomvandling vid mappning av dataflöden.

Intern insamling av ändringsdata

Azure Data Factory har stöd för inbyggda funktioner för insamling av ändringsdata för SQL Server, Azure SQL DB och Azure SQL MI. Ändrade data, inklusive radinfogning, uppdatering och borttagning i SQL-lager, kan identifieras och extraheras automatiskt av ADF-mappningsdataflödet. Utan kod i mappning av dataflöde kan användarna enkelt uppnå datareplikeringsscenario från SQL-lagringsplatser genom att lägga till en databas som mållager. Dessutom kan användarna också skapa valfri datatransformeringslogik däremellan för att uppnå ett inkrementellt ETL-scenario från SQL-lagringsplatser.

Se till att behålla pipelinen och aktivitetsnamnet oförändrade så att kontrollpunkten kan registreras av ADF så att du kan hämta ändrade data från den senaste körningen automatiskt. Om du ändrar ditt pipelinenamn eller aktivitetsnamn återställs kontrollpunkten, vilket leder till att du börjar från början eller hämtar ändringar från och med nu i nästa körning. Om du vill ändra pipelinenamnet eller aktivitetsnamnet men ändå behålla kontrollpunkten för att hämta ändrade data från den senaste körningen automatiskt använder du din egen kontrollpunktsnyckel i dataflödesaktiviteten för att uppnå det.

När du felsöker pipelinen fungerar den här funktionen på samma sätt. Tänk på att kontrollpunkten återställs när du uppdaterar webbläsaren under felsökningskörningen. När du är nöjd med pipelineresultatet från felsökningskörningen kan du publicera och utlösa pipelinen. När du första gången utlöser din publicerade pipeline startas den automatiskt om från början eller hämtar ändringar från och med nu.

I övervakningsavsnittet har du alltid möjlighet att köra en pipeline igen. När du gör det hämtas alltid ändrade data från den tidigare kontrollpunkten för den valda pipelinekörningen.

Exempel 1:

När du direkt kedjar en källtransformering som refereras till en SQL CDC-aktiverad datauppsättning med en mottagartransformering som refereras till en databas i ett mappningsdataflöde, tillämpas ändringarna på SQL-källan automatiskt på måldatabasen, så att du enkelt kan hämta datareplikeringsscenariot mellan databaser. Du kan använda uppdateringsmetoden i mottagartransformering för att välja om du vill tillåta infogning, tillåta uppdatering eller tillåta borttagning i måldatabasen. Exempelskriptet i mappning av dataflödet är som nedan.

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

Exempel 2:

Om du vill aktivera ETL-scenario i stället för datareplikering mellan databasen via SQL CDC kan du använda uttryck i mappning av dataflöde, inklusive isInsert(1), isUpdate(1) och isDelete(1) för att särskilja raderna med olika åtgärdstyper. Följande är ett av exempelskripten för att mappa dataflödet när en kolumn härleds med värdet: 1 för att ange infogade rader, 2 för att ange uppdaterade rader och 3 för att ange borttagna rader för underordnade transformeringar för att bearbeta deltadata.

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

Känd begränsning:

Nästa steg

En lista över datalager som stöds som källor och mottagare av kopieringsaktiviteten finns i Datalager och format som stöds.