Bagikan melalui


Format file dan codec kompresi yang didukung di Azure Data Factory dan Synapse Analytics (warisan)

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 berlaku untuk konektor berikut: Amazon S3, Azure Blob, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Files, Sistem File, FTP, Google Cloud Storage, HDFS, HTTP, dan SFTP.

Penting

Layanan ini memperkenalkan model himpunan data berbasis format baru, lihat artikel format terkait dengan detail:
- Format Avro
- Format Biner
- Format teks terpisah
- Format JSON
- Format ORC
- Format Parquet
Konfigurasi lainnya yang disebutkan dalam artikel ini masih didukung sebagaimana adanya untuk kompabitilitas mundur. Anda disarankan untuk menggunakan model baru di masa mendatang.

Format teks (warisan)

Catatan

Pelajari model baru dari artikel Format teks dibatasi. Konfigurasi berikut pada himpunan data penyimpanan data berbasis file masih didukung apa adanya untuk kompabitilitas mundur. Anda disarankan untuk menggunakan model baru di masa mendatang.

Jika Anda ingin membaca dari file teks atau menulis ke file teks, atur type properti di format bagian dari himpunan data ke TextFormat. Anda juga dapat menentukan properti opsional berikut di bagian format tersebut. Lihat bagian Contoh TextFormat tentang cara mengonfigurasikan.

Properti Deskripsi Nilai yang diizinkan Wajib
columnDelimiter Karakter yang digunakan untuk memisahkan kolom dalam sebuah file. Anda dapat mempertimbangkan untuk menggunakan karakter langka yang tidak dapat dicetak yang mungkin tidak ada dalam data Anda. Misalnya, tentukan "\u0001", yang mewakili Start of Heading (SOH). Hanya satu karakter yang diizinkan. Nilai default-nya adalah koma (',').

Untuk menggunakan karakter Unicode, lihat Karakter Unicode untuk mendapatkan kode yang sesuai.
No
rowDelimiter Karakter yang digunakan untuk memisahkan baris dalam sebuah file. Hanya satu karakter yang diizinkan. Nilai default-nya adalah salah satu dari nilai berikut pada baca: ["\r\n", "\r", "\n"] dan "\r\n" pada tulis. No
escapeChar Karakter khusus yang digunakan untuk keluar dari pemisah kolom dalam konten file input.

Anda tidak dapat menentukan escapeChar dan quoteChar untuk tabel.
Hanya satu karakter yang diizinkan. Tidak ada nilai default.

Contoh: jika Anda memiliki koma (',') sebagai pemisah kolom, tetapi Anda ingin memiliki karakter koma dalam teks (contoh: "Halo, dunia"), Anda dapat menentukan '$' sebagai karakter escape dan menggunakan string "Hello$, world" di sumbernya.
No
quoteChar Karakter yang digunakan untuk mengutip nilai untai (karakter). Pemisah kolom dan baris di dalam karakter kutipan akan diperlakukan sebagai bagian dari nilai untai (karakter). Properti ini berlaku untuk himpunan data input dan output.

Anda tidak dapat menentukan escapeChar dan quoteChar untuk tabel.
Hanya satu karakter yang diizinkan. Tidak ada nilai default.

Misalnya, jika Anda memiliki koma (',') sebagai pembatas kolom tetapi Anda ingin memiliki karakter koma dalam teks (contoh: <Halo, dunia>), Anda dapat mendefinisikan " (tanda kutip ganda) sebagai karakter kutip dan gunakan string "Halo, dunia" di sumbernya.
No
nullValue Satu atau beberapa karakter yang digunakan untuk mewakili nilai null. Satu atau beberapa karakter. Nilai default adalah "\N" dan "NULL" pada baca dan "\N" pada tulis. No
encodingName Tentukan nama pengodean. Nama pengodean yang valid. lihat Properti Encoding.EncodingName. Contoh: windows-1250 atau shift_jis. Nilai default-nya adalah UTF-8. No
firstRowAsHeader Menentukan apakah akan mempertimbangkan baris pertama sebagai header. Untuk himpunan data input, layanan akan membaca baris pertama sebagai header. Untuk himpunan data output, layanan akan menulis baris pertama sebagai header.

Lihat Skenario penggunaan firstRowAsHeader dan skipLineCount untuk skenario sampel.
Benar
False (default)
No
skipLineCount Menunjukkan jumlah baris yang tidak kosong untuk dilewati saat membaca data dari file input. Jika skipLineCount dan firstRowAsHeader ditentukan, baris tersebut akan dilewati terlebih dahulu dan kemudian informasi header dibaca dari file input.

Lihat Skenario penggunaan firstRowAsHeader dan skipLineCount untuk skenario sampel.
Bilangan bulat No
treatEmptyAsNull Menentukan apakah akan memperlakukan string null atau kosong sebagai nilai null saat membaca data dari file input. True (default)
Salah
No

Contoh TextFormat

Dalam definisi JSON berikut untuk himpunan data, beberapa properti opsional ditentukan.

"typeProperties":
{
    "folderPath": "mycontainer/myfolder",
    "fileName": "myblobname",
    "format":
    {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "rowDelimiter": ";",
        "quoteChar": "\"",
        "NullValue": "NaN",
        "firstRowAsHeader": true,
        "skipLineCount": 0,
        "treatEmptyAsNull": true
    }
},

Untuk menggunakan escapeChar alih-alih quoteChar, ganti baris dengan quoteChar escapeChar berikut:

"escapeChar": "$",

Skenario untuk menggunakan firstRowAsHeader dan skipLineCount

  • Anda akan menyalin dari sumber non-file ke file teks dan ingin menambahkan baris header yang berisi metadata skema (misalnya: skema SQL). Tentukan firstRowAsHeader sebagai true dalam himpunan data output untuk skenario ini.
  • Anda akan menyalin dari file teks yang berisi baris header ke sink non-file dan ingin menghilangkan baris tersebut. Tentukan firstRowAsHeader sebagai true dalam himpunan data input.
  • Anda akan menyalin dari file teks dan ingin melompati beberapa baris di awal yang tidak berisi data atau informasi header. Tentukan skipLineCount untuk menunjukkan jumlah baris yang akan dilompati. Jika sisa file berisi baris header, Anda juga dapat menentukan firstRowAsHeader. Jika skipLineCount dan firstRowAsHeader ditentukan, baris tersebut akan dilewati terlebih dahulu dan kemudian informasi header dibaca dari file input

Format JSON (warisan)

Catatan

Pelajari model baru dari artikel format JSON. Konfigurasi berikut pada himpunan data penyimpanan data berbasis file masih didukung apa adanya untuk kompabitilitas mundur. Anda disarankan untuk menggunakan model baru di masa mendatang.

Untuk mengimpor/mengekspor file JSON sebagaimana adanya ke/dari Microsoft Azure Cosmos DB, lihat bagian Impor/ekspor dokumen JSON di artikel Memindahkan data ke/dari Microsoft Azure Cosmos DB.

Jika Anda ingin mengurai file JSON atau menulis data dalam format JSON, atur properti type di bagian format ke JsonFormat. Anda juga dapat menentukan properti opsional berikut di bagian format tersebut. Lihat bagian Contoh JsonFormat tentang cara mengonfigurasikan.

Properti Deskripsi Wajib diisi
filePattern Tunjukkan pola data yang disimpan di setiap file JSON. Nilai yang diizinkan adalah: setOfObjects dan arrayOfObjects. Nilai default-nya adalah setOfObjects. Lihat bagian Pola file JSON untuk detail tentang pola ini. No
jsonNodeReference Jika Anda ingin mengulang dan mengekstrak data dari objek di dalam bidang larik dengan pola yang sama, tentukan jalur JSON dari larik tersebut. Properti ini hanya didukung saat menyalin data dari file JSON. No
jsonPathDefinition Tentukan ekspresi jalur JSON untuk setiap pemetaan kolom dengan nama kolom yang disesuaikan (dimulai dengan huruf kecil). Properti ini hanya didukung saat menyalin data dari file JSON dan Anda dapat mengekstrak data dari objek atau larik.

Untuk bidang di bawah objek root, mulailah dengan root $; untuk bidang di dalam larik yang dipilih oleh properti jsonNodeReference, mulai dari elemen larik. Lihat bagian Contoh JsonFormat tentang cara mengonfigurasikan.
No
encodingName Tentukan nama pengodean. Untuk daftar nama pengodean yang valid, lihat: Properti Encoding.EncodingName. Contohnya: windows-1250 atau shift_jis. Nilai default-nya adalah: UTF-8. No
nestingSeparator Karakter yang digunakan untuk memisahkan tingkat bersarang. Nilai defaultnya adalah '.' (titik). No

Catatan

Untuk kasus penerapan silang data dalam array menjadi beberapa baris (kasus 1 -> contoh 2 dalam contoh JsonFormat), Anda hanya dapat memilih untuk memperluas array tunggal menggunakan properti jsonNodeReference.

Pola file JSON

Aktivitas salin dapat memilah pola file JSON berikut:

  • Jenis I: setOfObjects

    Setiap file berisi objek tunggal, atau beberapa objek yang dipisahkan baris/digabungkan. Jika opsi ini dipilih dalam himpunan data output, aktivitas salin akan menghasilkan satu file JSON dengan setiap objek per baris (dipisahkan baris).

    • contoh JSON objek tunggal

      {
          "time": "2015-04-29T07:12:20.9100000Z",
          "callingimsi": "466920403025604",
          "callingnum1": "678948008",
          "callingnum2": "567834760",
          "switch1": "China",
          "switch2": "Germany"
      }
      
    • contoh JSON yang dipisahkan baris

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

Contoh JsonFormat

Kasus 1: Menyalin data dari file JSON

Contoh 1: mengekstrak data dari objek dan larik

Dalam sampel ini, Anda ingin satu objek JSON akar dipetakan ke satu baris dalam hasil tabel. Jika Anda memiliki file JSON dengan konten berikut:

{
    "id": "ed0e4960-d9c5-11e6-85dc-d7996816aad3",
    "context": {
        "device": {
            "type": "PC"
        },
        "custom": {
            "dimensions": [
                {
                    "TargetResourceType": "Microsoft.Compute/virtualMachines"
                },
                {
                    "ResourceManagementProcessRunId": "827f8aaa-ab72-437c-ba48-d8917a7336a3"
                },
                {
                    "OccurrenceTime": "1/13/2017 11:24:37 AM"
                }
            ]
        }
    }
}

dan Anda ingin menyalinnya ke tabel Azure SQL dalam format berikut, dengan mengekstrak data dari objek dan array:

ID deviceType targetResourceType resourceManagementProcessRunId occurrenceTime
ed0e4960-d9c5-11e6-85dc-d7996816aad3 PC Microsoft.Compute/virtualMachines 827f8aaa-ab72-437c-ba48-d8917a7336a3 13/1/2017 11.24.37

Himpunan data input dengan jenis JsonFormat didefinisikan sebagai berikut: (definisi parsial hanya dengan bagian yang relevan). Lebih spesifik:

  • Bagian structure mendefinisikan nama kolom yang disesuaikan dan jenis data yang sesuai saat mengonversi ke data tabel. Bagian ini bersifat opsional kecuali Anda perlu melakukan pemetaan kolom. Untuk informasi selengkapnya, lihat artikel Memetakan kolom himpunan data sumber ke kolom himpunan data tujuan.
  • jsonPathDefinition menentukan jalur JSON untuk setiap kolom yang menunjukkan dari mana harus mengekstrak data. Untuk menyalin data dari larik, Anda dapat menggunakanarray[x].propertyuntuk mengekstrak nilai properti yang diberikan dari objek xth, atau menggunakan array[*].property untuk menemukan nilai dari objek apa pun yang berisi properti tersebut.
"properties": {
    "structure": [
        {
            "name": "id",
            "type": "String"
        },
        {
            "name": "deviceType",
            "type": "String"
        },
        {
            "name": "targetResourceType",
            "type": "String"
        },
        {
            "name": "resourceManagementProcessRunId",
            "type": "String"
        },
        {
            "name": "occurrenceTime",
            "type": "DateTime"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat",
            "filePattern": "setOfObjects",
            "jsonPathDefinition": {"id": "$.id", "deviceType": "$.context.device.type", "targetResourceType": "$.context.custom.dimensions[0].TargetResourceType", "resourceManagementProcessRunId": "$.context.custom.dimensions[1].ResourceManagementProcessRunId", "occurrenceTime": " $.context.custom.dimensions[2].OccurrenceTime"}
        }
    }
}

Contoh 2: menerapkan silang beberapa objek dengan pola yang sama dari larik

Dalam sampel ini, Anda ingin mengubah satu objek JSON akar menjadi beberapa baris dalam hasil tabel. Jika Anda memiliki file JSON dengan konten berikut:

{
    "ordernumber": "01",
    "orderdate": "20170122",
    "orderlines": [
        {
            "prod": "p1",
            "price": 23
        },
        {
            "prod": "p2",
            "price": 13
        },
        {
            "prod": "p3",
            "price": 231
        }
    ],
    "city": [ { "sanmateo": "No 1" } ]
}

dan Anda ingin menyalinnya ke tabel Azure SQL dalam format berikut, dengan meratakan data di dalam larik dan menggabungkan silang dengan info akar umum:

ordernumber orderdate order_pd order_price city
01 20170122 Hal 1 23 [{"sanmateo":"No 1"}]
01 20170122 P2 13 [{"sanmateo":"No 1"}]
01 20170122 P3 231 [{"sanmateo":"No 1"}]

Himpunan data input dengan jenis JsonFormat didefinisikan sebagai berikut: (definisi parsial hanya dengan bagian yang relevan). Lebih spesifik:

  • Bagian structure mendefinisikan nama kolom yang disesuaikan dan jenis data yang sesuai saat mengonversi ke data tabel. Bagian ini bersifat opsional kecuali Anda perlu melakukan pemetaan kolom. Untuk informasi selengkapnya, lihat artikel Memetakan kolom himpunan data sumber ke kolom himpunan data tujuan.
  • jsonNodeReference menunjukkan untuk iterasi dan mengekstrak data dari objek dengan pola yang sama di bawah array orderlines.
  • jsonPathDefinition menentukan jalur JSON untuk setiap kolom yang menunjukkan dari mana harus mengekstrak data. Dalam contoh ini, ordernumber, orderdate, dan city berada di bawah objek akar dengan jalur JSON dimulai dengan $., sementara order_pddan order_price didefinisikan dengan jalur yang berasal dari elemen array tanpa $..
"properties": {
    "structure": [
        {
            "name": "ordernumber",
            "type": "String"
        },
        {
            "name": "orderdate",
            "type": "String"
        },
        {
            "name": "order_pd",
            "type": "String"
        },
        {
            "name": "order_price",
            "type": "Int64"
        },
        {
            "name": "city",
            "type": "String"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat",
            "filePattern": "setOfObjects",
            "jsonNodeReference": "$.orderlines",
            "jsonPathDefinition": {"ordernumber": "$.ordernumber", "orderdate": "$.orderdate", "order_pd": "prod", "order_price": "price", "city": " $.city"}
        }
    }
}

Perhatikan poin-poin berikut:

  • Jika structure dan jsonPathDefinition tidak ditentukan di dalam himpunan data, Aktivitas Salin akan mendeteksi skema dari objek pertama dan meratakan seluruh objek.
  • Jika input JSON memiliki larik, secara default Aktivitas Salin mengonversi seluruh nilai larik menjadi untai (karakter). Anda dapat memilih untuk mengekstrak data darinya menggunakan jsonNodeReference dan/atau jsonPathDefinition, atau melompatinya dengan tidak menentukannya di jsonPathDefinition.
  • Jika ada nama duplikat di tingkat yang sama, Aktivitas Salin akan memilih nama yang terakhir.
  • Nama properti peka huruf besar/kecil. Dua properti dengan nama yang sama, tetapi kapitalisasi berbeda akan diperlakukan sebagai dua properti terpisah.

Kasus 2: Menulis data ke file JSON

Jika Anda memiliki tabel berikut ini di Microsoft Azure SQL Database:

ID order_date order_price order_by
1 20170119 2000 David
2 20170120 3500 Patrick
3 20170121 4000 Jason

dan untuk setiap baris, Anda berharap untuk menulis ke objek JSON dalam format berikut:

{
    "id": "1",
    "order": {
        "date": "20170119",
        "price": 2000,
        "customer": "David"
    }
}

Himpunan data output dengan jenis JsonFormat didefinisikan sebagai berikut: (definisi parsial dengan hanya bagian yang relevan). Lebih spesifik, bagian structure mendefinisikan nama properti yang disesuaikan dalam file tujuan, nestingSeparator (default-nya adalah ".") digunakan untuk mengidentifikasi lapisan sarang dari namanya. Bagian ini bersifat opsional kecuali Anda ingin mengubah nama properti yang dibandingkan dengan nama kolom sumber, atau menyarangkan beberapa properti.

"properties": {
    "structure": [
        {
            "name": "id",
            "type": "String"
        },
        {
            "name": "order.date",
            "type": "String"
        },
        {
            "name": "order.price",
            "type": "Int64"
        },
        {
            "name": "order.customer",
            "type": "String"
        }
    ],
    "typeProperties": {
        "folderPath": "mycontainer/myfolder",
        "format": {
            "type": "JsonFormat"
        }
    }
}

Format parquet (warisan)

Catatan

Pelajari model baru dari artikel format Parquet. Konfigurasi berikut pada himpunan data penyimpanan data berbasis file masih didukung apa adanya untuk kompabitilitas mundur. Anda disarankan untuk menggunakan model baru di masa mendatang.

Jika Anda ingin mengurai file Parquet atau menulis data dalam format Parquet, atur properti format type ke ParquetFormat. Anda tidak perlu menentukan properti apa pun di bagian Format dalam bagian typeProperties. Contoh:

"format":
{
    "type": "ParquetFormat"
}

Perhatikan poin berikut:

  • Jenis data kompleks tidak didukung (MAP, LIST).
  • Spasi kosong dalam nama kolom tidak didukung.
  • File Parquet memiliki opsi terkait pemadatan berikut: NONE, SNAPPY, GZIP, dan LZO. Layanan tersebut mendukung pembacaan data dari file Parquet dalam salah satu format terkompresi ini kecuali LZO - ia menggunakan codec kompresi dalam metadata untuk membaca data. Namun, saat menulis ke file Parquet, layanan tersebut memilih SNAPPY, yang merupakan default untuk format Parquet. Saat ini, tidak ada opsi untuk mengambil alih perilaku ini.

Penting

Untuk salinan yang diberdayakan oleh Microsoft Integration Runtime yang Dihost Sendiri, misalnya antara penyimpanan data lokal dan cloud, jika Anda tidak menyalin file Parquet apa adanya, Anda perlu menginstal 64-bit JRE 8 (Java Runtime Environment) atau OpenJDK di mesin runtime integrasi Anda. Periksa paragraf berikut dengan detail selengkapnya.

Untuk penyalinan yang berjalan pada runtime integrasi yang Dihosting sendiri dengan serialisasi/deserialisasi file Parquet, layanan mencari runtime Java dengan terlebih dahulu memeriksa registri (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) untuk JRE, jika tidak ditemukan, kedua memeriksa variabel sistem JAVA_HOME untuk OpenJDK.

  • Untuk menggunakan JRE: IR 64-bit membutuhkan JRE 64-bit. Anda dapat menemukannya dari sini.
  • Untuk menggunakan OpenJDK: Ini didukung sejak IR versi 3.13. Kemas jvm.dll dengan semua rakitan OpenJDK lain yang diperlukan ke dalam mesin IR yang dihost sendiri, dan atur variabel lingkungan sistem JAVA_HOME dengan sesuai.

Tip

Jika Anda menyalin data ke/dari format Parquet menggunakan Integration Runtime yang Dihost sendiri dan menekan kesalahan yang mengatakan "Kesalahan terjadi saat memanggil java, pesan: java.lang.OutOfMemoryError:Java heap space", Anda dapat menambahkan variabel lingkungan _JAVA_OPTIONS di mesin yang meng-host IR yang dihost sendiri untuk menyesuaikan ukuran timbunan min/maks agar JVM memberdayakan salinan tersebut, lalu eksekusi ulang alur.

Mengatur ukuran timbunan JVM pada IR yang dihost sendiri

Contoh: atur variabel _JAVA_OPTIONS dengan nilai -Xms256m -Xmx16g. Bendera Xms menentukan kumpulan alokasi memori awal untuk Java Virtual Machine (JVM), sedangkan Xmx menentukan kumpulan alokasi memori maksimum. Ini berarti bahwa JVM akan dimulai dengan jumlah memori Xms dan akan dapat menggunakan jumlah memori maksimum Xmx. Secara default, layanan tersebut menggunakan min 64 MB dan maks 1G.

Pemetaan jenis data untuk file Parquet

Jenis data layanan sementara Jenis Parquet Primitive Parquet Jenis Asli (Deserialisasi) Parquet Jenis Asli (Serialisasi)
Boolean Boolean T/A T/A
SByte Int32 Int8 Int8
Byte Int32 UInt8 Int16
Int16 Int32 Int16 Int16
UInt16 Int32 UInt16 Int32
Int32 Int32 Int32 Int32
UInt32 Int64 UInt32 Int64
Int64 Int64 Int64 Int64
UInt64 Int64/Biner UInt64 Decimal
Tunggal Float T/A T/A
Laju Laju T/A T/A
Decimal Biner Decimal Decimal
String Biner Utf8 Utf8
DateTime Int96 T/A T/A
TimeSpan Int96 T/A T/A
DateTimeOffset Int96 T/A T/A
ByteArray Biner T/A T/A
Guid Biner Utf8 Utf8
Char Biner Utf8 Utf8
CharArray Tidak didukung T/A T/A

Format ORC (warisan)

Catatan

Pelajari model baru dari artikel format ORC. Konfigurasi berikut pada himpunan data penyimpanan data berbasis file masih didukung apa adanya untuk kompabitilitas mundur. Anda disarankan untuk menggunakan model baru di masa mendatang.

Jika Anda ingin mengurai file ORC atau menulis data dalam format ORC, atur properti format type ke OrcFormat. Anda tidak perlu menentukan properti apa pun di bagian Format dalam bagian typeProperties. Contoh:

"format":
{
    "type": "OrcFormat"
}

Perhatikan poin berikut:

  • Jenis data kompleks tidak didukung (STRUCT, MAP, LIST, UNION).
  • Spasi kosong dalam nama kolom tidak didukung.
  • File ORC memiliki tiga opsi terkait pemadatan: NONE, ZLIB, SNAPPY. Layanan tersebut mendukung pembacaan data dari file ORC dalam salah satu format terkompresi ini. Ini menggunakan kodek pemadatan dalam metadata untuk membaca data. Namun, saat menulis ke file ORC, layanan tersebut memilih ZLIB, yang merupakan default untuk ORC. Saat ini, tidak ada opsi untuk mengambil alih perilaku ini.

Penting

Untuk salinan yang diberdayakan oleh Microsoft Integration Runtime yang Dihost Sendiri, misalnya antara penyimpanan data lokal dan cloud, jika Anda tidak menyalin file ORC apa adanya, Anda perlu menginstal 64-bit JRE 8 (Java Runtime Environment) atau OpenJDK di mesin runtime integrasi Anda. Periksa paragraf berikut dengan detail selengkapnya.

Untuk penyalinan yang berjalan pada IR yang dihost sendiri dengan serialisasi/deserialisasi file ORC, layanan akan mencari runtime Java dengan terlebih dahulu memeriksa registri (SOFTWARE\JavaSoft\Java Runtime Environment\{Current Version}\JavaHome) untuk JRE, jika tidak ditemukan, lalu memeriksa variabel sistem JAVA_HOME untuk OpenJDK.

  • Untuk menggunakan JRE: IR 64-bit membutuhkan JRE 64-bit. Anda dapat menemukannya dari sini.
  • Untuk menggunakan OpenJDK: Ini didukung sejak IR versi 3.13. Kemas jvm.dll dengan semua rakitan OpenJDK lain yang diperlukan ke dalam mesin IR yang dihost sendiri, dan atur variabel lingkungan sistem JAVA_HOME dengan sesuai.

Pemetaan jenis data untuk file ORC

Jenis data layanan sementara Jenis ORC
Boolean Boolean
SByte Byte
Byte Pendek
Int16 Pendek
UInt16 Int
Int32 Int
UInt32 Panjang
Int64 Panjang
UInt64 String
Tunggal Float
Laju Laju
Decimal Decimal
String String
DateTime Tanda Waktu
DateTimeOffset Tanda Waktu
TimeSpan Tanda Waktu
ByteArray Biner
Guid String
Char Char(1)

Format AVRO (warisan)

Catatan

Pelajari model baru dari artikel format Avro. Konfigurasi berikut pada himpunan data penyimpanan data berbasis file masih didukung apa adanya untuk kompabitilitas mundur. Anda disarankan untuk menggunakan model baru di masa mendatang.

Jika Anda ingin memilah file Avro atau menulis data dalam format Avro, atur properti format type ke AvroFormat. Anda tidak perlu menentukan properti apa pun di bagian Format dalam bagian typeProperties. Contoh:

"format":
{
    "type": "AvroFormat",
}

Untuk menggunakan format Avro dalam tabel Apache Hive, Anda dapat merujuk ke Tutorial Apache Hive.

Perhatikan poin berikut:

Dukungan kompresi (warisan)

Layanan tersebut mendukung kompresi/dekompresi data selama penyalinan. Saat Anda menentukan compression properti dalam himpunan data input, aktivitas salin membaca data terkompresi dari sumber dan mendekompresinya; dan ketika Anda menentukan properti dalam himpunan data output, aktivitas salin memadatkan kemudian menulis data ke sink. Berikut beberapa contoh skenario:

  • Membaca data terkompresi GZIP dari Azure blob, mendekompresinya, dan menulis data hasil ke Azure SQL Database. Anda menentukan input himpunan data Azure Blob dengan properti compression type sebagai GZIP.
  • Membaca data dari file teks biasa dari Sistem File lokal, mengompresinya menggunakan format GZip, dan menulis data yang terkompresi ke Azure blob. Anda menentukan output himpunan data Azure Blob dengan properti compression type sebagai GZip.
  • Membaca file .zip server FTP, mendekompresinya untuk mendapatkan file di dalamnya, dan menempatkan file tersebut ke Azure Data Lake Store. Anda menentukan input himpunan data FTP dengan properti compression type sebagai ZipDeflate.
  • Membaca data yang dikompresi GZIP dari Azure blob, mendekompresinya, mengompresnya menggunakan BZIP2, dan menulis data hasil ke Azure blob. Anda menentukan input himpunan data Azure Blob dengan compression type diatur ke GZIP dan output himpunan data dengan compression type diatur ke BZIP2.

Untuk menentukan kompresi untuk himpunan data, gunakan properti kompresi di himpunan data JSON seperti pada contoh berikut:

{
    "name": "AzureBlobDataSet",
    "properties": {
        "type": "AzureBlob",
        "linkedServiceName": {
            "referenceName": "StorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "fileName": "pagecounts.csv.gz",
            "folderPath": "compression/file/",
            "format": {
                "type": "TextFormat"
            },
            "compression": {
                "type": "GZip",
                "level": "Optimal"
            }
        }
    }
}

Bagian kompresi memiliki dua properti:

  • Jenis: kodek pemadatan, yang dapat berupa GZIP, Deflate, BZIP2, atau ZipDeflate. Perhatikan saat menggunakan aktivitas salin untuk mendekompresi file ZipDeflate dan menulis ke penyimpanan data sink berbasis file, file akan diekstraksi ke folder: <path specified in dataset>/<folder named as source zip file>/.

  • Tingkat: rasio kompresi, yang bisa 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.

Catatan

Pengaturan pemadatan tidak didukung untuk data dalam AvroFormat, OrcFormat, atau ParquetFormat. Saat membaca file dalam format ini, layanan tersebut mendeteksi dan menggunakan codec kompresi dalam metadata. Saat menulis ke file dalam format ini, layanan tersebut memilih codec kompresi default untuk format itu. Misalnya, ZLIB untuk OrcFormat dan SNAPPY untuk ParquetFormat.

Jenis file yang tidak didukung dan format pemadatan

Anda dapat menggunakan fitur ekstensibilitas untuk mengubah file yang tidak didukung. Dua opsi termasuk Azure Functions dan tugas kustom dengan menggunakan Azure Batch.

Anda dapat melihat sampel yang menggunakan fungsi Azure untuk mengekstrak konten file tar. Untuk informasi selengkapnya, lihat aktivitas Azure Functions.

Anda juga dapat membangun fungsionalitas ini menggunakan aktivitas dotnet kustom. Informasi selengkapnya tersedia di sini

Pelajari format dan pemadatan file terbaru yang didukung dari Format dan pemadatan file yang didukung.