Kopiera och transformera data i Azure SQL Managed Instance med Hjälp av Azure Data Factory eller Synapse Analytics

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

Dricks

Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!

Den här artikeln beskriver hur du använder kopieringsaktivitet för att kopiera data från och till Azure SQL Managed Instance och använder Dataflöde för att transformera data i Azure SQL Managed Instance. Mer information finns i introduktionsartiklarna för Azure Data Factory och Synapse Analytics.

Funktioner som stöds

Den här Azure SQL Managed Instance-anslutningsappen stöds för följande funktioner:

Funktioner som stöds IR Hanterad privat slutpunkt
aktiviteten Kopiera (källa/mottagare) (1) (2) ✔ Offentlig förhandsversion
Mappa dataflöde (källa/mottagare) (1) ✔ Offentlig förhandsversion
Sökningsaktivitet (1) (2) ✔ Offentlig förhandsversion
GetMetadata-aktivitet (1) (2) ✔ Offentlig förhandsversion
Skriptaktivitet (1) (2) ✔ Offentlig förhandsversion
Lagrad proceduraktivitet (1) (2) ✔ Offentlig förhandsversion

(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 Microsoft Entra-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 SQL MI-källan. Mer information finns i avsnittet Parallell kopia från SQL MI .
  • 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.

Förutsättningar

Om du vill komma åt den offentliga slutpunkten för SQL Managed Instance kan du använda en hanterad Azure-integreringskörning. Se till att du aktiverar den offentliga slutpunkten och även tillåter trafik för offentliga slutpunkter i nätverkssäkerhetsgruppen så att tjänsten kan ansluta till databasen. Mer information finns i den här vägledningen.

Om du vill nå en privat slutpunkt för SQL Managed Instance måste du konfigurera en lokal integreringskörning som har åtkomst till databasen. Om du etablerar den lokala integreringskörningen i samma virtuella nätverk som den hanterade instansen, ska du kontrollera att Integration Runtime-datorn finns i ett annat undernät än din hanterade instans. Om du etablerar den lokala integreringskörningen i ett annat virtuellt nätverk än din hanterade instans, kan du antingen använda virtuell nätverks-peering eller en virtuellt nätverk till virtuellt nätverk-anslutning. Mer information finns i Ansluta ditt program till SQL Managed Instance.

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 tjänst till en Hanterad Azure SQL-instans med hjälp av användargränssnittet

Använd följande steg för att skapa en länkad tjänst till en SQL Managed-instans i Azure-portalens användargränssnitt.

  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å Ny:

  2. Sök efter SQL och välj anslutningsappen för Azure SQL Server Managed Instance.

    Skärmbild av azure SQL Server Managed Instance-anslutningsappen.

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

    Skärmbild av konfiguration av länkad tjänst för en SQL Managed-instans.

Anslut eller konfigurationsinformation

Följande avsnitt innehåller information om egenskaper som används för att definiera Azure Data Factory-entiteter som är specifika för ANSLUTNINGsprogrammet för SQL Managed Instance.

Länkade tjänstegenskaper

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

Property Beskrivning Obligatoriskt
type Typegenskapen måste anges till AzureSqlMI. Ja
Connectionstring Den här egenskapen anger den connectionString-information som behövs för att ansluta till SQL Managed Instance med hjälp av SQL-autentisering. Mer information finns i följande exempel.
Standardporten är 1433. Om du använder SQL Managed Instance med en offentlig slutpunkt anger du uttryckligen port 3342.
Du kan också ange ett lösenord i Azure Key Vault. Om det är SQL-autentisering hämtar du konfigurationen password från anslutningssträng. 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 Microsoft Entra-program är registrerat i.
Tillåtna värden är AzurePublic, AzureChina, AzureUsGovernment och AzureGermany. Som standard används tjänstens molnmiljö.
Nej
alwaysEncrypted Inställningar 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 Using Always Encrypted (Använda Always Encrypted ). Om den inte anges inaktiveras standardinställningen alltid krypterad. Nej
connectVia Den här integreringskörningen används för att ansluta till datalagret. Du kan använda en lokalt installerad integrationskörning eller en Azure-integrationskörning om din hanterade instans har en offentlig slutpunkt och tillåter att tjänsten får åtkomst till den. Om det inte anges används standardkörningen för Azure-integrering. Ja

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

SQL-autentisering

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

Exempel 1: Använd SQL-autentisering

{
    "name": "AzureSqlMILinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exempel 2: Använd SQL-autentisering med ett lösenord i Azure Key Vault

{
    "name": "AzureSqlMILinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exempel 3: Använd SQL-autentisering med Always Encrypted

{
    "name": "AzureSqlMILinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;"
        },
        "alwaysEncryptedSettings": {
            "alwaysEncryptedAkvAuthType": "ServicePrincipal",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Tjänstens huvudautentisering

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

Property Beskrivning Obligatoriskt
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 klientinformationen, till exempel domännamnet eller klient-ID:t, under vilket ditt program finns. Hämta den genom att hovra musen i det övre högra hörnet i Azure-portalen. Ja

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

  1. Följ stegen för att etablera en Microsoft Entra-administratör för din hanterade instans.

  2. Skapa ett Microsoft Entra-program från Azure-portalen. Anteckna programnamnet och följande värden som definierar den länkade tjänsten:

    • Program-ID:t
    • Programnyckel
    • Klientorganisations-ID
  3. Skapa inloggningar för tjänstens huvudnamn. I SQL Server Management Studio (SSMS) ansluter du till din hanterade instans med ett SQL Server-konto som är en sysadmin. Kör följande T-SQL i huvuddatabasen :

    CREATE LOGIN [your application name] FROM EXTERNAL PROVIDER
    
  4. Skapa oberoende databasanvändare för tjänstens huvudnamn. Anslut till databasen från eller till vilken du vill kopiera data kör du följande T-SQL:

    CREATE USER [your application name] FROM EXTERNAL PROVIDER
    
  5. Bevilja tjänstens huvudnamn 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 e.g. db_owner] ADD MEMBER [your application name]
    
  6. Konfigurera en länkad SQL Managed Instance-tjänst.

Exempel: använda autentisering med tjänstens huvudnamn

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;",
            "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 för autentisering till andra Azure-tjänster. Du kan använda den här hanterade identiteten för SQL Managed Instance-autentisering. Den avsedda tjänsten 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 hanterad identitetsautentisering anger du de allmänna egenskaper som beskrivs i föregående avsnitt och följer dessa steg.

  1. Följ stegen för att etablera en Microsoft Entra-administratör för din hanterade instans.

  2. Skapa inloggningar för den systemtilldelade hanterade identiteten. I SQL Server Management Studio (SSMS) ansluter du till din hanterade instans med ett SQL Server-konto som är en sysadmin. Kör följande T-SQL i huvuddatabasen :

    CREATE LOGIN [your_factory_or_workspace_ name] FROM EXTERNAL PROVIDER
    
  3. Skapa oberoende databasanvändare för den systemtilldelade hanterade identiteten. Anslut till databasen från eller till vilken du vill kopiera data kör du följande T-SQL:

    CREATE USER [your_factory_or_workspace_name] FROM EXTERNAL PROVIDER
    
  4. Ge den systemtilldelade 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 e.g. db_owner] ADD MEMBER [your_factory_or_workspace_name]
    
  5. Konfigurera en länkad SQL Managed Instance-tjänst.

Exempel: använder systemtilldelad hanterad identitetsautentisering

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Användartilldelad hanterad identitetsautentisering

En datafabrik eller Synapse-arbetsyta kan associeras med en användartilldelad hanterad identitet som representerar tjänsten för autentisering till andra Azure-tjänster. Du kan använda den här hanterade identiteten för SQL Managed Instance-autentisering. Den avsedda tjänsten 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:

Property Beskrivning Obligatoriskt
autentiseringsuppgifter Ange den användartilldelade hanterade identiteten som autentiseringsobjekt. Ja

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

  1. Följ stegen för att etablera en Microsoft Entra-administratör för din hanterade instans.

  2. Skapa inloggningar för den användartilldelade hanterade identiteten. I SQL Server Management Studio (SSMS) ansluter du till din hanterade instans med ett SQL Server-konto som är en sysadmin. Kör följande T-SQL i huvuddatabasen :

    CREATE LOGIN [your_factory_or_workspace_ name] FROM EXTERNAL PROVIDER
    
  3. Skapa inneslutna databasanvändare för den användartilldelade hanterade identiteten. Anslut till databasen från eller till vilken du vill kopiera data kör du följande T-SQL:

    CREATE USER [your_factory_or_workspace_name] FROM EXTERNAL PROVIDER
    
  4. 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 e.g. db_owner] ADD MEMBER [your_factory_or_workspace_name]
    
  5. Tilldela en eller flera användartilldelade hanterade identiteter till din datafabrik och skapa autentiseringsuppgifter för varje användartilldelad hanterad identitet.

  6. Konfigurera en länkad SQL Managed Instance-tjänst.

Exempel: använder användartilldelad hanterad identitetsautentisering

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Egenskaper för datauppsättning

En fullständig lista över avsnitt och egenskaper som är tillgängliga för användning för att definiera datauppsättningar finns i artikeln datauppsättningar. Det här avsnittet innehåller en lista över egenskaper som stöds av SQL Managed Instance-datauppsättningen.

Följande egenskaper stöds för att kopiera data till och från SQL Managed Instance:

Property Beskrivning Obligatoriskt
type Datamängdens typegenskap måste anges till AzureSqlMITable. Ja
schema Namnet på schemat. Nej för källa, Ja för mottagare
table 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

{
    "name": "AzureSqlMIDataset",
    "properties":
    {
        "type": "AzureSqlMITable",
        "linkedServiceName": {
            "referenceName": "<SQL Managed Instance 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 användning för att definiera aktiviteter finns i artikeln Pipelines . Det här avsnittet innehåller en lista över egenskaper som stöds av SQL Managed Instance-källan och mottagaren.

SQL Managed Instance som källa

Dricks

Om du vill läsa in data från SQL MI effektivt med hjälp av datapartitionering kan du läsa mer från Parallell kopiering från SQL MI.

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

Property Beskrivning Obligatoriskt
type Typegenskapen för kopieringsaktivitetskällan måste anges till SqlMISource. 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. Nej
sqlReaderStoredProcedureName Den här egenskapen är 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. Nej
storedProcedureParameters Dessa parametrar är 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 lagrad procedur.
Nej
isolationLevel Anger transaktionslåsningsbeteendet för SQL-källan. De tillåtna värdena är: ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Snapshot. Om den inte anges används databasens standardisoleringsnivå. Mer information finns i det här dokumentet. Nej
partitionOptions Anger de datapartitioneringsalternativ som används för att läsa in data från SQL MI.
Tillåtna värden är: Ingen (standard), PhysicalPartitionsOfTable och DynamicRange.
När ett partitionsalternativ är aktiverat (dvs. inte None) styrs graden av parallellitet för samtidig inläsning av data från SQL MI av parallelCopies inställningen för kopieringsaktiviteten.
Nej
partition Inställningar Ange gruppen med inställningarna för datapartitionering.
Använd när partitionsalternativet inte Noneär .
Nej
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 parallell kopiering. 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 Parallellkopiering från SQL-databas .
Nej
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 det inte anges identifierar kopieringsaktivitet automatiskt värdet.
Använd när partitionsalternativet är DynamicRange. Ett exempel finns i avsnittet Parallellkopiering från SQL-databas .
Nej
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 det inte anges identifierar kopieringsaktivitet automatiskt värdet.
Använd när partitionsalternativet är DynamicRange. Ett exempel finns i avsnittet Parallellkopiering från SQL-databas .
Nej

Observera följande:

  • Om sqlReaderQuery har angetts för SqlMISource kör kopieringsaktiviteten den här frågan mot SQL Managed Instance-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 som att returnera ett annat schema när ett annat parametervärde skickas in, kan det uppstå ett fel eller ett oväntat resultat när du importerar schemat från användargränssnittet eller när du kopierar data till SQL Database med automatisk tabellskapande.

Exempel: Använda en SQL-fråga

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

Exempel: Använd en lagrad procedur

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

Definitionen för 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

SQL Managed Instance som mottagare

Dricks

Läs mer om de skrivbeteenden, konfigurationer och metodtips som stöds från Metodtips för inläsning av data till SQL Managed Instance.

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

Property Beskrivning Obligatoriskt
type Typegenskapen för kopieringsaktivitetsmottagaren måste anges till SqlMISink. Ja
preCopyScript Den här egenskapen anger en SQL-fråga för kopieringsaktiviteten som ska köras innan data skrivs till SQL Managed Instance. Den anropas bara en gång per kopieringskörning. Du kan använda den här egenskapen för att rensa förinstallerade data. Nej
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. Nej
sqlWriterStoredProcedureName Namnet på den lagrade procedur 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 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.
Nej
storedProcedureTableTypeParameterName Parameternamnet för den tabelltyp som anges i den lagrade proceduren. Nej
sqlWriterTableType Tabelltypens namn 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 data som kopieras med befintliga data. Nej
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 de lagrade procedureparametrarna.
Nej
writeBatchSize Antal rader som ska infogas i SQL-tabellen per batch.
Tillåtna värden är heltal för antalet rader. Som standard avgör tjänsten dynamiskt lämplig batchstorlek baserat på radstorleken.
Nej
writeBatchTimeout Väntetiden för att åtgärden infoga, upsert och lagrad procedur ska slutföras innan tidsgränsen uppnås.
Tillåtna värden är för tidsintervallet. Ett exempel är "00:30:00" i 30 minuter. Om inget värde anges är tidsgränsen som standard "00:30:00".
Nej
 maxConcurrent Anslut ions Den övre gränsen för samtidiga anslutningar som upprättats till datalagret under aktivitetskörningen. Ange endast ett värde när du vill begränsa samtidiga anslutningar.  Nej
WriteBehavior Ange skrivbeteendet för kopieringsaktiviteten för att läsa in data i Azure SQL MI.
Det tillåtna värdet är Insert och Upsert. Som standard använder tjänsten insert för att läsa in data.
Nej
upsert Inställningar Ange gruppen med inställningarna för skrivbeteende.
Använd när alternativet WriteBehavior är Upsert.
Nej
Under upsertSettings:
useTempDB Ange om du vill använda en global tillfällig tabell eller fysisk tabell som interimtabell för upsert.
Tjänsten använder som standard global tillfällig tabell som interimtabell. värdet är true.
Nej
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.
Nej
keys Ange kolumnnamnen för unik radidentifiering. Antingen kan en enskild nyckel eller en serie nycklar användas. Om den inte anges används primärnyckeln. Nej

Exempel 1: Lägga till data

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

Exempel 2: Anropa en lagrad procedur under kopieringen

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

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

Exempel 3: Upsert-data

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

Parallell kopiering från SQL MI

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

Skärmbild av partitionsalternativ

När du aktiverar partitionerad kopiering kör kopieringsaktiviteten parallella frågor mot SQL MI-källan 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å ditt angivna partitionsalternativ och inställningar, och varje fråga hämtar en del av data från din SQL MI.

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

Scenario Föreslagna inställningar
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 läsa den här frågan.
Fullständig belastning från en stor tabell, utan fysiska partitioner, med ett heltal eller en datetime-kolumn för datapartitionering. Partitionsalternativ: Partition med dynamiskt intervall.
Partitionskolumn (valfritt): Ange den kolumn som används för att partitionera data. Om det inte 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 är inte för att filtrera raderna i tabellen, alla rader i tabellen partitioneras och kopieras. Om det inte 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 som 80, med parallell kopia 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: Partition med dynamiskt intervall.
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 är inte för att filtrera raderna i tabellen, alla rader i frågeresultatet partitioneras och kopieras. Om det inte 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 SQL MI.
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 som 80, med parallell kopia 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ågor:
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 partitionsalternativet:

  1. Välj distinkt kolumn som partitionskolumn (till exempel primärnyckel eller unik nyckel) för att undvika datasnedvridning.
  2. Om tabellen har 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 "Dataintegration Units (DIU)" (>4) för att använda mer databehandlingsresurser. Kontrollera tillämpliga scenarier där.
  4. "Grad av kopieringsparallellitet" styr partitionsnumren, anger det här talet 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 en stor tabell med fysiska partitioner

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

Exempel: fråga med partition för dynamiskt intervall

"source": {
    "type": "SqlMISource",
    "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 SQL Managed Instance

När du kopierar data till SQL Managed Instance kan du behöva olika skrivbeteenden:

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

Se respektive avsnitt för hur du konfigurerar och metodtips.

Lägga till data

Att lägga till data är standardbeteendet för anslutningsappen för SQL Managed Instance-mottagare. 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 i övrigt infogar nya data. Mer information om upsert-inställningar i kopieringsaktiviteter finns i SQL Managed Instance som mottagare.

Skriv över hela tabellen

Du kan konfigurera egenskapen preCopyScript i en kopieringsaktivitetsmottagare. 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 de 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 använda 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.

Anropa en lagrad procedur från en SQL-mottagare

När du kopierar data till SQL Managed Instance kan du också konfigurera och anropa en användardefinierad lagrad procedur med ytterligare parametrar för varje batch i källtabellen. Funktionen 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 använda extra bearbetning innan källdata infogas i måltabellen. Några exempel på extra bearbetning är när du vill sammanfoga 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 SQL Server-databasen. Anta att indata och tabellen marknadsföring för mottagare var och en har tre kolumner: ProfileID, State och Category. Gör upsert baserat på kolumnen ProfileID och använd 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 detsamma 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 pipelinen definierar du avsnittet SQL MI-mottagare i kopieringsaktiviteten enligt följande:

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

Mappa dataflödesegenskaper

När du transformerar data i dataflödet för mappning kan du läsa och skriva till tabeller från Azure SQL Managed Instance. Mer information finns i källtransformering och mottagartransformation i mappning av dataflöden.

Källtransformering

I tabellen nedan visas de egenskaper som stöds av Azure SQL Managed Instance-källan. Du kan redigera dessa egenskaper på fliken Källalternativ .

Name beskrivning Obligatoriskt Tillåtna värden Egenskap för dataflödesskript
Register Om du väljer Tabell som indata hämtar dataflödet alla data från tabellen som anges i datauppsättningen. Nej - -
Fråga Om du väljer Fråga som indata anger du en SQL-fråga för att hämta data från källan, vilket åsidosätter alla tabeller som du anger i datauppsättningen. Att använda frågor är ett bra sätt att minska antalet rader för testning eller sökningar.

Order By-satsen stöds inte, 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 som du kan använda i dataflödet.
Frågeexempel: Select * from MyTable where customerId > 1000 and customerId < 2000
Nej String query
Batchstorlek Ange en batchstorlek för att segmentera stora data i läsningar. Nej Integer batchSize
Isoleringsnivå Välj någon av följande isoleringsnivåer:
- Läs bekräftad
– Läs ej genererad (standard)
– Repeterbar läsning
-Serialiseras
– Ingen (ignorera isoleringsnivå)
Nej READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALISERAS
INGET
isolationLevel
Aktivera inkrementellt extrahering Använd det här alternativet om du vill be ADF att endast bearbeta rader som har ändrats sedan den senaste gången pipelinen kördes. Nej - -
Inkrementell kolumn När du använder funktionen för inkrementell extrahering måste du välja den datum/tid eller numeriska kolumn som du vill använda som vattenstämpel i källtabellen. Nej - -
Aktivera intern ändringsdatainsamling (förhandsversion) Använd det här alternativet om du vill be ADF att endast bearbeta deltadata som samlats in av SQL:s datainsamlingsteknik 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 i Azure SQL MI 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. Nej - -
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. Nej - -

Dricks

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åge-FROM-satsen, 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 dataflödet för mappning och ange @query exemplet like with CTE as (select 'test' as a) select * from CTE. Sedan kan du använda CTE:er som förväntat.

Exempel på azure SQL Managed Instance-källskript

När du använder Azure SQL Managed Instance som källtyp är det associerade dataflödesskriptet:

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

Transformering av mottagare

I tabellen nedan visas de egenskaper som stöds av Azure SQL Managed Instance-mottagare. Du kan redigera dessa egenskaper på fliken Alternativ för mottagare.

Name beskrivning Obligatoriskt Tillåtna värden Egenskap för dataflödesskript
Uppdatera metod Ange vilka åtgärder som tillåts på databasmålet. Standardvärdet är att endast tillåta infogningar.
För att uppdatera, öka eller ta bort rader krävs en Alter row-transformering för att tagga rader för dessa åtgärder.
Ja true eller false Deletable
infogningsbar
Uppdaterbar
upsertable
Nyckelkolumner För uppdateringar, upserts och borttagningar måste nyckelkolumner anges för att avgöra vilken rad som ska ändras.
Kolumnnamnet som du väljer som nyckel används 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.
Nej Matris keys
Hoppa över att skriva nyckelkolumner Om du inte vill skriva värdet till nyckelkolumnen väljer du "Hoppa över att skriva nyckelkolumner". Nej true eller false skipKeyWrites
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 utfö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.
Nej true eller false Återskapa
trunkera
Batchstorlek Ange hur många rader som skrivs i varje batch. Större batchstorlekar förbättrar komprimering och minnesoptimering, men riskerar att få slut på minnesfel vid cachelagring av data. Nej Integer batchSize
Pre- och Post SQL-skript Ange sql-skript med flera rader som ska köras före (förbearbetning) och efter att (efterbearbetning) data har skrivits till mottagardatabasen. Nej String preSQLs
postSQLs

Dricks

  1. Vi rekommenderar att du bryter enskilda batchskript 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

Exempel på azure SQL Managed Instance-mottagarskript

När du använder Azure SQL Managed Instance som mottagartyp är det associerade dataflödesskriptet:

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

Egenskaper för uppslagsaktivitet

Mer information om egenskaperna finns i Sökningsaktivitet.

Egenskaper för GetMetadata-aktivitet

Mer information om egenskaperna finns i GetMetadata-aktivitet

Datatypsmappning för SQL Managed Instance

När data kopieras till och från SQL Managed Instance med kopieringsaktivitet används följande mappningar från SQL Managed Instance-datatyper till mellanliggande datatyper som används internt i tjänsten. Information om hur kopieringsaktiviteten mappar från källschemat och datatypen till mottagaren finns i Mappningar av schema- och datatyper.

SQL Managed Instance-datatyp Datatyp för interimstjänst
bigint Int64
binary Byte[]
bit Booleskt
char Sträng, tecken[]
datum Datum/tid
Datetime Datum/tid
datetime2 Datum/tid
Datetimeoffset DateTimeOffset
Decimal Decimal
FILESTREAM-attribut (varbinary(max)) Byte[]
Flyttal Dubbel
bild Byte[]
heltal Int32
money Decimal
nchar Sträng, tecken[]
ntext Sträng, tecken[]
numeric Decimal
nvarchar Sträng, tecken[]
real Enstaka
Rowversion Byte[]
smalldatetime Datum/tid
smallint Int16
smallmoney Decimal
Sql_variant Objekt
text Sträng, tecken[]
time TimeSpan
timestamp Byte[]
tinyint Int16
uniqueidentifier GUID
varbinary Byte[]
varchar Sträng, tecken[]
xml String

Kommentar

För datatyper som mappas till decimal interimstypen stöder aktiviteten Kopiera för närvarande precision upp till 28. Om du har data som kräver en precision som är större än 28 kan du överväga att konvertera till en sträng i en SQL-fråga.

Använda Always Encrypted

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

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

  2. Se till att du har bra å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.

Kommentar

SQL Managed Instance Always Encrypted stöder följande scenarier:

  1. Antingen käll- eller mottagardatalager 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 autentiseringstyp för nyckelprovider.
  3. Både käll- och mottagardatalager använder samma tjänsthuvudnamn som nyckelproviderns autentiseringstyp.

Kommentar

För närvarande stöds SQL Managed Instance Always Encrypted endast för källtransformering i 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 automatiskt identifieras och extraheras av ADF-mappningsdataflödet. Utan kodupplevelse i mappning av dataflöde kan användarna enkelt uppnå datareplikeringsscenario från SQL-lager genom att lägga till en databas som mållager. Dessutom kan användarna också skapa datatransformeringslogik mellan för att uppnå inkrementellt ETL-scenario från SQL-lager.

Kontrollera att pipelinen och aktivitetsnamnet är 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 pipelinens namn 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å detta.

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 den publicerade pipelinen startas den automatiskt om från början eller hämtar ändringar från och med nu.

I övervakningsavsnittet har du alltid chansen att köra en pipeline igen. När du gör det registreras 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 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 få datareplikeringsscenario 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 mappningsdataflö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öde på att härleda en kolumn 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:

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