Transformasi flatten dalam aliran data pemetaan

Azure Data Factory Azure Synapse Analytics

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

Petunjuk

Untuk transformasi yang setara (Kolom perluas) di Dataflow Gen2, lihat Panduan untuk Dataflow Gen2 untuk memetakan pengguna aliran data.

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 flatten berisi pengaturan konfigurasi berikut.

Cuplikan layar yang menunjukkan pengaturan meratakan.

Dibuka oleh

Pilih array untuk menguraikan. Data output memiliki satu baris per item di setiap array. Jika array yang di-unroll di baris input adalah null atau kosong, maka ada satu baris output dengan nilai yang di-unroll sebagai null. Anda dapat mengurai lebih dari satu array per Transformasi Flatten. Pilih 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 adalah 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 memilih array sebagai akar unroll jika diinginkan. Akar penguraian harus berupa array objek kompleks yang merupakan array penguraian atau berisi penguraian dengan array. Jika akar unroll dipilih, data output berisi setidaknya satu baris untuk setiap item di akar unroll. Jika baris input tidak memiliki item apa pun di akar unroll, baris tersebut akan dihilangkan dari data output. Memilih unroll root selalu menghasilkan jumlah baris yang lebih sedikit atau sama dengan perilaku default.

Penyederhanaan pemetaan

Mirip dengan transformasi pemilihan, pilih proyeksi dari struktur baru berdasarkan kolom masuk dan array yang telah didenormalisasi. Jika array denormalisasi dipetakan, kolom output adalah jenis data yang sama dengan array. Jika unroll by array adalah array objek kompleks yang berisi subarray, memetakan item subarry tersebut menghasilkan array.

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

Pemetaan berbasis aturan

Transformasi flatten mendukung pemetaan berbasis aturan yang memungkinkan Anda membuat transformasi dinamis dan fleksibel yang meratakan array berdasarkan aturan dan meratakan struktur berdasarkan tingkatan hierarki.

Pola pemepatan

Kondisi pencocokan

Masukkan kondisi pola untuk kolom atau kolom yang ingin Anda ratakan menggunakan pencocokan langsung atau pola. 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)

Anda dapat memilih secara opsional untuk mengekspresikan pencocokan nama Anda sebagai regex dalam kotak ini, alih-alih menggunakan kondisi pencocokan.

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 penguraian akar dengan array string

Dibuka oleh Pembuka akar Proyeksi
barang.pelanggan Tidak Nama
pelanggan = barang.pelanggan

Keluaran

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

Tidak ada pengembangan akar dengan array kompleks

Dibuka oleh Pembuka akar Proyeksi
goods.orders.shipped.orderItems Tidak Nama
orderId = barang.pesanan.orderId
itemName = barang.pesanan.dikirim.orderItem.itemName
itemQty = barang.pesanan.dikirim.orderItem.itemKuantty
lokasi = lokasi

Keluaran

{ '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
pesanan.barang pesanan.barang Nama
barang.pesanan.dikirim.itemPesanan.namaItem
barang.pelanggan
lokasi

Keluaran

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

Men-dekonstruksi root dengan array yang kompleks

Dibuka oleh Pembuka akar Proyeksi
goods.orders.shipped.orderItem pesanan.barang Nama
orderId = barang.pesanan.orderId
itemName = barang.pesanan.dikirim.orderItem.itemName
itemQty = barang.pesanan.dikirim.orderItem.itemKuantty
lokasi = lokasi

Keluaran

{ '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)