Aracılığıyla paylaş


Kopyalama etkinliğinde şema ve veri türü eşlemesi

GEÇERLİ OLDUĞU YERLER: Azure Data Factory Azure Synapse Analytics

Tip

Kuruluşlar için hepsi bir arada analiz çözümü olan Microsoft Fabric'te Data Factory'yi deneyin. Microsoft Fabric , veri taşımadan veri bilimine, gerçek zamanlı analize, iş zekasına ve raporlamaya kadar her şeyi kapsar. Yeni bir deneme sürümünü ücretsiz olarak başlatmayı öğrenin!

Bu makalede, Azure Data Factory kopyalama etkinliğinin kaynak verilerden havuz verilerine şema eşlemesi ve veri türü eşlemesi gerçekleştirmesi açıklanmaktadır.

Şema eşleştirme

Varsayılan eşleme

By default, copy activity maps source data to sink by column names in case-sensitive manner. If sink doesn't exist, for example, writing to file(s), the source field names will be persisted as sink names. If the sink already exists, it must contain all columns being copied from the source. Such default mapping supports flexible schemas and schema drift from source to sink from execution to execution - all the data returned by source data store can be copied to sink.

Kaynağınız üst bilgi satırı olmayan bir metin dosyasıysa, kaynak sütun adları içermediğinden açık eşleme gerekir.

Açık eşleme

Ayrıca, kaynaktan havuza sütun/alan eşlemesini ihtiyaçlarınıza göre özelleştirmek için açık eşleme de belirtebilirsiniz. Açık eşleme ile havuza yalnızca kısmi kaynak verileri kopyalayabilir veya kaynak verileri farklı adlarla havuza eşleyebilir veya tablosal/hiyerarşik verileri yeniden şekillendirebilirsiniz. Kopyalama etkinliği:

  1. Kaynaktan verileri okur ve kaynak şemasını belirler.
  2. Tanımlı eşlemenizi uygular.
  3. Writes the data to sink.

Aşağıdakiler hakkında daha fazla bilgi edinin:

Eşlemeyi Yazma kullanıcı arabirimi - kopyalama etkinliği ->> eşleme sekmesinde yapılandırabilir veya kopyalama etkinliği ->translator özelliğinde eşlemeyi program aracılığıyla belirtebilirsiniz. Aşağıdaki özellikler, verileri eşlemek için belirli bir sütuna/alana işaret eden translator dizi ->mappings nesneler ->> ve sourcesink içinde desteklenir.

Mülk Açıklama Gerekli
Adı Name of the source or sink column/field. Apply for tabular source and sink. Yes
ordinal Column index. 1'den başlayın.
Apply and required when using delimited text without header line.
Hayır
path Her alanı ayıklamak veya eşlemek için kullanılan JSON yolu ifadesi. Azure Cosmos DB, MongoDB veya REST bağlayıcıları gibi hiyerarşik kaynak ve havuz için uygulayın.
Kök nesnenin altındaki alanlar için JSON yolu kök $ ile başlar; özellik collectionReference tarafından seçilen dizinin içindeki alanlar için JSON yolu dizi öğesi $ olmadan başlar.
Hayır
type Interim data type of the source or sink column. Genel olarak, bu özelliği belirtmeniz veya değiştirmeniz gerekmez. Veri türü eşlemesi hakkında daha fazla bilgi edinin. Hayır
kültür Culture of the source or sink column. Tür, Datetime veya Datetimeoffset olduğunda uygulayın. Varsayılan değer: en-us.
Genel olarak, bu özelliği belirtmeniz veya değiştirmeniz gerekmez. Veri türü eşlemesi hakkında daha fazla bilgi edinin.
Hayır
format Tür Datetime veya Datetimeoffsetolduğunda kullanılacak biçim dizesi. Tarih saatlerini biçimlendirme hakkında Özel Tarih ve Saat Biçim Dizeleri'ne bakın. Genel olarak, bu özelliği belirtmeniz veya değiştirmeniz gerekmez. Veri türü eşlemesi hakkında daha fazla bilgi edinin. Hayır

translator altında ve mappings dışında aşağıdaki özellikler desteklenir:

Mülk Açıklama Gerekli
collectionReference Azure Cosmos DB, MongoDB veya REST bağlayıcıları gibi hiyerarşik bir kaynaktan veri kopyalarken uygulayın.
If you want to iterate and extract data from the objects inside an array field with the same pattern and convert to per row per object, specify the JSON path of that array to do cross-apply.
Hayır

Tabular source to tabular sink

Örneğin, Salesforce'tan Azure SQL Veritabanı verileri kopyalamak ve üç sütunu açıkça eşlemek için:

  1. Kopyalama etkinliği -> eşleme sekmesinde, hem kaynak hem de havuz şemalarını içeri aktarmak için Şemaları içeri aktar düğmesine tıklayın.

  2. Gerekli alanları eşleyin ve kalan alanları hariç tutun/silin.

Map tabular to tabular

Kopyalama etkinliği yükünde aynı eşleme aşağıdaki gibi yapılandırılabilir (bkz 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" }
                }
            ]
        }
    },
    ...
}

Üst bilgi satırı olmadan sınırlandırılmış metin dosyalarından veri kopyalamak için, sütunlar adlar yerine sıralı olarak temsil edilir.

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

Hierarchical source to tabular sink

Hiyerarşik kaynaktan tablosal havuza veri kopyalarken kopyalama etkinliği aşağıdaki özellikleri destekler:

  • Nesnelerden ve dizilerden veri ayıklama.
  • Bir dizideki aynı desene sahip birden fazla nesneye çapraz uygulama yapın, bu durumda bir JSON nesnesini tablosal sonuçta birden çok kayda dönüştürün.

Daha gelişmiş hiyerarşik-tablosal dönüşüm için Veri Akışı kullanabilirsiniz.

Örneğin, aşağıdaki içeriğe sahip kaynak MongoDB belgeniz varsa:

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

Ayrıca, dizi (order_pd ve order_price) içindeki verileri düzleştirerek ve ortak kök bilgileriyle (sayı, tarih ve şehir) çapraz join yaparak, bu veriyi başlık satırıyla aşağıdaki biçimde bir metin dosyasına kopyalamak istiyorsunuz.

sipariş numarası siparişTarihi order_pd sipariş_fiyatı şehir
01 20170122 P1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

Bu eşlemeyi Data Factory yazma kullanıcı arabiriminde tanımlayabilirsiniz:

  1. Kopyalama etkinliği -> eşleme sekmesinde, hem kaynak hem de havuz şemalarını içeri aktarmak için Şemaları içeri aktar düğmesine tıklayın. Hizmet şemayı içeri aktarırken ilk birkaç nesneyi örneklediğinden, herhangi bir alan gösterilmiyorsa, bunu hiyerarşide doğru katmana ekleyebilirsiniz; var olan bir alan adının üzerine gelin ve düğüm, nesne veya dizi eklemeyi seçin.

  2. Verileri yinelemek ve ayıklamak istediğiniz diziyi seçin. Koleksiyon referansı olarak otomatik doldurulacaktır. Bu tür işlem için yalnızca tek bir dizinin desteklendiğine dikkat edin.

  3. Map the needed fields to sink. Hizmet, hiyerarşik taraf için ilgili JSON yollarını otomatik olarak belirler.

Note

Koleksiyon başvurusu olarak işaretlenmiş dizinin boş olduğu ve onay kutusunun seçili olduğu kayıtlar için kaydın tamamı atlanır.

Kullanıcı arabirimini kullanarak hiyerarşik ile tablosal eşleme

Gelişmiş düzenleyiciye de geçebilirsiniz. Bu durumda alanların JSON yollarını doğrudan görebilir ve düzenleyebilirsiniz. Bu görünümde yeni eşleme eklemeyi seçerseniz JSON yolunu belirtin.

Gelişmiş düzenleyiciyi kullanarak hiyerarşik ile tablosal eşleme

Kopyalama etkinliği yükünde aynı eşleme aşağıdaki gibi yapılandırılabilir (bkz 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']"
        }
    },
    ...
}

Tabular/Hierarchical source to hierarchical sink

Kullanıcı deneyimi akışı Hiyerarşik kaynaktan tablosal havuza benzer.

Tablosal kaynaktan hiyerarşik havuza veri kopyalarken, nesnenin içindeki diziye yazma desteklenmez.

Hiyerarşik kaynaktan hiyerarşik havuza veri kopyalarken, nesne/diziyi seçerek ve iç alanlara dokunmadan havuza eşleyerek katmanın hiyerarşisinin tamamını da koruyabilirsiniz.

Daha gelişmiş veri yeniden şekillendirme dönüşümü için Veri Akışı kullanabilirsiniz.

Parameterize mapping

Çok sayıda nesneyi dinamik olarak kopyalamak için şablonlaştırılmış bir işlem hattı oluşturmak istiyorsanız, varsayılan eşlemeden yararlanıp yararlanamayacağınızı veya ilgili nesneler için açık eşleme tanımlamanız gerekip gerekmediğini belirleyin.

Açık eşleme gerekiyorsa şunları yapabilirsiniz:

  1. İşlem hattı düzeyinde nesne türüne sahip bir parametre tanımlayın; örneğin, mapping.

  2. Eşlemeyi parametreleştirin: kopyalama etkinliği -> eşleme sekmesinde dinamik içerik eklemeyi ve yukarıdaki parametreyi seçin. Etkinlik yükü aşağıdaki gibi olacaktır:

    {
        "name": "CopyActivityHierarchicalToTabular",
        "type": "Copy",
        "typeProperties": {
            "source": {...},
            "sink": {...},
            "translator": {
                "value": "@pipeline().parameters.mapping",
                "type": "Expression"
            },
            ...
        }
    }
    
  3. Eşleme parametresine geçirilecek değeri oluşturun. Tanım nesnesinin translator tamamı olmalıdır, açık eşleme bölümündeki örneklere bakın. For example, for tabular source to tabular sink copy, the value should be {"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]}.

Veri türü eşleme

Copy activity performs source types to sink types mapping with the following flow:

  1. Kaynak yerel veri türlerinden Azure Data Factory ve Synapse işlem hatları tarafından kullanılan ara veri türlerine dönüştürün.
  2. Hem varsayılan eşleme hem de açık eşlemeiçin geçerli olan ilgili havuz türleriyle eşleşecek şekilde ara veri türünü gerektiği gibi otomatik olarak dönüştürün.
  3. Convert from interim data types to sink native data types.

Kopyalama etkinliği şu anda şu ara veri türlerini destekler: Boolean, Byte, Byte dizisi, Datetime, DatetimeOffset, Decimal, Double, GUID, Int16, Int32, Int64, SByte, Single, String, Timespan, UInt16, UInt32 ve UInt64.

The following data type conversions are supported between the interim types from source to sink.

Source\Sink Boolean Byte array Tarih/Zaman Decimal Kayan nokta GUID Integer String TimeSpan
Boolean
Byte array
Tarih/Zaman
Decimal
Kayan nokta
GUID
Integer
String
TimeSpan

(1) Date/Time includes DateTime, DateTimeOffset, Date and Time.

(2) Float-point includes Single and Double.

(3) Tamsayı SByte, Byte, Int16, UInt16, Int32, UInt32, Int64 ve UInt64'ü içerir.

Note

  • Şu anda tablosal veriler arasında kopyalama yapılırken bu tür veri türü dönüştürmesi desteklenir. Hiyerarşik kaynaklar/havuzlar desteklenmez, bu da kaynak ve havuz ara türleri arasında sistem tanımlı veri türü dönüştürmesi olmadığı anlamına gelir.
  • Bu özellik en son veri kümesi modeliyle çalışır. Kullanıcı arabiriminde bu seçeneği görmüyorsanız yeni bir veri kümesi oluşturmayı deneyin.

Veri türü dönüştürme için kopyalama etkinliğinde aşağıdaki özellikler desteklenir (programlı yazma bölümü altında translator ):

Mülk Açıklama Gerekli
typeConversion Yeni veri türü dönüştürme deneyimini etkinleştirin.
Geriye dönük uyumluluk nedeniyle varsayılan değer false değeridir.

Data Factory yazma kullanıcı arabirimi aracılığıyla Haziran 2020'nin sonlarından bu yana oluşturulan yeni kopyalama etkinlikleri için bu veri türü dönüştürmesi en iyi deneyimi sağlamak için varsayılan olarak etkinleştirilmiştir ve kopyalama etkinliğinin -> eşleme sekmesinde geçerli senaryolar için aşağıdaki tip dönüştürme ayarlarını görebilirsiniz.
İşlem hattını program aracılığıyla oluşturmak için typeConversion özelliğini etkinleştirmek amacıyla açıkça true olarak ayarlamanız gerekir.
Bu özellik yayımlanmadan önce oluşturulan mevcut kopyalama etkinlikleri için geriye dönük uyumluluk için yazma kullanıcı arabiriminde tür dönüştürme seçeneklerini görmezsiniz.
Hayır
typeConversionSettings Tür dönüştürme ayarları grubu. typeConversion olarak true ayarlandığında uygulayın. Aşağıdaki özelliklerin tümü bu grubun altındadır. Hayır
Under typeConversionSettings
allowDataTruncation Allow data truncation when converting source data to sink with different type during copy, for example, from decimal to integer, from DatetimeOffset to Datetime.
Varsayılan değeri, doğrudur.
Hayır
Boolean'ı Sayı Olarak İşle Treat booleans as numbers, for example, true as 1.
Varsayılan değer yanlış'tır.
Hayır
tarih formatı Tarihler ve dizeler arasında dönüştürme yaparken dizeyi biçimlendirin; örneğin yyyy-MM-dd. Ayrıntılı bilgi için Özel Tarih ve Saat Biçim Dizeleri'ne bakın. Hayır
tarihSaatFormatı Saat dilimi uzaklığı olmayan tarihler ve dizeler arasında dönüştürme yaparken dizeyi biçimlendirin; örneğin, yyyy-MM-dd HH:mm:ss.fff. Ayrıntılı bilgi için Özel Tarih ve Saat Biçim Dizeleri'ne bakın. Hayır
dateTimeOffsetFormat Format string when converting between dates with time zone offset and strings, for example, yyyy-MM-dd HH:mm:ss.fff zzz. Ayrıntılı bilgi için Özel Tarih ve Saat Biçim Dizeleri'ne bakın. Hayır
timeSpanFormat Zaman aralıkları ve dizeler arasında dönüştürme yaparken dizeyi biçimlendirin; örneğin, dd\.hh\:mm. Ayrıntılı bilgi için Özel TimeSpan Biçim Dizeleri'ne bakın. Hayır
timeFormat Saat ve dizeler arasında dönüştürme yaparken dizeyi biçimlendirin; örneğin HH:mm:ss.fff. Ayrıntılı bilgi için Özel Tarih ve Saat Biçim Dizeleri'ne bakın. Hayır
kültür Türleri dönüştürürken kullanılacak kültür bilgileri, örneğin en-us veya fr-fr. Hayır

Örnek:

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

Eski modeller

Note

The following models to map source columns/fields to sink are still supported as is for backward compatibility. Şema eşlemesinde bahsedilen yeni modeli kullanmanızı öneririz. Yazma arayüzü yeni modeli oluşturmaya geçti.

Alternatif sütun eşleme (eski model)

Tablo şeklindeki veriler arasında eşleme yapmak için kopyalama etkinliğini>translator>columnMappings belirtebilirsiniz. Bu durumda, hem giriş hem de çıkış veri kümeleri için "yapı" bölümü gereklidir. Sütun eşlemesi, "yapı" kaynak veri kümesindeki sütunların tümünü veya alt kümesini havuz veri kümesindeki "yapı" içindeki tüm sütunlara eşlemeyi destekler. İstisna ile sonuçlanan hata durumları şunlardır:

  • Kaynak veri deposu sorgu sonucunun giriş veri kümesi "yapısı" bölümünde belirtilen bir sütun adı yok.
  • Havuz veri deposunun (önceden tanımlanmış şema varsa) çıkış veri kümesi "yapısı" bölümünde belirtilen bir sütun adı yoktur.
  • "Sink veri kümesinin 'yapısında', eşlemede belirtilenlerden daha az veya daha fazla sütun var."
  • Duplicate mapping.

Aşağıdaki örnekte, giriş veri kümesinin bir yapısı vardır ve şirket içi Oracle veritabanındaki bir tabloyu işaret eder.

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

Bu örnekte çıkış veri kümesinin bir yapısı vardır ve Salesforce'taki bir tabloya işaret eder.

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

Aşağıdaki JSON işlem hattında kopyalama etkinliğini tanımlar. Kaynak sütunlar, translator ->columnMappings özelliğini kullanarak havuzdaki sütunlara eşlenir.

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

If you are using the syntax of "columnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName" to specify column mapping, it is still supported as-is.

Alternatif şema eşleme (eski model)

Hiyerarşik şekilli veriler ile tablo şeklindeki veriler arasında eşleme yapmak için kopyalama etkinliğini>translator>schemaMapping belirtebilirsiniz. Örneğin, MongoDB/REST'ten metin dosyasına kopyalayın ve Oracle'dan MongoDB için Azure Cosmos DB'ye kopyalayın. Kopyalama etkinliği translator bölümünde aşağıdaki özellikler desteklenir:

Mülk Açıklama Gerekli
type Kopyalama etkinliği çeviricisinin type özelliği şu şekilde ayarlanmalıdır: TabularTranslator Yes
schemaMapping Kaynak taraftan havuz tarafına eşleme ilişkisini temsil eden anahtar-değer çiftleri koleksiyonu.
- Key: represents source. Tablosal kaynak için, veri kümesi yapısında tanımlandığı gibi sütun adını belirtin; hiyerarşik kaynak için ayıklanıp eşılacak her alan için JSON yol ifadesini belirtin.
- Değer: havuzu temsil eder. Tablosal havuz için, veri kümesi yapısında tanımlandığı gibi sütun adını belirtin; hiyerarşik havuz için ayıklanıp eşleneceğini her alan için JSON yol ifadesini belirtin.
Hiyerarşik veriler söz konusu olduğunda, kök nesne altındaki alanlar için JSON yolu kök $ ile başlar; özelliği tarafından collectionReference seçilen dizinin içindeki alanlar için JSON yolu dizi öğesinden başlar.
Yes
collectionReference If you want to iterate and extract data from the objects inside an array field with the same pattern and convert to per row per object, specify the JSON path of that array to do cross-apply. Bu özellik yalnızca hiyerarşik veriler kaynak olduğunda desteklenir. Hayır

Örnek: MongoDB'den Oracle'a kopyalayın:

Örneğin, aşağıdaki içeriğe sahip MongoDB belgeniz varsa:

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

and you want to copy it into an Azure SQL table in the following format, by flattening the data inside the array (order_pd and order_price) and cross join with the common root info (number, date, and city):

sipariş numarası siparişTarihi order_pd sipariş_fiyatı şehir
01 20170122 P1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

Şema eşleme kuralını aşağıdaki kopyalama etkinliği JSON örneği olarak yapılandırın:

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

Diğer Kopyalama İşlemi makalelerine göz atın: