Format JSON di Azure Data Factory dan Azure Synapse Analytics

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!

Ikuti artikel ini saat Anda ingin memilah file JSON atau menulis data ke dalam format JSON.

Format JSON didukung untuk konektor berikut:

Properti himpunan data

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan himpunan data, lihat artikel Himpunan Data. Bagian ini menyediakan daftar properti yang didukung oleh himpunan data JSON.

Properti Deskripsi Wajib
jenis Properti jenis himpunan data harus diatur ke Json. Ya
lokasi Pengaturan lokasi file. Tiap konektor berbasis file memiliki jenis lokasinya sendiri dan properti yang didukung di location. Lihat detail di artikel konektor -> Bagian properti himpunan data. Ya
encodingName Jenis pengodean yang digunakan untuk membaca/menulis file uji.
Nilai yang diizinkan adalah sebagai berikut: "UTF-8", "UTF-8 tanpa BOM", "UTF-16", "UTF-16BE", "UTF-32", "UTF-32BE", "US-ASCII", "UTF-7", "BIG5", "EUC-JP", "EUC-KR", "GB2312", "GB18030", "JOHAB", "SHIFT-JIS", "CP875", "CP866", "IBM00858 ", "IBM037", "IBM273", "IBM437", "IBM500", "IBM737", "IBM775", "IBM850", "IBM852", "IBM855", "IBM857", "IBM860", "IBM861", "IBM863", "IBM864", "IBM865", "IBM869", "IBM870", "IBM01140", "IBM01141", "IBM01142", "IBM01143", "IBM01144", "IBM01145", "IBM01146", "IBM01147 ", "IBM01148", "IBM01149", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-1", "ISO-8859-2", "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-9", "ISO -8859-13", "ISO-8859-15", "WINDOWS-874", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1252", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255", "WINDOWS-1256", "WINDOWS-1257", "WINDOWS-1258".
No
kompresi Grup properti untuk mengonfigurasi kompresi file. Konfigurasikan bagian ini saat Anda ingin melakukan kompresi/dekompresi selama eksekusi aktivitas. No
jenis
(di bawah compression)
Kodek kompresi yang digunakan untuk membaca/menulis file JSON.
Nilai yang diizinkan adalah bzip2, gzip, deflate, ZipDeflate, TarGzip, Tar, snappy, atau lz4. Defaultnya tidak dipadatkan.
Catatan aktivitas Penyalinan saat ini tidak mendukung "snappy" & "lz4", dan pemetaan aliran data tidak mendukung "ZipDeflate", "TarGzip", dan "Tar".
Catatan ketika menggunakan aktivitas penyalinan untuk mendekompresi file ZipDeflate/TarGzip/Tar dan menulis ke penyimpanan data sink berbasis file, secara default file diekstraksi ke folder:<path specified in dataset>/<folder named as source compressed file>/, gunakan sumber preserveZipFileNameAsFolder/preserveCompressionFileNameAsFolderaktivitas penyalinan untuk mengontrol apakah akan mempertahankan nama file yang dipadatkan sebagai struktur folder.
Tidak.
tingkat
(di bawah compression)
Rasio pemadatan.
Nilai yang diizinkan adalah Optimal atau Tercepat.
- Tercepat: Operasi kompresi akan selesai secepat mungkin, meski file hasil tidak dikompresi secara optimal.
- Optimal: Operasi pemadatan akan dipadatkan secara optimal, bahkan jika operasi membutuhkan waktu lebih lama untuk menyelesaikannya. Untuk informasi selengkapnya, lihat topik Tingkat Pemadatan.
No

Di bawah ini adalah contoh himpunan data JSON di Azure Blob Storage:

{
    "name": "JSONDataset",
    "properties": {
        "type": "Json",
        "linkedServiceName": {
            "referenceName": "<Azure Blob Storage linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "container": "containername",
                "folderPath": "folder/subfolder",
            },
            "compression": {
                "type": "gzip"
            }
        }
    }
}

Properti aktivitas salin

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan aktivitas, lihat artikel Alur. Bagian ini menyediakan daftar properti yang didukung oleh sumber dan sink JSON.

Pelajari tentang cara mengekstrak data dari file JSON dan memetakan ke penyimpan/format penyimpanan data atau sebaliknya dari pemetaan skema.

JSON sebagai sumber

Properti berikut didukung di bagian *sumber* aktivitas salin.

Properti Deskripsi Wajib
jenis Properti jenis dari sumber aktivitas penyalinan harus diatur ke JSONSource. Ya
formatSettings Grup properti. Lihat tabel pengaturan baca JSON di bawah ini. No
storeSettings Grup berbagai properti tentang cara membaca data dari penyimpanan data. Setiap konektor berbasis file memiliki pengaturan baca yang didukung sendiri di bagian storeSettings. Lihat detail di artikel konektor -> Bagian properti aktivitas salin. No

Pengaturan baca JSON yang didukung di bawah formatSettings:

Properti Deskripsi Wajib
jenis Jenis formatSettings harus diatur ke JsonReadSettings. Ya
compressionProperties Grup properti tentang cara mendekompresi data untuk codec pemadatan yang ditentukan. No
preserveZipFileNameAsFolder
(di bawah compressionProperties->type sebagai ZipDeflateReadSettings)
Berlaku saat input himpunan data dikonfigurasi dengan pemadatan ZipDeflate. Menunjukkan apakah akan mempertahankan nama file zip sumber sebagai struktur folder selama salin.
- Bila disetel ke true (default), layanan akan menulis file yang tidak di-zip ke <path specified in dataset>/<folder named as source zip file>/.
- Bila disetel ke false, layanan menulis file yang tidak di-zip langsung ke <path specified in dataset>. Pastikan Anda tidak memiliki nama file duplikat dalam file zip sumber yang berbeda untuk menghindari persaingan atau perilaku tak terduga.
No
preserveCompressionFileNameAsFolder
(di bawah compressionProperties->type sebagai TarGZipReadSettings atau TarReadSettings)
Berlaku ketika himpunan data input dikonfigurasi dengan pemadatan TarGzip/Tar. Menunjukkan apakah akan mempertahankan nama file sumber yang dipadatkan sebagai struktur folder selama salin.
- Bila disetel ke true (default), layanan akan menulis file yang didekompresi ke <path specified in dataset>/<folder named as source compressed file>/.
- Bila disetel ke false, layanan menulis file yang didekompresi langsung ke <path specified in dataset>. Pastikan Anda tidak memiliki nama file duplikat di file sumber yang berbeda untuk menghindari persaingan atau perilaku yang tidak terduga.
No

JSON sebagai sink

Properti berikut ini didukung di bagian sink aktivitas salin.

Properti Deskripsi Wajib
jenis Properti jenis sumber aktivitas penyalinan harus diatur ke JSONSink. Ya
formatSettings Grup properti. Lihat tabel pengaturan tulis JSON di bawah ini. No
storeSettings Grup properti tentang cara menulis data ke penyimpanan data. Setiap konektor berbasis file memiliki pengaturan tulis tersendiri yang didukung pada storeSettings. Lihat detail di artikel konektor -> Bagian properti aktivitas salin. No

Pengaturan tulis JSON yang didukung di bagian formatSettings :

Properti Deskripsi Wajib
jenis Jenis formatSettings harus diatur ke JsonWriteSettings. Ya
filePattern Tunjukkan pola data yang disimpan di setiap file JSON. Nilai yang diizinkan adalah: setOfObjects (JSON Lines) dan arrayOfObjects. Nilai default-nya adalah setOfObjects. Lihat bagian Pola file JSON untuk detail tentang pola ini. No

Pola file JSON

Saat menyalin data dari file JSON, aktivitas salin dapat secara otomatis mendeteksi dan memilah pola file JSON berikut. Saat menulis data ke file JSON, Anda dapat mengonfigurasi pola file pada sink aktivitas salin.

  • Jenis I: setOfObjects

    Setiap file berisi objek tunggal, baris JSON, atau objek gabungan.

    • contoh JSON objek tunggal

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      
    • Baris JSON (default untuk sink)

      {"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
      {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}
      {"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}
      
    • contoh JSON yang digabungkan

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      {
          "time": "2015-04-29T07:13:21.0220000Z",
          "callingimsi": "466922202613463",
          "callingnum1": "123436380",
          "callingnum2": "789037573",
          "switch1": "US",
          "switch2": "UK"
      }
      {
          "time": "2015-04-29T07:13:21.4370000Z",
          "callingimsi": "466923101048691",
          "callingnum1": "678901578",
          "callingnum2": "345626404",
          "switch1": "Germany",
          "switch2": "UK"
      }
      
  • Jenis II: arrayOfObjects

    Setiap file berisi array objek.

    [
        {
            "time": "2015-04-29T07:12:20.9100000Z",
            "callingimsi": "466920403025604",
            "callingnum1": "678948008",
            "callingnum2": "567834760",
            "switch1": "China",
            "switch2": "Germany"
        },
        {
            "time": "2015-04-29T07:13:21.0220000Z",
            "callingimsi": "466922202613463",
            "callingnum1": "123436380",
            "callingnum2": "789037573",
            "switch1": "US",
            "switch2": "UK"
        },
        {
            "time": "2015-04-29T07:13:21.4370000Z",
            "callingimsi": "466923101048691",
            "callingnum1": "678901578",
            "callingnum2": "345626404",
            "switch1": "Germany",
            "switch2": "UK"
        }
    ]
    

Properti pemetaan aliran data

Dalam pemetaan aliran data, Anda dapat membaca dan menulis ke format JSON di penyimpanan data berikut: Azure Blob Storage, Azure Data Lake Storage Gen1 dan Azure Data Lake Storage Gen2 dan SFTP. Anda dapat membaca format JSON di Amazon S3.

Properti sumber

Tabel di bawah ini mencantumkan properti yang didukung oleh sumber json. Anda bisa mengedit properti ini di tab opsi Sumber.

Nama Deskripsi Wajib diisi Nilai yang diizinkan Properti skrip aliran data
Jalur wild card Semua file yang cocok dengan jalur kartubebas akan diproses. Mengambil alih jalur folder dan file yang diatur dalam himpunan data. no Tali[] wildcardPaths
Jalur akar partisi Untuk data file yang dipartisi, Anda dapat memasukkan jalur akar partisi untuk membaca folder yang dipartisi sebagai kolom no String partitionRootPath
Daftar file Apakah sumber Anda mengarah ke file teks yang mencantumkan file untuk diproses no true atau false fileList
Kolom untuk menyimpan nama file Membuat kolom baru dengan jalur dan nama file sumber no String rowUrlColumn
Setelah selesai Hapus atau pindahkan file setelah diproses. Jalur file dimulai dari akar kontainer no Hapus: true atau false
Pindah: ['<from>', '<to>']
purgeFiles
moveFiles
Filter menurut terakhir diubah Pilih untuk memfilter file berdasarkan waktu terakhir file tersebut diubah no Tanda Waktu modifiedAfter
modifiedBefore
Dokumen tunggal Pemetaan aliran data membaca satu dokumen JSON dari setiap file no true atau false singleDocument
Nama kolom yang tidak dikutip Jika Nama kolom yang tidak dikutip dipilih, pemetaan aliran data akan membaca kolom JSON yang tidak dikelilingi oleh tanda kutip. no true atau false unquotedColumnNames
Memiliki komentar Pilih Memiliki komentar jika data JSON memiliki komentar gaya C atau C++ no true atau false asComments
Kutipan tunggal Membaca kolom JSON yang tidak dikelilingi oleh tanda kutip no true atau false singleQuoted
Garis miring terbalik keluar Pilih Garis miring terbalik keluar jika garis miring terbalik digunakan untuk keluar dari karakter dalam data JSON no true atau false backslashEscape
Izinkan file tidak ditemukan Jika true, kesalahan tidak akan ditampilkan jika tidak ditemukan file no true atau false ignoreNoFilesFound

Himpunan data sebaris

Aliran data pemetaan mendukung "himpunan data sebaris" sebagai opsi untuk menentukan sumber dan sink Anda. Himpunan data JSON sebaris didefinisikan langsung di dalam transformasi sumber dan sink Anda dan tidak dibagikan di luar aliran data yang ditentukan. Ini berguna untuk membuat parameter properti himpunan data langsung di dalam aliran data Anda dan dapat memperoleh manfaat dari peningkatan performa melalui himpunan data ADF bersama.

Saat membaca folder dan file sumber dalam jumlah besar, Anda dapat meningkatkan performa penemuan file aliran data dengan mengatur opsi "Skema yang diproyeksikan pengguna" di dalam Proyeksi | Dialog opsi skema. Opsi ini menonaktifkan penemuan otomatis skema default ADF dan akan sangat meningkatkan performa penemuan file. Sebelum mengatur opsi ini, pastikan untuk mengimpor proyeksi JSON sehingga ADF memiliki skema yang ada untuk proyeksi. Opsi ini tidak berfungsi dengan penyimpangan skema.

Opsi format sumber

Menggunakan himpunan data JSON sebagai sumber dalam aliran data memungkinkan Anda mengatur lima pengaturan tambahan. Pengaturan ini dapat ditemukan pada akordeon Pengaturan JSON di tab Opsi Sumber. Untuk pengaturan Formulir Dokumen, Anda dapat memilih salah satu dari Dokumen tunggal, Dokumen per baris dan Array dokumen.

JSON Settings

Default

Secara default, data JSON dibaca dalam format berikut.

{ "json": "record 1" }
{ "json": "record 2" }
{ "json": "record 3" }

Dokumen tunggal

Jika Dokumen tunggal dipilih, pemetaan aliran data akan membaca satu dokumen JSON dari setiap file.

File1.json
{
    "json": "record 1"
}
File2.json
{
    "json": "record 2"
}
File3.json
{
    "json": "record 3"
}

Jika Dokumen per baris dipilih, pemetaan aliran data akan membaca satu dokumen JSON dari setiap baris dalam file.

File1.json
{"json": "record 1"}

File2.json
 {"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
 {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}

File3.json
 {"time":"2015-04-29T07:12:20.9100000Z","callingimsi":"466920403025604","callingnum1":"678948008","callingnum2":"567834760","switch1":"China","switch2":"Germany"}
 {"time":"2015-04-29T07:13:21.0220000Z","callingimsi":"466922202613463","callingnum1":"123436380","callingnum2":"789037573","switch1":"US","switch2":"UK"}
 {"time":"2015-04-29T07:13:21.4370000Z","callingimsi":"466923101048691","callingnum1":"678901578","callingnum2":"345626404","switch1":"Germany","switch2":"UK"}

Jika Array dokumen dipilih, pemetaan aliran data akan membaca satu array dokumen dari file.

File.json
[
        {
            "time": "2015-04-29T07:12:20.9100000Z",
            "callingimsi": "466920403025604",
            "callingnum1": "678948008",
            "callingnum2": "567834760",
            "switch1": "China",
            "switch2": "Germany"
        },
        {
            "time": "2015-04-29T07:13:21.0220000Z",
            "callingimsi": "466922202613463",
            "callingnum1": "123436380",
            "callingnum2": "789037573",
            "switch1": "US",
            "switch2": "UK"
        },
        {
            "time": "2015-04-29T07:13:21.4370000Z",
            "callingimsi": "466923101048691",
            "callingnum1": "678901578",
            "callingnum2": "345626404",
            "switch1": "Germany",
            "switch2": "UK"
        }
    ]

Catatan

Jika aliran data melemparkan kesalahan yang menyatakan "corrupt_record" saat mempratinjau data JSON Anda, kemungkinan data Anda berisi satu dokumen dalam file JSON Anda. Mengatur "dokumen tunggal" akan menghapus kesalahan tersebut.

Nama kolom yang tidak dikutip

Jika Nama kolom yang tidak dikutip dipilih, pemetaan aliran data akan membaca kolom JSON yang tidak dikelilingi oleh tanda kutip.

{ json: "record 1" }
{ json: "record 2" }
{ json: "record 3" }

Memiliki komentar

Pilih Memiliki komentar jika data JSON memiliki komentar gaya C atau C++.

{ "json": /** comment **/ "record 1" }
{ "json": "record 2" }
{ /** comment **/ "json": "record 3" }

Kutipan tunggal

Pilih Kutipan tunggal jika bidang dan nilai JSON menggunakan tanda kutip tunggal, bukan tanda kutip ganda.

{ 'json': 'record 1' }
{ 'json': 'record 2' }
{ 'json': 'record 3' }

Garis miring terbalik keluar

Pilih Garis miring terbalik keluar jika garis miring terbalik digunakan untuk keluar dari karakter dalam data JSON.

{ "json": "record 1" }
{ "json": "\} \" \' \\ \n \\n record 2" }
{ "json": "record 3" }

Properti Sink

Tabel di bawah ini mencantumkan properti yang didukung oleh sink json. Anda dapat mengedit properti ini di tab Pengaturan.

Nama Deskripsi Wajib diisi Nilai yang diizinkan Properti skrip aliran data
Menghapus folder Jika folder tujuan dibersihkan sebelum menulis no true atau false Memotong
Opsi nama file Format penamaan data yang ditulis. Secara default, satu file per partisi dalam format part-#####-tid-<guid> no Pola: String
Per partisi: String[]
Sebagai data dalam kolom: String
Output ke satu file: ['<fileName>']
filePattern
partitionFileNames
rowUrlColumn
partitionFileNames

Membuat struktur JSON dalam kolom turunan

Anda dapat menambahkan kolom kompleks ke aliran data Anda melalui penyusun ekspresi kolom turunan. Dalam transformasi kolom turunan, tambahkan kolom baru dan buka penyusun ekspresi dengan mengklik kotak biru. Untuk membuat kolom kompleks, Anda dapat memasukkan struktur JSON secara manual atau menggunakan UX untuk menambahkan subkolom secara interaktif.

Menggunakan UX penyusun ekspresi

Di panel sisi skema output, arahkan kursor ke kolom dan klik ikon plus. Pilih Tambahkan subkolom untuk membuat kolom menjadi jenis yang kompleks.

Add subcolumn

Anda dapat menambahkan kolom dan subkolom tambahan dengan cara yang sama. Untuk setiap bidang yang tidak kompleks, ekspresi dapat ditambahkan di editor ekspresi di sebelah kanan.

Add complex column

Memasukkan struktur JSON secara manual

Untuk menambahkan struktur JSON secara manual, tambahkan kolom baru dan masukkan ekspresi di editor. Ekspresi mengikuti format umum berikut:

@(
    field1=0,
    field2=@(
        field1=0
    )
)

Jika ekspresi ini dimasukkan untuk kolom bernama "complexColumn", maka ekspresi tersebut akan ditulis ke sink sebagai JSON berikut:

{
    "complexColumn": {
        "field1": 0,
        "field2": {
            "field1": 0
        }
    }
}

Contoh skrip manual untuk definisi hierarki lengkap

@(
    title=Title,
    firstName=FirstName,
    middleName=MiddleName,
    lastName=LastName,
    suffix=Suffix,
    contactDetails=@(
        email=EmailAddress,
        phone=Phone
    ),
    address=@(
        line1=AddressLine1,
        line2=AddressLine2,
        city=City,
        state=StateProvince,
        country=CountryRegion,
        postCode=PostalCode
    ),
    ids=[
        toString(CustomerID), toString(AddressID), rowguid
    ]
)

Berikut adalah beberapa konektor dan format umum yang terkait dengan format JSON:

  • Azure Blob Storage (connector-azure-blob-storage.md)
  • Format teks dibatasi (format-delimited-text.md)
  • Konektor OData (connector-odata.md)
  • Format parket (format-parquet.md)