Bagikan melalui


Transformasi flatten dalam aliran data pemetaan

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!

Aliran data tersedia di Alur Azure Data Factory dan Azure Synapse. Artikel ini berlaku untuk memetakan aliran data. Jika Anda baru mengenal transformasi, silakan lihat artikel pengantar Transformasi data menggunakan aliran data pemetaan.

Gunakan transformasi flatten untuk mengambil nilai array di dalam struktur hierarkis seperti JSON dan membukanya menjadi baris individual. Proses ini dikenal sebagai denormalisasi.

Konfigurasi

Transformasi rata berisi pengaturan konfigurasi berikut.

Cuplikan layar yang memperlihatkan pengaturan meratakan.

Dibuka oleh

Pilih array untuk membuka. Data output akan memiliki satu baris per item di setiap array. Jika dibuka dengan array di baris input adalah null atau kosong, akan ada satu baris output dengan nilai yang tidak dibuka sebagai null. Anda memiliki opsi untuk membuka pendaftaran lebih dari satu array per transformasi Flatten. Klik tombol plus (+) untuk menyertakan beberapa array dalam satu transformasi Flatten. Anda dapat menggunakan fungsi meta aliran data ADF di sini termasuk name dan type menggunakan pencocokan pola untuk membuka array yang cocok dengan kriteria tersebut. Saat menyertakan beberapa array dalam satu transformasi Flatten, hasil Anda akan menjadi produk kartesius dari semua nilai array yang mungkin.

Cuplikan layar yang memperlihatkan hasil yang meratakan.

Pembuka akar

Secara default, transformasi flatten membuka sebuah array ke bagian atas hierarki tempatnya berada. Anda dapat secara opsional memilih array sebagai pembuka akar Anda. Pembuka akar harus berupa array objek kompleks yang berupa pembuka array atau berisi pembuka dengan array. Jika pembuka akar dipilih, data output akan berisi setidaknya satu baris per item di pembuka akar. Jika baris input tidak memiliki item apa pun di pembuka akar, baris tersebut akan dihilangkan dari data output. Memilih pembuka akar akan selalu menghasilkan jumlah baris yang kurang dari atau sama dengan perilaku default.

Pemetaan flatten

Mirip dengan transformasi pilih, pilih proyeksi struktur baru dari bidang masuk dan array yang didenormalisasi. Jika array yang didenormalisasi dipetakan, kolom output akan menjadi jenis data yang sama dengan array. Jika pembuka dengan array adalah array objek kompleks yang berisi sub array, pemetaan item dari sub array tersebut akan menghasilkan array.

Lihat tab inspeksi dan pratinjau data untuk memverifikasi output pemetaan Anda.

Pemetaan berbasis aturan

Transformasi yang diratakan mendukung pemetaan berbasis aturan yang memungkinkan Anda membuat transformasi dinamis dan fleksibel yang akan meratakan array berdasarkan aturan dan meratakan struktur berdasarkan tingkat hierarki.

Pola perataan

Kondisi penyesuaian

Masukkan kondisi penyesuaian pola untuk kolom atau kolom yang ingin Anda ratakan menggunakan penyesuaian atau pola yang tepat. Contoh: like(name,'cust%')

Traversal kolom dalam

Pengaturan opsional yang memberi tahu layanan untuk menangani semua subkolom dari objek yang kompleks secara individual, bukan menangani objek yang kompleks sebagai keseluruhan kolom.

Tingkat hierarki

Pilih tingkat hierarki yang ingin Anda perluas.

Kesesuaian nama (regex)

Secara opsional, pilih untuk mengekspresikan penyesuaian nama Anda sebagai regex dalam kotak ini, alih-alih menggunakan kondisi yang sesuai di atas.

Contoh

Lihat objek JSON berikut untuk contoh transformasi flatten di bawah ini

{
  "name":"MSFT","location":"Redmond", "satellites": ["Bay Area", "Shanghai"],
  "goods": {
    "trade":true, "customers":["government", "distributer", "retail"],
    "orders":[
        {"orderId":1,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":2}]}},
        {"orderId":2,"orderTotal":323.34,"shipped":{"orderItems":[{"itemName":"Mice","itemQty":2},{"itemName":"Keyboard","itemQty":1}]}}
    ]}}
{"name":"Company1","location":"Seattle", "satellites": ["New York"],
  "goods":{"trade":false, "customers":["store1", "store2"],
  "orders":[
      {"orderId":4,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":3}]}},
      {"orderId":5,"orderTotal":343.24,"shipped":{"orderItems":[{"itemName":"Chair","itemQty":4},{"itemName":"Lamp","itemQty":2}]}}
    ]}}
{"name": "Company2", "location": "Bellevue",
  "goods": {"trade": true, "customers":["Bank"], "orders": [{"orderId": 4, "orderTotal": 123.34}]}}
{"name": "Company3", "location": "Kirkland"}

Tidak ada pembuka akar dengan string array

Dibuka oleh Pembuka akar Proyeksi
goods.customers Tidak Nama
pelanggan = goods.customer

Output

{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}

Tidak ada pembuka akar dengan array kompleks

Dibuka oleh Pembuka akar Proyeksi
goods.orders.shipped.orderItems Tidak Nama
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
lokasi = lokasi

Output

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}
{ 'Company3', null, null, null, 'Kirkland'}

Akar yang sama dengan pembuka array

Dibuka oleh Pembuka akar Proyeksi
goods.orders goods.orders Nama
goods.orders.shipped.orderItems.itemName
goods.customers
lokasi

Output

{ 'MSFT', ['Laptop','Charger'], ['government','distributer','retail'], 'Redmond'}
{ 'MSFT', ['Mice', 'Keyboard'], ['government','distributer','retail'], 'Redmond'}
{ 'Company1', ['Laptop','Charger'], ['store', 'store2'], 'Seattle'}
{ 'Company1', ['Chair', 'Lamp'], ['store', 'store2'], 'Seattle'}
{ 'Company2', null, ['Bank'], 'Bellevue'}

Pembuka akar dengan array kompleks

Dibuka oleh Pembuka akar Proyeksi
goods.orders.shipped.orderItem goods.orders Nama
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
lokasi = lokasi

Output

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}

Skrip aliran data

Sintaks

<incomingStream>
foldDown(unroll(<unroll cols>),
    mapColumn(
        name,
        each(<array>(type == '<arrayDataType>')),
        each(<array>, match(true())),
        location
    )) ~> <transformationName>

Contoh

source foldDown(unroll(goods.orders.shipped.orderItems, goods.orders),
    mapColumn(
        name,
        orderId = goods.orders.orderId,
        itemName = goods.orders.shipped.orderItems.itemName,
        itemQty = goods.orders.shipped.orderItems.itemQty,
        location = location
    ),
    skipDuplicateMapInputs: false,
    skipDuplicateMapOutputs: false)