Pemetaan skema dan jenis data dalam aktivitas salin

BERLAKU UNTUK:Azure Data Factory Azure Synapse Analytics

Tip

Cobalah Data Factory di Microsoft Fabric, solusi analitik all-in-one untuk perusahaan. Microsoft Fabric mencakup semuanya mulai dari pergerakan data hingga ilmu data, analitik real time, kecerdasan bisnis, dan pelaporan. Pelajari cara memulai uji coba baru secara gratis!

Artikel ini menjelaskan bagaimana aktivitas salin Azure Data Factory melakukan pemetaan skema dan pemetaan jenis data dari data sumber ke data sink.

Pemetaan skema

Pemetaan default

Secara default, aktivitas salin memetakan data sumber ke sink menurut nama kolom dengan cara yang peka huruf besar/kecil. Jika sink tidak ada, misalnya, menulis ke file, nama bidang sumber akan dipertahankan sebagai nama sink. Jika sink sudah ada, sink harus berisi semua kolom yang disalin dari sumbernya. Pemetaan default tersebut mendukung skema fleksibel dan skema drift dari sumber ke sink dari eksekusi ke eksekusi - semua data yang dikembalikan oleh penyimpanan data sumber dapat disalin ke sink.

Jika sumber Anda adalah file teks tanpa baris header, pemetaan eksplisit diperlukan karena sumber tidak berisi nama kolom.

Pemetaan eksplisit

Anda juga dapat menentukan pemetaan eksplisit untuk mengkustomisasi pemetaan kolom/bidang dari sumber ke sink berdasarkan kebutuhan Anda. Dengan pemetaan eksplisit, Anda hanya dapat menyalin data sumber parsial ke sink, atau memetakan data sumber ke sink dengan nama yang berbeda, atau membentuk kembali data tabular/hierarki. Aktivitas salin:

  1. Membaca data dari sumber dan menentukan skema sumber.
  2. Menerapkan pemetaan yang ditentukan.
  3. Menulis data untuk sink.

Pelajari lebih lanjut tentang:

Anda dapat mengonfigurasi pemetaan pada UI Penulisan -> aktivitas salin -> tab pemetaan, atau secara terprogram menentukan pemetaan dalam aktivitas penyalinan ->translator properti. Properti berikut didukung di translator ->mappings array -> objek ->source dan sink, yang menunjuk ke kolom/bidang spesifik untuk memetakan data.

Properti Deskripsi Wajib
nama Nama kolom/bidang sumber atau sink. Terapkan untuk sumber dan sink tabular. Ya
ordinal Indeks kolom. Mulai dari 1.
Terapkan dan diharuskan saat menggunakan teks pemisah tanpa baris header.
Tidak
jalan Ekspresi jalur JSON untuk setiap bidang untuk mengekstrak atau memetakan. Terapkan untuk sumber hierarkis dan sink, misalnya, konektor Azure Cosmos DB, MongoDB, atau REST.
Untuk bidang di bawah objek akar, jalur JSON dimulai dengan akar $; untuk bidang di dalam larik yang dipilih oleh properti collectionReference, jalur JSON dimulai dari elemen larik tanpa $.
Tidak
jenis Jenis data sementara dari kolom sumber atau sink. Secara umum, Anda tidak perlu menentukan atau mengubah properti ini. Pelajari selengkapnya tentang pemetaan jenis data. Tidak
budaya Kultur kolom sumber atau sink. Terapkan bila jenis adalah Datetime atau Datetimeoffset. Default adalah en-us.
Secara umum, Anda tidak perlu menentukan atau mengubah properti ini. Pelajari selengkapnya tentang pemetaan jenis data.
Tidak
format Untai (karakter) format yang akan digunakan ketika jenis adalah Datetime atau Datetimeoffset. Lihat Untai (karakter) Format Tanggal dan Waktu Kustom tentang cara memformat tanggalwaktu. Secara umum, Anda tidak perlu menentukan atau mengubah properti ini. Pelajari selengkapnya tentang pemetaan jenis data. Tidak

Properti berikut didukung di bawah translator selain mappings:

Properti Deskripsi Wajib diisi
collectionReference Terapkan saat menyalin data dari sumber hierarkis, seperti konektor Azure Cosmos DB, MongoDB, atau REST.
Jika Anda ingin mengiterasi dan mengekstrak data dari objek di dalam bidang larik dengan pola yang sama dan mengonversi ke per baris per objek, tentukan jalur JSON dari larik tersebut untuk melakukan penerapan silang.
Tidak

Sumber tabular ke sink tabular

Misalnya, untuk menyalin data dari Salesforce ke Azure SQL Database dan secara eksplisit memetakan tiga kolom:

  1. Pada aktivitas salin-> tab pemetaan, klik tombol Impor skema untuk mengimpor skema sumber dan sink.

  2. Petakan bidang yang diperlukan dan kecualikan/hapus bidang lainnya.

Map tabular to tabular

Pemetaan yang sama dapat dikonfigurasi sebagai berikut dalam payload aktivitas salin (lihat 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" }
                }
            ]
        }
    },
    ...
}

Untuk menyalin data dari file teks pemisah tanpa baris header, kolom diwakili oleh ordinal, bukan nama.

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

Sumber hierarkis ke sink tabular

Saat menyalin data dari sumber hierarki ke sink tabular, aktivitas salin mendukung kemampuan berikut:

  • Mengekstrak data dari objek dan larik.
  • Penerapan silang beberapa objek dengan pola yang sama dari larik, dalam hal ini untuk mengonversi satu objek JSON menjadi beberapa rekaman dalam hasil tabular.

Untuk transformasi hierarkis-ke-tabular tingkat lebih lanjut, Anda dapat menggunakan Aliran Data.

Misalnya, jika Anda memiliki dokumen MongoDB sumber dengan konten berikut:

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

Dan Anda ingin menyalinnya ke dalam file teks dalam format berikut dengan baris header, dengan meratakan data di dalam larik (order_pd dan order_price) dan menggabungkan silang info akar umum (angka, tanggal, dan kota):

nomorPesanan tanggalPesanan order_pd order_price kota
01 20170122 Hal 1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

Anda dapat menentukan pemetaan tersebut pada UI penulisan Azure Data Factory:

  1. Pada aktivitas salin-> tab pemetaan, klik tombol Impor skema untuk mengimpor skema sumber dan sink. Saat layanan mengambil sampel beberapa objek teratas saat mengimpor skema, jika bidang apa pun tidak muncul, Anda dapat menambahkannya ke lapisan yang benar dalam hierarki - arahkan kursor ke nama bidang yang ada dan pilih untuk menambahkan simpul, objek, atau sebuah array.

  2. Pilih larik tempat Anda ingin melakukan iterasi dan mengekstrak data. Ini akan diisi secara otomatis sebagai Referensi koleksi. Perhatikan bahwa hanya larik tunggal yang didukung untuk operasi tersebut.

  3. Petakan bidang yang diperlukan ke sink. Layanan secara otomatis menentukan jalur JSON yang sesuai untuk sisi hierarkis.

Catatan

Untuk rekaman di mana larik yang ditandai sebagai referensi koleksi kosong dan kotak centangnya dipilih, seluruh rekaman dilewati.

Map hierarchical to tabular using UI

Anda juga dapat beralih ke Editor tingkat lanjut, dalam hal ini Anda dapat langsung melihat dan mengedit jalur JSON bidang. Jika Anda memilih untuk menambahkan pemetaan baru dalam tampilan ini, tentukan jalur JSON.

Map hierarchical to tabular using advanced editor

Pemetaan yang sama dapat dikonfigurasi sebagai berikut dalam payload aktivitas salin (lihat 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']"
        }
    },
    ...
}

Sumber tabular/hierarkis ke sink hierarkis

Alur pengalaman pengguna mirip dengan Sumber hierarkis ke sink tabular.

Saat menyalin data dari sumber tabular ke sink hierarkis, penulisan ke larik di dalam objek tidak didukung.

Saat menyalin data dari sumber hierarki ke sink hierarki, Anda juga dapat mempertahankan hierarki seluruh lapisan, dengan memilih objek/larik dan peta ke sink tanpa menyentuh bidang bagian dalam.

Untuk transformasi pembentukan ulang data tingkat lanjut, Anda dapat menggunakan Aliran Data.

Parameterisasi pemetaan

Jika Anda ingin membuat alur templat untuk menyalin sejumlah besar objek secara dinamis, tentukan apakah Anda dapat memanfaatkan pemetaan default atau Anda perlu menentukan pemetaan eksplisit untuk masing-masing objek.

Jika pemetaan eksplisit diperlukan, Anda dapat:

  1. Menentukan parameter dengan jenis objek di tingkat alur, misalnya, mapping.

  2. Memparameterisasi pemetaan: pada aktivitas salin -> tab pemetaan, pilih untuk menambahkan konten dinamis dan memilih parameter di atas. Payload aktivitas adalah sebagai berikut:

    {
        "name": "CopyActivityHierarchicalToTabular",
        "type": "Copy",
        "typeProperties": {
            "source": {...},
            "sink": {...},
            "translator": {
                "value": "@pipeline().parameters.mapping",
                "type": "Expression"
            },
            ...
        }
    }
    
  3. Membuat nilai untuk masuk ke parameter pemetaan. Ini harus menjadi seluruh objek definisi translator, rujuk sampel di bagian pemetaan eksplisit. Misalnya, untuk sumber tabular ke salinan sink tabular, nilainya harus {"type":"TabularTranslator","mappings":[{"source":{"name":"Id"},"sink":{"name":"CustomerID"}},{"source":{"name":"Name"},"sink":{"name":"LastName"}},{"source":{"name":"LastModifiedDate"},"sink":{"name":"ModifiedDate"}}]}.

Pemetaan jenis data

Aktivitas salin melakukan pemetaan jenis sumber ke jenis sink dengan alur berikut:

  1. Konversi dari jenis data asli sumber ke jenis data sementara yang digunakan oleh alur Azure Data Factory dan Synapse.
  2. Secara otomatis mengonversi jenis data interim sesuai kebutuhan untuk mencocokkan jenis sink yang sesuai, yang berlaku untuk pemetaan default dan pemetaan eksplisit.
  3. Konversi dari jenis data sementara ke jenis data asli.

Aktivitas salin saat ini mendukung jenis data interim berikut: Boolean, Byte, Byte array, Datetime, DatetimeOffset, Decimal, Double, GUID, Int16, Int32, Int64, SByte, Single, String, Timespan, UInt16, UInt32, dan UInt64.

Konversi jenis data berikut didukung antara jenis interim dari sumber ke sink.

Sumber\Sink Boolean Byte array Decimal Tanggal/Waktu (1) Titik-float (2) GUID Bilangan bulat (3) String TimeSpan
Boolean
Byte array
Tanggal/Waktu
Decimal
Titik-float
GUID
Bilangan bulat
String
TimeSpan

(1) Tanggal/Waktu mencakup TanggalWaktu dan OffsetTanggalWaktu.

(2) Titik-float mencakup Tunggal dan Ganda.

(3) Bilangan bulat meliputi SByte, Byte, Int16, UInt16, Int32, UInt32, Int64, dan UInt64.

Catatan

  • Saat ini konversi jenis data tersebut didukung saat menyalin antara data tabular. Sumber/sink hierarki tidak didukung, yang berarti tidak ada konversi jenis data yang ditentukan sistem antara jenis interim sumber dan sink.
  • Fitur ini bekerja dengan model himpunan data terbaru. Jika Anda tidak melihat opsi ini dari antarmuka pengguna, coba buat himpunan data baru.

Properti berikut didukung dalam aktivitas salin untuk konversi jenis data (di bawah bagian translator untuk penulisan terprogram):

Properti Deskripsi Wajib diisi
typeConversion Mengaktifkan pengalaman konversi jenis data baru.
Nilai default salah karena kompatibilitas mundur.

Untuk aktivitas salin baru yang dibuat melalui UI penulisan Azure Data Factory sejak akhir Juni 2020, konversi jenis data ini diaktifkan secara default untuk pengalaman terbaik, dan Anda dapat melihat pengaturan konversi jenis berikut pada aktivitas salin -> tab pemetaan untuk skenario yang berlaku.
Untuk membuat alur secara terprogram, Anda perlu secara eksplisit menyetel properti typeConversion ke benar untuk mengaktifkannya.
Untuk aktivitas penyalinan yang sudah ada yang dibuat sebelum fitur ini dirilis, Anda tidak akan melihat opsi konversi jenis di antarmuka pengguna penulisan untuk kompatibilitas mundur.
Tidak
typeConversionSettings Grup setelan konversi jenis. Terapkan saat typeConversion disetel ke true. Properti berikut ini semuanya berada di bawah grup ini. Tidak
Di bawah typeConversionSettings
allowDataTruncation Perbolehkan pemotongan data saat mengonversi data sumber ke sink dengan jenis berbeda selama salinan, misalnya, dari desimal ke bilangan bulat, dari OffsetTanggalwaktu ke Tanggalwaktu.
Nilai defaultnya adalah true.
Tidak
treatBooleanAsNumber Perlakukan boolean sebagai angka, misalnya, benar sebagai 1.
Nilai defaultnya adalah false.
Tidak
dateTimeFormat Untai (karakter) format saat mengonversi antara tanggal tanpa offset zona waktu dan untai (karakter), misalnya, yyyy-MM-dd HH:mm:ss.fff. Lihat Untai (karakter) Format Tanggal dan Waktu Kustom untuk informasi terperinci. Tidak
dateTimeOffsetFormat Format untai (karakter) saat mengonversi antara tanggal tanpa offset zona waktu dan untai (karakter), misalnya, yyyy-MM-dd HH:mm:ss.fff zzz. Lihat Untai (karakter) Format Tanggal dan Waktu Kustom untuk informasi terperinci. Tidak
timeSpanFormat Untai (karakter) format saat mengonversi antara periode waktu dan untai (karakter), misalnya, dd\.hh\:mm. Lihat Untai (karakter) Format Tanggal dan Waktu Kustom untuk informasi terperinci. Tidak
budaya Informasi kultur yang akan digunakan saat mengonversi jenis, misalnya, en-us atau fr-fr. Tidak

Contoh:

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

Model warisan

Catatan

Model berikut untuk memetakan kolom/bidang sumber ke sink masih didukung apa adanya untuk kompatibilitas mundur. Sebaiknya Anda menggunakan model baru yang disebutkan dalam pemetaan skema. Antarmuka pengguna penulisan telah beralih untuk menghasilkan model baru.

Pemetaan kolom alternatif (model warisan)

Anda dapat menentukan aktivitas salin ->translator->columnMappings untuk memetakan antara data berbentuk tabular. Dalam hal ini, bagian "struktur" diperlukan untuk himpunan data input dan output. Pemetaan kolom mendukung pemetaan semua atau subset kolom di "struktur" himpunan data sumber ke semua kolom dalam "struktur" himpunan data sink. Berikut adalah kondisi kesalahan yang mengakibatkan pengecualian:

  • Hasil kueri penyimpanan data sumber tidak memiliki nama kolom yang ditentukan di bagian "struktur" himpunan data input.
  • Penyimpanan data sink (jika dengan skema yang telah ditentukan sebelumnya) tidak memiliki nama kolom yang ditentukan di bagian "struktur" himpunan data output.
  • Kolom bisa jadi lebih sedikit atau lebih banyak dalam "struktur" himpunan data sink daripada yang ditentukan dalam pemetaan.
  • Pemetaan duplikat.

Dalam contoh berikut, himpunan data input memiliki struktur, dan menunjuk ke tabel dalam database Oracle lokal.

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

Dalam sampel ini, himpunan data output memiliki struktur dan menunjuk ke tabel di Salesforce.

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

JSON berikut menentukan aktivitas salin dalam alur. Kolom dari sumber dipetakan ke kolom di sink menggunakan properti penerjemah->columnMappings.

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

Jika Anda menggunakan sintaks "columnMappings": "UserId: MyUserId, Group: MyGroup, Name: MyName" untuk menentukan pemetaan kolom, sintaks ini masih didukung apa adanya.

Pemetaan skema alternatif (model warisan)

Anda dapat menentukan aktivitas salin ->translator ->schemaMapping untuk memetakan antara data berbentuk hierarkis dan data berbentuk tabular, misalnya, menyalin dari MongoDB/REST ke file teks dan menyalin dari Oracle ke Azure Cosmos DB untuk MongoDB. Properti berikut ini didukung di bagian translator aktivitas salin:

Properti Deskripsi Wajib
jenis Properti jenis penerjemah aktivitas salin harus diatur ke: PenerjemahTabular Ya
schemaMapping Koleksi pasangan kunci-nilai, yang mewakili relasi pemetaan dari sisi sumber ke sisi sink.
- Kunci: mewakili sumber. Untuk sumber tabular, tentukan nama kolom sebagaimana didefinisikan dalam struktur himpunan data; untuk sumber hierarkis, tentukan ekspresi jalur JSON untuk setiap bidang untuk mengekstrak dan memetakan.
- Nilai: mewakili sink. Untuk sink tabular, tentukan nama kolom sebagaimana didefinisikan dalam struktur himpunan data; untuk sink hierarkis, tentukan ekspresi jalur JSON untuk setiap bidang untuk mengekstrak dan memetakan.
Dalam kasus data hierarkis, untuk bidang di bawah objek akar, jalur JSON dimulai dengan root $; untuk bidang di dalam larik yang dipilih oleh properti collectionReference, jalur JSON dimulai dari elemen larik.
Ya
collectionReference Jika Anda ingin mengiterasi dan mengekstrak data dari objek di dalam bidang larik dengan pola yang sama dan mengonversi ke per baris per objek, tentukan jalur JSON dari larik tersebut untuk melakukan penerapan silang. Properti ini hanya didukung ketika data hierarkis adalah sumber. Tidak

Contoh: salin dari MongoDB ke Oracle:

Misalnya, jika Anda memiliki dokumen sumber MongoDB dengan konten berikut:

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

dan Anda ingin menyalinnya ke dalam tabel Azure SQL dalam format berikut, dengan meratakan data di dalam larik (order_pd dan order_price) dan menggabungkan silang dengan info akar umum (angka, tanggal, dan kota):

nomorPesanan tanggalPesanan order_pd order_price kota
01 20170122 Hal 1 23 Seattle
01 20170122 P2 13 Seattle
01 20170122 P3 231 Seattle

Mengonfigurasi aturan pemetaan skema sebagai sampel JSON aktivitas salin berikut:

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

Lihat artikel Aktivitas Penyalinan lainnya: