

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengkonversi format data masukan di Amazon Data Firehose
<a name="record-format-conversion"></a>

Amazon Data Firehose dapat mengonversi format data input Anda dari JSON ke [Apache Parquet atau Apache](https://parquet.apache.org/) [ORC](https://orc.apache.org/) sebelum menyimpan data di Amazon S3. Parquet dan ORC adalah format data kolumnar yang menghemat ruang dan memungkinkan kueri yang lebih cepat dibandingkan dengan format berorientasi baris seperti JSON. Jika Anda ingin mengonversi format input selain JSON, seperti nilai yang dipisahkan koma (CSV) atau teks terstruktur, Anda dapat menggunakannya AWS Lambda untuk mengubahnya menjadi JSON terlebih dahulu. Untuk informasi selengkapnya, lihat [Mengubah data sumber di Amazon Data Firehose](data-transformation.md).

Anda dapat mengonversi format data Anda bahkan jika Anda menggabungkan catatan Anda sebelum mengirimnya ke Amazon Data Firehose.

Amazon Data Firehose memerlukan tiga elemen berikut untuk mengonversi format data rekaman Anda: 

## Deserializer
<a name="record-format-conversion-deserializer"></a>

Amazon Data Firehose memerlukan deserializer untuk membaca JSON data input Anda. Anda dapat memilih salah satu dari dua jenis deserializer berikut.

Ketika menggabungkan beberapa dokumen JSON ke dalam catatan yang sama, pastikan bahwa input Anda masih disajikan dalam format JSON yang didukung. Array dokumen JSON bukan input yang valid. 

Misalnya, ini adalah input yang benar: `{"a": 1}{"b": 1}` dan ini adalah input yang salah:`[{"a":1}, {"a":2}]`.
+ [Apache Sarang JSON SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON)
+ [OpenX JSON SerDe](https://github.com/rcongiu/Hive-JSON-Serde)

### Pilih deserializer JSON
<a name="record-format-conversion-deserializers"></a>

Pilih [OpenX JSON SerDe jika masukan JSON](https://github.com/rcongiu/Hive-JSON-Serde) Anda berisi stempel waktu dalam format berikut:
+  yyyy-MM-dd'T'HH:mm: SS [.S] 'Z', di mana fraksi dapat memiliki hingga 9 digit — Misalnya,. `2017-02-07T15:13:01.39256Z`
+  yyyy-[M]M-[d]d HH:mm:ss[.S], dengan fraksi dapat terdiri atas hingga 9 digit – Sebagai contoh, `2017-02-07 15:13:01.14`.
+  Detik jangka waktu – Sebagai contoh, `1518033528`.
+  Milidetik jangka waktu – Sebagai contoh, `1518033528123`.
+  Detik jangka waktu titik mengambang – Sebagai contoh, `1518033528.123`.

OpenX JSON SerDe dapat mengonversi periode (`.`) menjadi garis bawah (). `_` OpenX JSON SerDE juga dapat mengonversi kunci JSON menjadi huruf kecil sebelum mendeserialisasinya. [Untuk informasi selengkapnya tentang opsi yang tersedia dengan deserializer ini melalui Amazon Data Firehose, lihat Buka. XJson SerDe](https://docs.aws.amazon.com/firehose/latest/APIReference/API_OpenXJsonSerDe.html)

Jika Anda tidak yakin deserializer mana yang harus dipilih, gunakan OpenX JSON SerDe, kecuali jika Anda memiliki stempel waktu yang tidak didukungnya.

Jika Anda memiliki stempel waktu dalam format selain yang tercantum sebelumnya, gunakan [Apache Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-JSON) JSON. SerDe Bila Anda memilih deserializer ini, Anda dapat menentukan format stempel waktu yang akan digunakan. Untuk melakukannya, ikuti sintaks pola string format `DateTimeFormat` Joda-Time. Untuk informasi selengkapnya, lihat [Kelas DateTimeFormat](https://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html). 

Anda juga dapat menggunakan nilai khusus `millis` untuk mengurai stempel waktu dalam milidetik jangka waktu. Jika Anda tidak menentukan format, Amazon Data Firehose menggunakan secara `java.sql.Timestamp::valueOf` default.

The Hive JSON SerDe tidak mengizinkan hal berikut:
+ Periode (`.`) di nama kolom.
+ Bidang yang jenisnya `uniontype`.
+ Bidang yang memiliki jenis numerik dalam skema, tetapi berupa string di JSON. Misalnya, jika skema adalah (int), dan JSON adalah`{"a":"123"}`, Hive SerDe memberikan kesalahan.

The Hive SerDe tidak mengubah JSON bersarang menjadi string. Misalnya, jika Anda memiliki `{"a":{"inner":1}}`, itu tidak memperlakukan `{"inner":1}` sebagai string.

## Skema
<a name="record-format-conversion-schema"></a>

Amazon Data Firehose memerlukan skema untuk menentukan cara menafsirkan data tersebut. Gunakan [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) untuk membuat skema di. AWS Glue Data Catalog Amazon Data Firehose kemudian mereferensikan skema tersebut dan menggunakannya untuk menafsirkan data input Anda. Anda dapat menggunakan skema yang sama untuk mengonfigurasi Amazon Data Firehose dan perangkat lunak analitik Anda. Untuk informasi selengkapnya, lihat [Mengisi Katalog Data AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) di *Panduan AWS Glue Pengembang*.

**catatan**  
Skema yang dibuat dalam Katalog AWS Glue Data harus sesuai dengan struktur data input. Jika tidak, data yang dikonversi tidak akan berisi atribut yang tidak ditentukan dalam skema. Jika Anda menggunakan JSON bersarang, gunakan tipe STRUCT dalam skema yang mencerminkan struktur data JSON Anda. Lihat [contoh ini](https://docs.aws.amazon.com/athena/latest/ug/openx-json-serde.html#nested-json-serde-example) untuk cara menangani JSON bersarang dengan tipe STRUCT. 

**penting**  
Untuk tipe data yang tidak menentukan batas ukuran, ada batas praktis 32 MBs untuk semua data dalam satu baris.  
Jika Anda menentukan panjang untuk `CHAR` or`VARCHAR`, Firehose memotong string pada panjang yang ditentukan saat membaca data input. Jika string data yang mendasarinya lebih panjang, itu tetap tidak berubah.

## Serializer
<a name="record-format-conversion-serializer"></a>

**Firehose memerlukan serializer untuk mengonversi data ke format penyimpanan kolom target (Parket atau ORC)** - Anda dapat memilih salah satu dari dua jenis serializer berikut. 
+ [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC)
+ [Parket SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

### Pilih serializer
<a name="record-format-conversion-serializers"></a>

Serializer yang Anda pilih tergantung pada kebutuhan bisnis Anda. [Untuk mempelajari lebih lanjut tentang dua opsi serializer, lihat [ORC SerDe](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC) dan Parket. SerDe](https://cwiki.apache.org/confluence/display/Hive/Parquet)

# Aktifkan konversi format rekaman
<a name="enable-record-format-conversion"></a>

Jika Anda mengaktifkan konversi format rekaman, Anda tidak dapat menyetel tujuan Amazon Data Firehose menjadi Amazon OpenSearch Service, Amazon Redshift, atau Splunk. Dengan konversi format diaktifkan, Amazon S3 adalah satu-satunya tujuan yang dapat Anda gunakan untuk aliran Firehose Anda. Bagian berikut menunjukkan cara mengaktifkan konversi format rekaman dari operasi konsol dan Firehose API. Untuk contoh cara mengatur konversi format rekaman dengan CloudFormation, lihat [AWS::DataFirehose: DeliveryStream](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisfirehose-deliverystream.html#aws-resource-kinesisfirehose-deliverystream--examples).

## Aktifkan konversi format rekaman dari konsol
<a name="record-format-conversion-using-console"></a>

Anda dapat mengaktifkan konversi format data di konsol saat membuat atau memperbarui aliran Firehose. Dengan konversi format data diaktifkan, Amazon S3 adalah satu-satunya tujuan yang dapat Anda konfigurasi untuk aliran Firehose. Selain itu, kompresi Amazon S3 akan dinonaktifkan ketika Anda mengaktifkan konversi format. Namun, kompresi Snappy terjadi secara otomatis sebagai bagian dari proses konversi. Format pembingkaian untuk Snappy yang digunakan Amazon Data Firehose dalam hal ini kompatibel dengan Hadoop. Ini berarti Anda dapat menggunakan hasil kompresi Snappy dan menjalankan kueri pada data ini di Athena. [Untuk format pembingkaian Snappy yang diandalkan Hadoop, lihat .java. BlockCompressorStream](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java)

**Untuk mengaktifkan konversi format data untuk aliran Firehose data**

1. Masuk ke Konsol Manajemen AWS, dan buka konsol Amazon Data Firehose di. [https://console.aws.amazon.com/firehose/](https://console.aws.amazon.com/firehose/)

1. Pilih aliran Firehose untuk diperbarui, atau buat aliran Firehose baru dengan mengikuti langkah-langkahnya. [Tutorial: Membuat aliran Firehose dari konsol](basic-create.md)

1. Di bawah **Mengonversi format catatan**, atur **Konversi format catatan** ke **Diaktifkan**.

1. Pilih format output yang Anda inginkan. Untuk informasi selengkapnya tentang kedua opsi, lihat [Apache Parquet](https://parquet.apache.org/) dan [Apache ORC](https://orc.apache.org/).

1. Pilih AWS Glue tabel untuk menentukan skema untuk catatan sumber Anda. Atur Wilayah, basis data, tabel, dan versi tabel.

## Mengelola konversi format rekaman dari Firehose API
<a name="record-format-conversion-using-api"></a>

[https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) Jika Anda menentukan [DataFormatConversionConfiguration](https://docs.aws.amazon.com/firehose/latest/APIReference/API_DataFormatConversionConfiguration.html), pembatasan berikut berlaku.
+ Di [BufferingHints](https://docs.aws.amazon.com/firehose/latest/APIReference/API_BufferingHints.html), Anda tidak dapat mengatur `SizeInMBs` ke nilai kurang dari 64 jika Anda mengaktifkan konversi format rekaman. Selain itu, bila konversi format tidak diaktifkan, nilai defaultnya adalah 5. Nilai menjadi 128 saat Anda mengaktifkannya.
+ [Anda harus mengatur `CompressionFormat` di [Extendeds3 DestinationConfiguration atau di Extendeds3](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html) ke. DestinationUpdate](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationUpdate.html) `UNCOMPRESSED` Nilai default-nya `CompressionFormat` is `UNCOMPRESSED`. Oleh karena itu, Anda juga dapat membiarkannya tidak ditentukan di [DestinationConfigurationExtendeds3](https://docs.aws.amazon.com/firehose/latest/APIReference/API_ExtendedS3DestinationConfiguration.html). Data masih dikompresi sebagai bagian dari proses serialisasi, menggunakan kompresi Snappy secara default. Format pembingkaian untuk Snappy yang digunakan Amazon Data Firehose dalam hal ini kompatibel dengan Hadoop. Ini berarti Anda dapat menggunakan hasil kompresi Snappy dan menjalankan kueri pada data ini di Athena. [Untuk format pembingkaian Snappy yang diandalkan Hadoop, lihat .java. BlockCompressorStream](https://github.com/apache/hadoop/blob/f67237cbe7bc48a1b9088e990800b37529f1db2a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/io/compress/BlockCompressorStream.java) Bila Anda mengonfigurasi serializer, Anda dapat memilih jenis kompresi lainnya.

# Menangani kesalahan untuk konversi format data
<a name="record-format-conversion-error-handling"></a>

Saat Amazon Data Firehose tidak dapat mengurai atau mendeserialisasi catatan (misalnya, ketika data tidak cocok dengan skema), ia menuliskannya ke Amazon S3 dengan awalan kesalahan. Jika penulisan ini gagal, Amazon Data Firehose mencobanya lagi selamanya, memblokir pengiriman lebih lanjut. Untuk setiap catatan yang gagal, Amazon Data Firehose menulis dokumen JSON dengan skema berikut:

```
{
  "attemptsMade": long,
  "arrivalTimestamp": long,
  "ErrorCode": string,
  "ErrorMessage": string,
  "attemptEndingTimestamp": long,
  "rawData": string,
  "sequenceNumber": string,
  "subSequenceNumber": long,
  "dataCatalogTable": {
    "catalogId": string,
    "databaseName": string,
    "tableName": string,
    "region": string,
    "versionId": string,
    "catalogArn": string
  }
}
```