Séma- és adattípus-leképezés másolási tevékenységben

A következőkre vonatkozik: Azure Data Factory Azure Synapse Analytics

Tipp.

Próbálja ki a Data Factoryt a Microsoft Fabricben, amely egy teljes körű elemzési megoldás a nagyvállalatok számára. A Microsoft Fabric az adattovábbítástól az adatelemzésig, a valós idejű elemzésig, az üzleti intelligenciáig és a jelentéskészítésig mindent lefed. Ismerje meg, hogyan indíthat új próbaverziót ingyenesen!

Ez a cikk azt ismerteti, hogy az Azure Data Factory másolási tevékenysége hogyan hajtja végre a sémaleképezést és az adattípus-leképezést a forrásadatoktól a fogadó adatokig.

Séma-hozzárendelés

Alapértelmezett leképezés

Alapértelmezés szerint a másolási tevékenység a forrásadatokat oszlopnevek szerint, kis- és nagybetűk szerint leképezi. Ha a fogadó nem létezik, például fájlba ír, a forrásmezőnevek fogadónévként megmaradnak. Ha a fogadó már létezik, a forrásból másolt összes oszlopot tartalmaznia kell. Az ilyen alapértelmezett leképezés támogatja a rugalmas sémákat és a sémák forrásról fogadóra való eltérését a végrehajtástól a végrehajtásig – a forrásadattár által visszaadott összes adat átmásolható a fogadóba.

Ha a forrás fejlécsor nélküli szövegfájl, explicit leképezésre van szükség, mivel a forrás nem tartalmaz oszlopneveket.

Explicit leképezés

Explicit leképezést is megadhat az oszlop-/mezőleképezés forrásról fogadóra való testreszabásához az igényeinek megfelelően. Explicit leképezéssel csak részleges forrásadatokat másolhat a fogadóba, vagy leképezheti a forrásadatokat különböző nevű fogadóba, vagy átformálhatja a táblázatos/hierarchikus adatokat. Copy tevékenység:

  1. Beolvassa az adatokat a forrásból, és meghatározza a forrássémát.
  2. Alkalmazza a definiált leképezést.
  3. Az adatokat a fogadóba írja.

Learn more about:

A leképezést konfigurálhatja a Szerzői felhasználói felületen –> másolási tevékenység –> leképezés lapon, vagy programozott módon megadhatja a leképezést a másolási tevékenységben –>translator tulajdonságban. A következő tulajdonságok támogatottak a tömbökbenmappings> –> objektumokban translator –>source és sink, amelyek az adatok leképezéséhez az adott oszlopra/mezőre mutatnak.

Property Leírás Required
név A forrás vagy fogadó oszlop/mező neve. Alkalmazzon táblázatos forrásra és fogadóra. Igen
Ordinális Oszlopindex. 1-től kezdve.
Ha elválasztójeles szöveget használ fejlécsor nélkül, alkalmazza és kötelező megadni.
Nem
ösvény JSON-elérésiút-kifejezés minden kinyerni vagy leképíteni kívánt mezőhöz. Hierarchikus forrás és fogadó, például Azure Cosmos DB, MongoDB vagy REST-összekötők esetén alkalmazható.
A gyökérobjektum alatti mezők esetében a JSON-elérési út gyökérrel $kezdődik; a tulajdonság által collectionReference kiválasztott tömbben lévő mezők esetében a JSON-elérési út a tömbelemből $indul ki.
Nem
típus A forrás vagy fogadó oszlop köztes adattípusa. Általában nem kell megadnia vagy módosítania ezt a tulajdonságot. További információ az adattípus-leképezésről. Nem
Kultúra A forrás vagy fogadó oszlop kultúrája. Akkor alkalmazható, ha a típus vagy Datetimeoffseta Datetime . Az alapértelmezett érték en-us.
Általában nem kell megadnia vagy módosítania ezt a tulajdonságot. További információ az adattípus-leképezésről.
Nem
format Formázási sztring, amelyet akkor kell használni, ha a típus vagy Datetimeoffseta Datetime . Tekintse meg az egyéni dátum- és időformátum-sztringeket a datetime formázásával kapcsolatban. Általában nem kell megadnia vagy módosítania ezt a tulajdonságot. További információ az adattípus-leképezésről. Nem

A következő tulajdonságok a következők mellett támogatottak translatormappings:

Property Leírás Required
collectionReference Alkalmazza az adatokat hierarchikus forrásból, például az Azure Cosmos DB-ből, a MongoDB-ből vagy a REST-összekötőkből való másoláskor.
Ha ugyanazt a mintát tartalmazó tömbmezőben lévő objektumokból szeretne adatokat iterálni és kinyerni, és objektumonként soronként átalakítani, adja meg a tömb JSON-elérési útját, hogy kereszten alkalmazhassa a tömböt.
Nem

Táblázatos forrásból táblázatos fogadóba

Ha például adatokat szeretne másolni a Salesforce-ból az Azure SQL Database-be, és explicit módon megfeleltet három oszlopot:

  1. A másolási tevékenység –> Leképezés lapon kattintson a Sémák importálása gombra a forrás- és fogadóséma importálásához.

  2. Megfeleltetheti a szükséges mezőket, és kizárhatja/törölheti a többit.

Map tabular to tabular

Ugyanaz a leképezés konfigurálható, mint a másolási tevékenység hasznos adataiban (lásd translator: ):

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "SalesforceSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "name": "Id" },
                    "sink": { "name": "CustomerID" }
                },
                {
                    "source": { "name": "Name" },
                    "sink": { "name": "LastName" }
                },
                {
                    "source": { "name": "LastModifiedDate" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

Ha a tagolt szövegfájl(ok)ból fejlécsor nélkül szeretne adatokat másolni, az oszlopokat a nevek helyett sorszám jelöli.

{
    "name": "CopyActivityTabularToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "DelimitedTextSource" },
        "sink": { "type": "SqlSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "ordinal": "1" },
                    "sink": { "name": "CustomerID" }
                }, 
                {
                    "source": { "ordinal": "2" },
                    "sink": { "name": "LastName" }
                }, 
                {
                    "source": { "ordinal": "3" },
                    "sink": { "name": "ModifiedDate" }
                }
            ]
        }
    },
    ...
}

Hierarchikus forrás a táblázatos fogadóhoz

Ha hierarchikus forrásból táblázatos fogadóba másol adatokat, a másolási tevékenység a következő képességeket támogatja:

  • Adatok kinyerása objektumokból és tömbökből.
  • A kereszt több objektumot alkalmaz ugyanazzal a mintával egy tömbből, ebben az esetben egy JSON-objektumot több rekordmá alakíthat táblázatos eredményként.

A fejlettebb hierarchikus-táblázatos átalakításhoz használhatja a Adatfolyam.

Ha például forrás MongoDB-dokumentuma a következő tartalommal rendelkezik:

{
    "id": {
        "$oid": "592e07800000000000000000"
    },
    "number": "01",
    "date": "20170122",
    "orders": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "name": "Seattle" } ]
}

A tömbben lévő adatok (order_pd és order_price) összesimításával és a gyakori gyökéradatokkal (szám, dátum és város) való keresztillesztéssel pedig a következő formátumú szövegfájlba szeretné másolni:

orderNumber orderDate order_pd order_price Város
01 20170122 P1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

Az ilyen leképezést a Data Factory szerzői felhasználói felületén határozhatja meg:

  1. A másolási tevékenység –> Leképezés lapon kattintson a Sémák importálása gombra a forrás- és fogadóséma importálásához. Mivel a szolgáltatás a séma importálásakor az első néhány objektumot mintaként használja, ha egy mező nem jelenik meg, felveheti a hierarchiában a megfelelő rétegbe – mutasson egy meglévő mező nevére, és válasszon csomópontot, objektumot vagy tömböt.

  2. Jelölje ki azt a tömböt, amelyből adatokat szeretne iterálni és kinyerni. A rendszer automatikusan kitölti gyűjteményhivatkozásként. Vegye figyelembe, hogy az ilyen műveletekhez csak egyetlen tömb használható.

  3. A szükséges mezők leképezése a fogadóhoz. A szolgáltatás automatikusan meghatározza a hierarchikus oldal megfelelő JSON-elérési útvonalait.

Megjegyzés:

Az olyan rekordok esetében, ahol a gyűjteményhivatkozásként megjelölt tömb üres, és a jelölőnégyzet be van jelölve, a rendszer kihagyja a teljes rekordot.

Map hierarchical to tabular using UI

A Speciális szerkesztőre is válthat, ebben az esetben közvetlenül megtekintheti és szerkesztheti a mezők JSON-útvonalait. Ha új leképezést szeretne hozzáadni ebben a nézetben, adja meg a JSON elérési útját.

Map hierarchical to tabular using advanced editor

Ugyanaz a leképezés konfigurálható, mint a másolási tevékenység hasznos adataiban (lásd translator: ):

{
    "name": "CopyActivityHierarchicalToTabular",
    "type": "Copy",
    "typeProperties": {
        "source": { "type": "MongoDbV2Source" },
        "sink": { "type": "DelimitedTextSink" },
        "translator": {
            "type": "TabularTranslator",
            "mappings": [
                {
                    "source": { "path": "$['number']" },
                    "sink": { "name": "orderNumber" }
                },
                {
                    "source": { "path": "$['date']" },
                    "sink": { "name": "orderDate" }
                },
                {
                    "source": { "path": "['prod']" },
                    "sink": { "name": "order_pd" }
                },
                {
                    "source": { "path": "['price']" },
                    "sink": { "name": "order_price" }
                },
                {
                    "source": { "path": "$['city'][0]['name']" },
                    "sink": { "name": "city" }
                }
            ],
            "collectionReference": "$['orders']"
        }
    },
    ...
}

Táblázatos/hierarchikus forrás a hierarchikus fogadóhoz

A felhasználói élmény folyamata a hierarchikus forráshoz és a táblázatos fogadóhoz hasonló.

Ha táblázatos forrásból hierarchikus fogadóba másol adatokat, az objektumon belüli tömbbe való írás nem támogatott.

Ha hierarchikus forrásból hierarchikus fogadóba másol adatokat, a teljes réteg hierarchiáját megőrizheti úgy, hogy kiválasztja az objektumot/tömböt, és a belső mezők érintése nélkül leképezi a fogadóba.

A fejlettebb adatátalakításhoz használhatja a Adatfolyam.

Megfeleltetés paraméterezése

Ha olyan templatizált folyamatot szeretne létrehozni, amely nagy számú objektumot szeretne dinamikusan másolni, határozza meg, hogy használhatja-e az alapértelmezett leképezést, vagy explicit leképezést kell meghatároznia a megfelelő objektumokhoz.

Ha explicit leképezésre van szükség, a következő műveleteket végezheti el:

  1. Definiáljon egy olyan paramétert, amelynek objektumtípusa a folyamat szintjén van, például mapping: .

  2. A leképezés paraméterezése: másolási tevékenység –> leképezés lap, dinamikus tartalom hozzáadása és a fenti paraméter kiválasztása. A tevékenység hasznos adatai a következők:

    {
        "name": "CopyActivityHierarchicalToTabular",
        "type": "Copy",
        "typeProperties": {
            "source": {...},
            "sink": {...},
            "translator": {
                "value": "@pipeline().parameters.mapping",
                "type": "Expression"
            },
            ...
        }
    }
    
  3. Hozza létre a leképezési paraméterbe továbbítandó értéket. A definíció teljes objektumának translator kell lennie, tekintse meg az explicit leképezési szakaszban található mintákat. Például a táblázatos forrás és a táblázatos fogadó másolása esetén az értéknek a következőnek kell lennie {"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]}: .

Adattípus-leképezés

Copy tevékenység a következő folyamattal végez forrástípusokat a fogadótípusok leképezéséhez:

  1. Konvertálás a forrás natív adattípusaiból az Azure Data Factory és a Synapse-folyamatok által használt köztes adattípusokká.
  2. Szükség szerint automatikusan átalakítja a köztes adattípust a megfelelő fogadótípusoknak megfelelően, amelyek az alapértelmezett leképezésre és az explicit leképezésre is alkalmazhatók.
  3. Konvertálás köztes adattípusokról fogadó natív adattípusokká.

Copy tevékenység jelenleg a következő köztes adattípusokat támogatja: Logikai, Bájt, Bájttömb, Datetime, DatetimeOffset, Decimális, Dupla, GUID, Int16, Int32, Int64, SByte, Single, String, Timespan, UInt16, UInt32 és UInt64.

A forrástól a fogadóig tartó köztes típusok között az alábbi adattípus-átalakítások támogatottak.

Forrás\Fogadó Logikai Bájttömb Decimális Dátum/idő (1) Lebegőpontos (2) GUID Egész szám (3) Sztring időtartam
Logikai
Bájttömb
Dátum/idő
Decimális
Lebegőpontos
GUID
Egész
Sztring
időtartam

(1) A dátum/idő tartalmazza a DateTime és a DateTimeOffset értéket.

(2) Az úszó pont magában foglalja az egy- és a dupla pontot.

(3) Az egész szám magában foglalja az SByte, a Bájt, az Int16, az UInt16, az Int32, az UInt32, az Int64 és az UInt64 értéket.

Megjegyzés:

  • Jelenleg az ilyen adattípus-átalakítás támogatott a táblázatos adatok közötti másoláskor. A hierarchikus források/fogadók nem támogatottak, ami azt jelenti, hogy nincs rendszer által definiált adattípus-átalakítás a forrás és a fogadó köztes típusai között.
  • Ez a funkció a legújabb adathalmaz-modellel működik. Ha nem látja ezt a beállítást a felhasználói felületen, próbáljon meg létrehozni egy új adatkészletet.

Az adattípus-átalakítás másolási tevékenységében a következő tulajdonságok támogatottak ( translator a programozott szerzői műveletek szakaszában):

Property Leírás Required
typeConversion Engedélyezze az új adattípus-átalakítási felületet.
Az alapértelmezett érték a visszamenőleges kompatibilitás miatt hamis.

A Data Factory felhasználói felületén 2020. június vége óta létrehozott új másolási tevékenységek esetében ez az adattípus-átalakítás alapértelmezés szerint engedélyezve van a legjobb élmény érdekében, és a másolási tevékenység alábbi típuskonvertálási beállításai láthatók –> a vonatkozó forgatókönyvek leképezési lapja.
A folyamat programozott létrehozásához explicit módon igaz értékre kell állítania typeConversion a tulajdonságot az engedélyezéshez.
A funkció megjelenése előtt létrehozott meglévő másolási tevékenységek esetében a szövegkonvertálási beállítások nem fognak megjelenni a szerzői felhasználói felületen a visszamenőleges kompatibilitás érdekében.
Nem
typeConversion Gépház Típuskonvertálási beállítások csoportja. Alkalmazza, ha typeConversion be van állítva.true Az alábbi tulajdonságok mind ebbe a csoportba tartoznak. Nem
Alatta typeConversionSettings
allowDataTruncation Az adatok csonkolásának engedélyezése, ha a forrásadatokat más típusú fogadóvá konvertálja a másolás során, például decimálisról egész számra, DatetimeOffsetről Datetime-ra.
Az alapértelmezett érték igaz.
Nem
treatBooleanAsNumber A logikai értékeket számként, például igazként, 1-ként kezelje.
Az alapértelmezett érték hamis.
Nem
dateTimeFormat Sztring formázása időzóna eltolás nélküli dátumok és sztringek közötti konvertáláskor, például yyyy-MM-dd HH:mm:ss.fff. Részletes információkért tekintse meg az egyéni dátum- és időformátum sztringeket . Nem
dateTimeOffsetFormat Sztring formázása az időzóna eltolásával és sztringekkel rendelkező dátumok közötti konvertáláskor, például yyyy-MM-dd HH:mm:ss.fff zzz. Részletes információkért tekintse meg az egyéni dátum- és időformátum sztringeket . Nem
timeSpanFormat Sztring formázása időszakok és sztringek közötti konvertáláskor, például dd\.hh\:mm. Részletes információkért tekintse meg a Custom TimeSpan Format Sztringeket . Nem
Kultúra A típusok konvertálásához használandó kulturális információk, például en-usfr-fra . Nem

Példa

{
    "name": "CopyActivity",
    "type": "Copy",
    "typeProperties": {
        "source": {
        	"type": "ParquetSource"
        },
        "sink": {
            "type": "SqlSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "typeConversion": true,
            "typeConversionSettings": {
                "allowDataTruncation": true,
                "treatBooleanAsNumber": true,
                "dateTimeFormat": "yyyy-MM-dd HH:mm:ss.fff",
                "dateTimeOffsetFormat": "yyyy-MM-dd HH:mm:ss.fff zzz",
                "timeSpanFormat": "dd\.hh\:mm",
                "culture": "en-gb"
            }
        }
	},
    ...
}

Örökölt modellek

Megjegyzés:

A forrásoszlopok/mezők fogadóhoz való leképezéséhez az alábbi modellek továbbra is támogatottak, ahogyan a visszamenőleges kompatibilitás is. Javasoljuk, hogy a sémaleképezésben említett új modellt használja. A szerzői felhasználói felület az új modell létrehozására váltott.

Alternatív oszlopleképezés (örökölt modell)

A táblázatos alakzatú adatok közötti leképezéshez megadhatja a másolási tevékenységet .>translator>columnMappings Ebben az esetben a "struktúra" szakaszra mind a bemeneti, mind a kimeneti adatkészletek esetében szükség van. Az oszlopleképezés támogatja a forrásadatkészlet "struktúra" oszlopainak teljes vagy részhalmazának leképezését a fogadó adathalmaz "struktúra" összes oszlopára. A következő hibafeltételek kivételt eredményeznek:

  • A forrásadattár lekérdezési eredménye nem rendelkezik a bemeneti adatkészlet "struktúra" szakaszában megadott oszlopnévvel.
  • A fogadóadattár (ha előre definiált sémával rendelkezik) nem rendelkezik a kimeneti adathalmaz "struktúra" szakaszában megadott oszlopnévvel.
  • A fogadó adathalmaz "szerkezetében" a leképezésben megadottnál kevesebb vagy több oszlop szerepel.
  • Duplikált leképezés.

Az alábbi példában a bemeneti adatkészlet struktúrája egy helyszíni Oracle-adatbázisban lévő táblára mutat.

{
    "name": "OracleDataset",
    "properties": {
        "structure":
         [
            { "name": "UserId"},
            { "name": "Name"},
            { "name": "Group"}
         ],
        "type": "OracleTable",
        "linkedServiceName": {
            "referenceName": "OracleLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SourceTable"
        }
    }
}

Ebben a mintában a kimeneti adatkészlet struktúrája egy Salesforce-táblára mutat.

{
    "name": "SalesforceDataset",
    "properties": {
        "structure":
        [
            { "name": "MyUserId"},
            { "name": "MyName" },
            { "name": "MyGroup"}
        ],
        "type": "SalesforceObject",
        "linkedServiceName": {
            "referenceName": "SalesforceLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "tableName": "SinkTable"
        }
    }
}

Az alábbi JSON egy másolási tevékenységet határoz meg egy folyamatban. A forrásból a fogadóban lévő oszlopokra leképezett oszlopok a translator ->columnMappings tulajdonság használatával.

{
    "name": "CopyActivity",
    "type": "Copy",
    "inputs": [
        {
            "referenceName": "OracleDataset",
            "type": "DatasetReference"
        }
    ],
    "outputs": [
        {
            "referenceName": "SalesforceDataset",
            "type": "DatasetReference"
        }
    ],
    "typeProperties":    {
        "source": { "type": "OracleSource" },
        "sink": { "type": "SalesforceSink" },
        "translator":
        {
            "type": "TabularTranslator",
            "columnMappings":
            {
                "UserId": "MyUserId",
                "Group": "MyGroup",
                "Name": "MyName"
            }
        }
    }
}

Ha az oszlopleképezés szintaxisát "columnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName" használja, az továbbra is támogatott.

Alternatív sémaleképezés (örökölt modell)

Megadhatja a másolási tevékenységet –>translator>schemaMapping a hierarchikus alakú adatok és a táblázatos alakzatú adatok közötti leképezéshez, például a MongoDB/REST fájlból a szövegfájlba való másoláshoz, illetve az Oracle-ből a MongoDB-hez készült Azure Cosmos DB-be való másoláshoz. A másolási tevékenység translator szakasz a következő tulajdonságokat támogatja:

Property Leírás Required
típus A másolási tevékenység fordítójának típustulajdonságának a következőnek kell lennie: TabularTranslator Igen
schemaMapping Kulcs-érték párok gyűjteménye, amely a forrás és a fogadó oldal közötti leképezési relációt jelöli.
- Kulcs: a forrást jelöli. Táblázatos forrás esetén adja meg az adathalmaz szerkezetében definiált oszlopnevet; hierarchikus forrás esetén adja meg az egyes kinyerni és leképezendő mezőkhöz tartozó JSON-elérési utat.
- Érték: a fogadót jelöli. Táblázatos fogadó esetén adja meg az adathalmaz szerkezetében definiált oszlopnevet; hierarchikus fogadó esetén adja meg az egyes kinyerni és leképezendő mezőkhöz tartozó JSON-elérési utat.
Hierarchikus adatok esetén a gyökérobjektum alatti mezők esetében a JSON-elérési út a $gyökérrel kezdődik; a tulajdonság által collectionReference kiválasztott tömbben lévő mezők esetében a JSON-elérési út a tömbelemből indul ki.
Igen
collectionReference Ha ugyanazt a mintát tartalmazó tömbmezőben lévő objektumokból szeretne adatokat iterálni és kinyerni, és objektumonként soronként átalakítani, adja meg a tömb JSON-elérési útját, hogy kereszten alkalmazhassa a tömböt. Ez a tulajdonság csak akkor támogatott, ha a hierarchikus adatok forrásként jelennek meg. Nem

Példa: másolás a MongoDB-ből az Oracle-be:

Ha például MongoDB-dokumentuma a következő tartalommal rendelkezik:

{
    "id": {
        "$oid": "592e07800000000000000000"
    },
    "number": "01",
    "date": "20170122",
    "orders": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "name": "Seattle" } ]
}

és a tömbön belüli adatok (order_pd és order_price) összesimításával és a gyakori gyökéradatokkal (szám, dátum és város) való keresztillesztéssel a következő formátumban szeretné átmásolni egy Azure SQL-táblába:

orderNumber orderDate order_pd order_price Város
01 20170122 P1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

Konfigurálja a sémaleképezési szabályt a következő másolási tevékenység JSON-mintájaként:

{
    "name": "CopyFromMongoDBToOracle",
    "type": "Copy",
    "typeProperties": {
        "source": {
            "type": "MongoDbV2Source"
        },
        "sink": {
            "type": "OracleSink"
        },
        "translator": {
            "type": "TabularTranslator",
            "schemaMapping": {
                "$.number": "orderNumber",
                "$.date": "orderDate",
                "prod": "order_pd",
                "price": "order_price",
                "$.city[0].name": "city"
            },
            "collectionReference":  "$.orders"
        }
    }
}

Lásd a másolási tevékenységről szóló további cikkeket: