Dela via


Kopiera och transformera data i Snowflake med Hjälp av Azure Data Factory eller Azure 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 aktiviteten Kopiera i Azure Data Factory- och Azure Synapse-pipelines för att kopiera data från och till Snowflake och använda Dataflöde för att transformera data i Snowflake. Mer information finns i introduktionsartikeln för Data Factory eller Azure Synapse Analytics.

Viktigt!

Den nya Snowflake-anslutningsappen ger förbättrat inbyggt Snowflake-stöd. Om du använder den äldre Snowflake-anslutningsappen i din lösning rekommenderar vi att du uppgraderar snowflake-anslutningen så snart som möjligt. Mer information om skillnaden mellan den äldre och den senaste versionen finns i det här avsnittet .

Funktioner som stöds

Den här Snowflake-anslutningsappen stöds för följande funktioner:

Funktioner som stöds IR
aktiviteten Kopiera (källa/mottagare) (1) (2)
Mappa dataflöde (källa/mottagare) (1)
Sökningsaktivitet (1) (2)
Skriptaktivitet (1) (2)

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

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

  • Kopiera data från Snowflake som använder Snowflakes COPY till kommandot [location] för att uppnå bästa prestanda.
  • Kopiera data till Snowflake som drar nytta av Snowflakes COPY till kommandot [table] för att uppnå bästa prestanda. Det stöder Snowflake i Azure.
  • Om en proxy krävs för att ansluta till Snowflake från en lokalt installerad integrationskörning måste du konfigurera miljövariablerna för HTTP_PROXY och HTTPS_PROXY på Integration Runtime-värden.

Förutsättningar

Om ditt datalager finns i ett lokalt nätverk, ett virtuellt Azure-nätverk eller Amazon Virtual Private Cloud måste du konfigurera en lokalt installerad integrationskörning för att ansluta till det. Se till att lägga till DE IP-adresser som den lokalt installerade integrationskörningen använder i listan över tillåtna.

Om ditt datalager är en hanterad molndatatjänst kan du använda Azure Integration Runtime. Om åtkomsten är begränsad till IP-adresser som är godkända i brandväggsreglerna kan du lägga till Azure Integration Runtime-IP-adresser i listan över tillåtna.

Snowflake-kontot som används för Källa eller Mottagare ska ha nödvändig USAGE åtkomst till databasen och läs-/skrivåtkomst för schemat och tabellerna/vyerna under den. Dessutom bör den också ha CREATE STAGE på schemat för att kunna skapa den externa fasen med SAS-URI.

Följande värden för kontoegenskaper måste anges

Property Beskrivning Obligatoriskt Standardvärde
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION Anger om du vill kräva ett lagringsintegreringsobjekt som molnautentiseringsuppgifter när du skapar en namngiven extern fas (med create stage) för att få åtkomst till en lagringsplats för privata moln. FALSKT FALSKT
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION Anger om du behöver använda en namngiven extern fas som refererar till ett lagringsintegreringsobjekt som molnautentiseringsuppgifter vid inläsning av data från eller avlastning av data till en lagringsplats för privata moln. FALSKT FALSKT

Mer information om de nätverkssäkerhetsmekanismer och alternativ som stöds av Data Factory finns i Strategier för dataåtkomst.

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 Snowflake med hjälp av användargränssnittet

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

  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 Snowflake och välj Snowflake-anslutningsappen.

    Skärmbild av Snowflake-anslutningsappen.

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

    Skärmbild av den länkade tjänstkonfigurationen för Snowflake.

Konfigurationsinformation för anslutningsprogram

Följande avsnitt innehåller information om egenskaper som definierar entiteter som är specifika för en Snowflake-anslutning.

Länkade tjänstegenskaper

Dessa allmänna egenskaper stöds för den länkade Snowflake-tjänsten:

Property Beskrivning Obligatoriskt
type Typegenskapen måste vara inställd på SnowflakeV2. Ja
accountIdentifier Namnet på kontot tillsammans med organisationen. Till exempel myorg-account123. Ja
database Standarddatabasen som används för sessionen efter anslutningen. Ja
lager Det virtuella standardlager som används för sessionen efter anslutningen. Ja
authenticationType Typ av autentisering som används för att ansluta till Snowflake-tjänsten. Tillåtna värden är: Basic (standard) och KeyPair. Se motsvarande avsnitt nedan om fler egenskaper respektive exempel. Nej
roll Standardsäkerhetsrollen som används för sessionen efter anslutningen. Nej
connectVia Den integrationskörning som används för att ansluta till datalagret. Du kan använda Azure Integration Runtime eller en lokalt installerad integrationskörning (om ditt datalager finns i ett privat nätverk). Om den inte anges använder den standardkörningen för Azure-integrering. Nej

Den här Snowflake-anslutningsappen stöder följande autentiseringstyper. Mer information finns i motsvarande avsnitt.

Grundläggande autentisering

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

Property Beskrivning Obligatoriskt
användare Inloggningsnamn för Snowflake-användaren. Ja
password Lösenordet för Snowflake-användaren. Markera det här fältet som en SecureString-typ för att lagra det på ett säkert sätt. Du kan också referera till en hemlighet som lagras i Azure Key Vault. Ja

Exempel:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "Basic",
            "user": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            },
            "role": "<role>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Lösenord i Azure Key Vault:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "Basic",
            "user": "<username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                }, 
                "secretName": "<secretName>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Kommentar

Mappning Dataflöde stöder endast grundläggande autentisering.

Autentisering med nyckelpar

Om du vill använda autentisering med nyckelpar måste du konfigurera och skapa en autentiseringsanvändare för nyckelpar i Snowflake genom att referera till nyckelparautentisering och nyckelparrotation. Anteckna sedan den privata nyckeln och lösenfrasen (valfritt) som du använder för att definiera den länkade tjänsten.

Förutom de allmänna egenskaper som beskrivs i föregående avsnitt anger du följande egenskaper:

Property Beskrivning Obligatoriskt
användare Inloggningsnamn för Snowflake-användaren. Ja
privateKey Den privata nyckel som används för nyckelparautentisering.

För att säkerställa att den privata nyckeln är giltig när den skickas till Azure Data Factory, och med tanke på att privateKey-filen innehåller nya radtecken (\n), är det viktigt att formatera privateKey-innehållet korrekt i dess strängliteralform. Den här processen innebär att du lägger till \n explicit till varje ny rad.
Ja
privateKeyPassphrase Lösenfrasen som används för att dekryptera den privata nyckeln, om den är krypterad. Nej

Exempel:

{
    "name": "SnowflakeV2LinkedService",
    "properties": {
        "type": "SnowflakeV2",
        "typeProperties": {
            "accountIdentifier": "<accountIdentifier>",
            "database": "<database>",
            "warehouse": "<warehouse>",
            "authenticationType": "KeyPair",
            "user": "<username>",
            "privateKey": {
                "type": "SecureString",
                "value": "<privateKey>"
            },
            "privateKeyPassphrase": { 
                "type": "SecureString",
                "value": "<privateKeyPassphrase>"
            },
            "role": "<role>"
        },
        "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 att definiera datauppsättningar finns i artikeln Datauppsättningar .

Följande egenskaper stöds för Snowflake-datauppsättningen.

Property Beskrivning Obligatoriskt
type Datamängdens typegenskap måste anges till SnowflakeV2Table. Ja
schema Namnet på schemat. Observera att schemanamnet är skiftlägeskänsligt. Nej för källa, ja för mottagare
table Namnet på tabellen/vyn. Observera att tabellnamnet är skiftlägeskänsligt. Nej för källa, ja för mottagare

Exempel:

{
    "name": "SnowflakeV2Dataset",
    "properties": {
        "type": "SnowflakeV2Table",
        "typeProperties": {
            "schema": "<Schema name for your Snowflake database>",
            "table": "<Table name for your Snowflake database>"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "linkedServiceName": {
            "referenceName": "<name of linked service>",
            "type": "LinkedServiceReference"
        }
    }
}

Kopiera egenskaper för aktivitet

En fullständig lista över avsnitt och egenskaper som är tillgängliga för att definiera aktiviteter finns i artikeln Pipelines . Det här avsnittet innehåller en lista över egenskaper som stöds av Snowflake-källan och mottagaren.

Snowflake som källa

Snowflake Connector använder Snowflakes COPY-kommando till [location] för att uppnå bästa prestanda.

Om datalager och format för mottagare stöds internt av kommandot Snowflake COPY kan du använda aktiviteten Kopiera för att kopiera direkt från Snowflake till mottagare. Mer information finns i Direktkopiering från Snowflake. Annars använder du inbyggd stegvis kopia från Snowflake.

Om du vill kopiera data från Snowflake stöds följande egenskaper i avsnittet aktiviteten Kopiera källa.

Property Beskrivning Obligatoriskt
type Typegenskapen för den aktiviteten Kopiera källan måste anges till SnowflakeV2Source. Ja
query Anger SQL-frågan för att läsa data från Snowflake. Om namnen på schemat, tabellen och kolumnerna innehåller gemener citerar du objektidentifieraren i frågan, t.ex. select * from "schema"."myTable".
Det går inte att köra den lagrade proceduren.
Nej
exportSettings Avancerade inställningar som används för att hämta data från Snowflake. Du kan konfigurera de som stöds av KOMMANDOT KOPIERA till som tjänsten kommer att passera när du anropar -instruktionen. Ja
Under exportSettings:
type Typ av exportkommando, inställt på SnowflakeExportCopyCommand. Ja
storageIntegration Ange namnet på din lagringsintegrering som du skapade i Snowflake. Nödvändiga steg för att använda lagringsintegreringen finns i Konfigurera en Snowflake-lagringsintegrering. Nej
additionalCopyOptions Ytterligare kopieringsalternativ tillhandahålls som en ordlista med nyckel/värde-par. Exempel: MAX_FILE_SIZE, SKRIV ÖVER. Mer information finns i Snowflake-kopieringsalternativ. Nej
additionalFormatOptions Ytterligare filformatalternativ som tillhandahålls för kommandot COPY som en ordlista med nyckel/värde-par. Exempel: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. Mer information finns i Formattypsalternativ för Snowflake. Nej

Kommentar

Kontrollera att du har behörighet att köra följande kommando och komma åt schemat INFORMATION_SCHEMA och tabellen KOLUMNER.

  • COPY INTO <location>

Direktkopia från Snowflake

Om ditt datalager och format för mottagare uppfyller kriterierna som beskrivs i det här avsnittet kan du använda aktiviteten Kopiera för att kopiera direkt från Snowflake till mottagare. Tjänsten kontrollerar inställningarna och misslyckas med aktiviteten Kopiera köras om följande villkor inte uppfylls:

  • När du anger storageIntegration i källan:

    Datalagret för mottagare är Azure Blob Storage som du refererade till i den externa fasen i Snowflake. Du måste utföra följande steg innan du kopierar data:

    1. Skapa en länkad Azure Blob Storage-tjänst för Azure Blob Storage för mottagare med alla autentiseringstyper som stöds.

    2. Bevilja minst rollen Storage Blob Data Contributor till Tjänstens huvudnamn för Snowflake i azure bloblagringsåtkomstkontroll (IAM) för mottagare.

  • När du inte anger storageIntegration i källan:

    Den länkade tjänsten för mottagare är Azure Blob Storage med signaturautentisering för delad åtkomst. Om du vill kopiera data direkt till Azure Data Lake Storage Gen2 i följande format som stöds kan du skapa en länkad Azure Blob Storage-tjänst med SAS-autentisering mot ditt Azure Data Lake Storage Gen2-konto för att undvika att använda mellanlagrade kopior från Snowflake.

  • Dataformatet för mottagare är av Parquet, avgränsad text eller JSON med följande konfigurationer:

    • För Parquet-format är komprimeringskodcen Ingen, Snappy eller Lzo.
    • För avgränsat textformat :
      • rowDelimiter är \r\n eller ett enskilt tecken.
      • compression kan inte vara någon komprimering, gzip, bzip2 eller deflate.
      • encodingName är kvar som standard eller inställd på utf-8.
      • quoteChar är dubbla citattecken, enkla citattecken eller tomma strängar (inget citattecken).
    • För JSON-format stöder direktkopiering endast fallet att snowflake-källtabellen eller frågeresultatet bara har en enda kolumn och datatypen för den här kolumnen är VARIANT, OBJECT eller ARRAY.
      • compression kan inte vara någon komprimering, gzip, bzip2 eller deflate.
      • encodingName är kvar som standard eller inställd på utf-8.
      • filePattern i kopieringsaktivitetsmottagaren lämnas som standard eller inställd på setOfObjects.
  • I kopieringsaktivitetskällan additionalColumns anges inte.

  • Kolumnmappning har inte angetts.

Exempel:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeV2Source",
                "query": "SELECT * FROM MYTABLE",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "additionalCopyOptions": {
                        "MAX_FILE_SIZE": "64000000",
                        "OVERWRITE": true
                    },
                    "additionalFormatOptions": {
                        "DATE_FORMAT": "'MM/DD/YYYY'"
                    },
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Mellanlagrad kopia från Snowflake

När ditt datalager eller format för mottagare inte är inbyggt kompatibelt med kommandot Snowflake COPY, som du nämnde i det förra avsnittet, aktiverar du den inbyggda mellanlagrade kopian med hjälp av en mellanliggande Azure Blob Storage-instans. Den mellanlagrade kopieringsfunktionen ger dig också bättre dataflöde. Tjänsten exporterar data från Snowflake till mellanlagring, kopierar sedan data till mottagare och rensar slutligen dina tillfälliga data från mellanlagringen. Mer information om hur du kopierar data med mellanlagring finns i Mellanlagrad kopia .

Om du vill använda den här funktionen skapar du en länkad Azure Blob Storage-tjänst som refererar till Azure Storage-kontot som mellanlagring. Ange enableStaging sedan egenskaperna och stagingSettings i aktiviteten Kopiera.

  • När du anger storageIntegration i källan ska mellanlagringen av Azure Blob Storage vara den som du hänvisade till i den externa fasen i Snowflake. Se till att du skapar en länkad Azure Blob Storage-tjänst för den med all autentisering som stöds och bevilja minst rollen Storage Blob Data Contributor till Tjänstens huvudnamn för Snowflake i mellanlagringen av Åtkomstkontroll för Azure Blob Storage (IAM).

  • När du inte anger storageIntegration i källan måste den länkade Azure Blob Storage-mellanlagringstjänsten använda signaturautentisering för delad åtkomst, vilket krävs av kommandot Snowflake COPY. Se till att du beviljar rätt åtkomstbehörighet till Snowflake i mellanlagringen av Azure Blob Storage. Mer information om detta finns i den här artikeln.

Exempel:

"activities":[
    {
        "name": "CopyFromSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Snowflake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SnowflakeV2Source",               
                "query": "SELECT * FROM MyTable",
                "exportSettings": {
                    "type": "SnowflakeExportCopyCommand",
                    "storageIntegration": "< Snowflake storage integration name >"                    
                }
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

När du utför en mellanlagrad kopia från Snowflake är det viktigt att ange beteendet för mottagarkopiering till Sammanfoga filer. Den här inställningen säkerställer att alla partitionerade filer hanteras korrekt och sammanfogas, vilket förhindrar problemet där endast den senaste partitionerade filen kopieras.

Exempelkonfiguration

{
    "type": "Copy",
    "source": {
        "type": "SnowflakeSource",
        "query": "SELECT * FROM my_table"
    },
    "sink": {
        "type": "AzureBlobStorage",
        "copyBehavior": "MergeFiles"
    }
}

Kommentar

Om du inte anger beteendet för mottagarkopiering till Sammanfoga filer kan det bara leda till att den senaste partitionerade filen kopieras.

Snowflake som handfat

Snowflake Connector använder Snowflakes COPY-kommando till [table] för att uppnå bästa prestanda. Det stöder skrivning av data till Snowflake i Azure.

Om källdatalagret och formatet stöds internt av kommandot Snowflake COPY kan du använda aktiviteten Kopiera för att kopiera direkt från källan till Snowflake. Mer information finns i Direktkopiering till Snowflake. Annars använder du inbyggd stegvis kopia till Snowflake.

För att kopiera data till Snowflake stöds följande egenskaper i avsnittet aktiviteten Kopiera mottagare.

Property Beskrivning Obligatoriskt
type Typegenskapen för aktiviteten Kopiera mottagare, inställd på SnowflakeV2Sink. Ja
preCopyScript Ange en SQL-fråga för aktiviteten Kopiera som ska köras innan du skriver data till Snowflake i varje körning. Använd den här egenskapen för att rensa inlästa data. Nej
importSettings Avancerade inställningar som används för att skriva data till Snowflake. Du kan konfigurera de som stöds av KOMMANDOT KOPIERA till som tjänsten kommer att passera när du anropar -instruktionen. Ja
Under importSettings:
type Typ av importkommando, inställt på SnowflakeImportCopyCommand. Ja
storageIntegration Ange namnet på din lagringsintegrering som du skapade i Snowflake. Nödvändiga steg för att använda lagringsintegreringen finns i Konfigurera en Snowflake-lagringsintegrering. Nej
additionalCopyOptions Ytterligare kopieringsalternativ tillhandahålls som en ordlista med nyckel/värde-par. Exempel: ON_ERROR, FORCE, LOAD_UNCERTAIN_FILES. Mer information finns i Snowflake-kopieringsalternativ. Nej
additionalFormatOptions Ytterligare filformatalternativ som tillhandahålls till kommandot COPY, som tillhandahålls som en ordlista med nyckel/värde-par. Exempel: DATE_FORMAT, TIME_FORMAT, TIMESTAMP_FORMAT. Mer information finns i Formattypsalternativ för Snowflake. Nej

Kommentar

Kontrollera att du har behörighet att köra följande kommando och komma åt schemat INFORMATION_SCHEMA och tabellen KOLUMNER.

  • SELECT CURRENT_REGION()
  • COPY INTO <table>
  • SHOW REGIONS
  • CREATE OR REPLACE STAGE
  • DROP STAGE

Direktkopia till Snowflake

Om källdatalagret och formatet uppfyller kriterierna som beskrivs i det här avsnittet kan du använda aktiviteten Kopiera för att kopiera direkt från källan till Snowflake. Tjänsten kontrollerar inställningarna och misslyckas med aktiviteten Kopiera köras om följande villkor inte uppfylls:

  • När du anger storageIntegration i mottagaren:

    Källdatalagret är Azure Blob Storage som du refererade till i den externa fasen i Snowflake. Du måste utföra följande steg innan du kopierar data:

    1. Skapa en länkad Azure Blob Storage-tjänst för Azure Blob Storage-källan med alla autentiseringstyper som stöds.

    2. Bevilja minst rollen Storage Blob Data Reader till Tjänstens huvudnamn för Snowflake i azure bloblagringsåtkomstkontroll (IAM) för källan.

  • När du inte anger storageIntegration i mottagaren:

    Den länkade källtjänsten är Azure Blob Storage med signaturautentisering för delad åtkomst. Om du vill kopiera data direkt från Azure Data Lake Storage Gen2 i följande format som stöds kan du skapa en länkad Azure Blob Storage-tjänst med SAS-autentisering mot ditt Azure Data Lake Storage Gen2-konto för att undvika att använda mellanlagrad kopia till Snowflake.

  • Källdataformatet är Parquet, Avgränsad text eller JSON med följande konfigurationer:

    • För Parquet-format är komprimeringskodcen Ingen eller Snappy.

    • För avgränsat textformat :

      • rowDelimiter är \r\n eller ett enskilt tecken. Om radgränsare inte är "\r\n", firstRowAsHeader måste vara false och skipLineCount inte anges.
      • compression kan inte vara någon komprimering, gzip, bzip2 eller deflate.
      • encodingName är kvar som standard eller inställt på "UTF-8", "UTF-16", "UTF-16BE", "UTF-32", "UTF-32BE", "BIG5", "EUC-JP", "EUC-KR", "GB18030", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-1", "ISO-8859-2", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-89", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1252", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255".
      • quoteChar är dubbla citattecken, enkla citattecken eller tomma strängar (inget citattecken).
    • För JSON-format stöder direktkopiering endast skiftläge som sänker Snowflake-tabellen bara har en enda kolumn och datatypen för den här kolumnen är VARIANT, OBJECT eller ARRAY.

      • compression kan inte vara någon komprimering, gzip, bzip2 eller deflate.
      • encodingName är kvar som standard eller inställd på utf-8.
      • Kolumnmappning har inte angetts.
  • I aktiviteten Kopiera källa:

    • additionalColumns har inte angetts.
    • Om källan är en mapp är recursive den inställd på true.
    • prefix, modifiedDateTimeStart, modifiedDateTimeEndoch enablePartitionDiscovery har inte angetts.

Exempel:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeV2Sink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand",
                    "copyOptions": {
                        "FORCE": "TRUE",
                        "ON_ERROR": "SKIP_FILE"
                    },
                    "fileFormatOptions": {
                        "DATE_FORMAT": "YYYY-MM-DD"
                    },
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            }
        }
    }
]

Mellanlagrad kopia till Snowflake

När ditt källdatalager eller -format inte är inbyggt kompatibelt med kommandot Snowflake COPY, som du nämnde i det förra avsnittet, aktiverar du den inbyggda mellanlagrade kopian med hjälp av en tillfällig Azure Blob Storage-instans. Den mellanlagrade kopieringsfunktionen ger dig också bättre dataflöde. Tjänsten konverterar automatiskt data för att uppfylla dataformatkraven för Snowflake. Sedan anropas COPY-kommandot för att läsa in data till Snowflake. Slutligen rensas dina tillfälliga data från bloblagringen. Mer information om hur du kopierar data med mellanlagring finns i Mellanlagrad kopia .

Om du vill använda den här funktionen skapar du en länkad Azure Blob Storage-tjänst som refererar till Azure Storage-kontot som mellanlagring. Ange enableStaging sedan egenskaperna och stagingSettings i aktiviteten Kopiera.

  • När du anger storageIntegration i mottagaren bör mellanlagringen av Azure Blob Storage vara den som du hänvisade till i den externa fasen i Snowflake. Se till att du skapar en länkad Azure Blob Storage-tjänst för den med all autentisering som stöds och bevilja minst rollen Storage Blob Data Reader till Snowflake-tjänstens huvudnamn i mellanlagringen av Åtkomstkontroll för Azure Blob Storage (IAM).

  • När du inte anger storageIntegration i mottagaren måste den länkade Azure Blob Storage-mellanlagringstjänsten använda signaturautentisering för delad åtkomst enligt vad som krävs av kommandot Snowflake COPY.

Exempel:

"activities":[
    {
        "name": "CopyToSnowflake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Snowflake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SnowflakeV2Sink",
                "importSettings": {
                    "type": "SnowflakeImportCopyCommand",
                    "storageIntegration": "< Snowflake storage integration name >"
                }
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Mappa dataflödesegenskaper

När du transformerar data i dataflödet för mappning kan du läsa från och skriva till tabeller i Snowflake. Mer information finns i källtransformering och mottagartransformation i mappning av dataflöden. Du kan välja att använda en Snowflake-datauppsättning eller en infogad datauppsättning som käll- och mottagartyp.

Källtransformering

I tabellen nedan visas de egenskaper som stöds av Snowflake-källan. Du kan redigera dessa egenskaper på fliken Källalternativ. Anslutningsappen använder intern dataöverföring i Snowflake.

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 Datamängden Snowflake eller i källalternativen när du använder infogad datauppsättning. Nej String (endast för infogad datamängd)
tableName
schemaName
Fråga Om du väljer Fråga som indata anger du en fråga för att hämta data från Snowflake. Den här inställningen åsidosätter alla tabeller som du har valt i datauppsättningen.
Om namnen på schemat, tabellen och kolumnerna innehåller gemener citerar du objektidentifieraren i frågan, t.ex. select * from "schema"."myTable".
Nej String query
Aktivera inkrementellt extrahering (förhandsversion) 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 Booleskt enableCdc
Inkrementell kolumn När du använder funktionen för inkrementell extrahering måste du välja den datum/tid/numeriska kolumn som du vill använda som vattenstämpel i källtabellen. Nej String waterMarkColumn
Aktivera Snowflake Ändringsspårning (förhandsversion) Med det här alternativet kan ADF använda Snowflakes teknik för att ändra datainsamling för att endast bearbeta deltadata sedan den föregående pipelinekörningen. Det här alternativet läser automatiskt in deltadata med radinfognings-, uppdaterings- och borttagningsåtgärder utan att det krävs någon inkrementell kolumn. Nej Booleskt enableNativeCdc
Nettoändringar När du använder spårning av snowflake-ändringar kan du använda det här alternativet för att hämta deduplicerade ändrade rader eller omfattande ändringar. Deduplicerade ändrade rader visar endast de senaste versionerna av raderna som har ändrats sedan en viss tidpunkt, medan omfattande ändringar visar alla versioner av varje rad som har ändrats, inklusive de som har tagits bort eller uppdaterats. Om du till exempel uppdaterar en rad visas en borttagningsversion och en infogningsversion i omfattande ändringar, men endast infogningsversionen i deduplicerade ändrade rader. Beroende på ditt användningsfall kan du välja det alternativ som passar dina behov. Standardalternativet är falskt, vilket innebär fullständiga ändringar. Nej Booleskt netChanges
Inkludera systemkolumner När du använder snowflake-ändringsspårning kan du använda alternativet systemColumns för att styra om metadataströmkolumnerna som tillhandahålls av Snowflake inkluderas eller exkluderas i utdata för ändringsspårning. Som standard är systemColumns inställt på true, vilket innebär att kolumnerna för metadataström ingår. Du kan ange systemColumns till false om du vill exkludera dem. Nej Booleskt systemColumns
Börja läsa från början Om du anger det här alternativet med inkrementell extrahering och ändringsspårning instrueras ADF att läsa alla rader vid första körningen av en pipeline med inkrementellt extrahering aktiverat. Nej Booleskt skipInitialLoad

Exempel på Snowflake-källskript

När du använder Snowflake-datauppsättningen som källtyp är det associerade dataflödesskriptet:

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

Om du använder infogad datauppsättning är det associerade dataflödesskriptet:

source(allowSchemaDrift: true,
	validateSchema: false,
	format: 'query',
	query: 'select * from MYTABLE',
	store: 'snowflake') ~> SnowflakeSource

Intern Ändringsspårning

Azure Data Factory har nu stöd för en inbyggd funktion i Snowflake som kallas ändringsspårning, vilket innebär spårning av ändringar i form av loggar. Med den här funktionen i snowflake kan vi spåra ändringar i data över tid, vilket gör det användbart för inkrementell datainläsning och granskning. När du aktiverar Ändra datainsamling och väljer Snowflake-Ändringsspårning skapar vi ett Stream-objekt för källtabellen som möjliggör ändringsspårning i snowflake-källtabellen. Därefter använder vi CHANGES-satsen i vår fråga för att hämta endast nya eller uppdaterade data från källtabellen. Vi rekommenderar också att du schemalägger pipelinen så att ändringar förbrukas inom intervallet för datakvarhållningstid som angetts för snowflake-källtabellen, annars kan användaren se inkonsekvent beteende i insamlade ändringar.

Transformering av mottagare

I tabellen nedan visas de egenskaper som stöds av Snowflake-mottagare. Du kan redigera de här egenskaperna på fliken Inställningar . När du använder infogad datauppsättning visas ytterligare inställningar, som är samma som egenskaperna som beskrivs i avsnittet egenskaper för datamängd. Anslutningsappen använder intern dataöverföring i Snowflake.

Name beskrivning Obligatoriskt Tillåtna värden Egenskap för dataflödesskript
Uppdatera metod Ange vilka åtgärder som tillåts på ditt Snowflake-mål.
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 kan tas bort
infogningsbar
kan uppdateras
upsertable
Nyckelkolumner För uppdateringar, upserts och borttagningar måste en nyckelkolumn eller kolumner anges för att avgöra vilken rad som ska ändras. Nej Matris keys
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

Exempel på snowflake-mottagarskript

När du använder Snowflake-datauppsättningen som mottagartyp är det associerade dataflödesskriptet:

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

Om du använder infogad datauppsättning är det associerade dataflödesskriptet:

IncomingStream sink(allowSchemaDrift: true,
	validateSchema: false,
	format: 'table',
	tableName: 'table',
	schemaName: 'schema',
	deletable: true,
	insertable: true,
	updateable: true,
	upsertable: false,
	store: 'snowflake',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> SnowflakeSink

Optimering av pushdown-frågor

Genom att ange loggningsnivån för pipelinen till Ingen exkluderar vi överföringen av mellanliggande transformeringsmått, förhindrar potentiella hinder för Spark-optimeringar och aktiverar optimering av pushdown-frågor som tillhandahålls av Snowflake. Den här pushdown-optimeringen möjliggör betydande prestandaförbättringar för stora Snowflake-tabeller med omfattande datauppsättningar.

Kommentar

Vi stöder inte tillfälliga tabeller i Snowflake eftersom de är lokala för sessionen eller användaren som skapar dem, vilket gör dem otillgängliga för andra sessioner och är benägna att skrivas över som vanliga tabeller av Snowflake. Även om Snowflake erbjuder tillfälliga tabeller som ett alternativ, som är tillgängliga globalt, kräver de manuell borttagning, vilket strider mot vårt primära mål att använda Temp-tabeller, vilket är att undvika borttagningsåtgärder i källschemat.

Egenskaper för uppslagsaktivitet

Mer information om egenskaperna finns i Sökningsaktivitet.

Uppgradera Snowflake-anslutningsappen

Om du vill uppgradera Snowflake-anslutningsappen kan du göra en sida-vid-sida-uppgradering eller en uppgradering på plats.

Sida vid sida-uppgradering

Utför följande steg för att utföra en sida vid sida-uppgradering:

  1. Skapa en ny Snowflake-länkad tjänst och konfigurera den genom att referera till de länkade tjänstegenskaperna.
  2. Skapa en datauppsättning baserat på den nyligen skapade snowflake-länkade tjänsten.
  3. Ersätt den nya länkade tjänsten och datauppsättningen med de befintliga i pipelines som riktar sig mot de äldre objekten.

Uppgradering på plats

Om du vill utföra en uppgradering på plats måste du redigera den befintliga länkade tjänstnyttolasten och uppdatera datauppsättningen för att använda den nya länkade tjänsten.

  1. Uppdatera typen från Snowflake till SnowflakeV2.

  2. Ändra den länkade tjänstens nyttolast från det äldre formatet till det nya mönstret. Du kan antingen fylla i varje fält från användargränssnittet när du har ändrat den typ som nämns ovan eller uppdatera nyttolasten direkt via JSON-redigeraren. Se avsnittet Länkade tjänstegenskaper i den här artikeln för de anslutningsegenskaper som stöds. Följande exempel visar skillnaderna i nyttolast för äldre och nya Snowflake-länkade tjänster:

    Äldre snowflake länkad tjänst JSON-nyttolast:

      {
         "name": "Snowflake1",
         "type": "Microsoft.DataFactory/factories/linkedservices",
         "properties": {
             "annotations": [],
             "type": "Snowflake",
             "typeProperties": {
                 "authenticationType": "Basic",
                 "connectionString": "jdbc:snowflake://<fake_account>.snowflakecomputing.com/?user=FAKE_USER&db=FAKE_DB&warehouse=FAKE_DW&schema=PUBLIC",
                 "encryptedCredential": "<your_encrypted_credential_value>"
             },
             "connectVia": {
                 "referenceName": "AzureIntegrationRuntime",
                 "type": "IntegrationRuntimeReference"
             }
         }
     }
    

    Ny snowflake länkad tjänst JSON-nyttolast:

     {
         "name": "Snowflake2",
         "type": "Microsoft.DataFactory/factories/linkedservices",
         "properties": {
             "parameters": {
                 "schema": {
                     "type": "string",
                     "defaultValue": "PUBLIC"
                 }
             },
             "annotations": [],
             "type": "SnowflakeV2",
             "typeProperties": {
                 "authenticationType": "Basic",
                 "accountIdentifier": "<FAKE_Account>",
                 "user": "FAKE_USER",
                 "database": "FAKE_DB",
                 "warehouse": "FAKE_DW",
                 "encryptedCredential": "<placeholder>"
             },
             "connectVia": {
                 "referenceName": "AutoResolveIntegrationRuntime",
                 "type": "IntegrationRuntimeReference"
             }
         }
     }
    
  3. Uppdatera datauppsättningen så att den nya länkade tjänsten används. Du kan antingen skapa en ny datauppsättning baserat på den nyligen skapade länkade tjänsten eller uppdatera en befintlig datauppsättnings typegenskap från SnowflakeTable till SnowflakeV2Table.

Skillnader mellan Snowflake och Snowflake (äldre)

Snowflake-anslutningsappen erbjuder nya funktioner och är kompatibel med de flesta funktioner i Snowflake(äldre) anslutningsprogram. Tabellen nedan visar funktionsskillnaderna mellan Snowflake och Snowflake (äldre).

Snowflake Snowflake (äldre)
Stöd för autentisering med grundläggande och nyckelpar. Stöd för grundläggande autentisering.
Skriptparametrar stöds för närvarande inte i Skriptaktivitet. Du kan också använda dynamiska uttryck för skriptparametrar. Mer information finns i Uttryck och funktioner i Azure Data Factory och Azure Synapse Analytics. Stöd för skriptparametrar i skriptaktivitet.
Stöd för BigDecimal i uppslagsaktivitet. NUMBER-typen, enligt definitionen i Snowflake, visas som en sträng i uppslagsaktiviteten. BigDecimal stöds inte i uppslagsaktivitet.
Äldre connectionstring egenskap är inaktuell till förmån för obligatoriska parametrar Konto, Lager, Databas, Schema och Roll I den äldre Snowflake-anslutningsappen användes egenskapen connectionstring för att upprätta en anslutning.

En lista över datalager som stöds som källor och mottagare efter aktiviteten Kopiera finns i datalager och format som stöds.