COPY dari format JSON - Amazon Redshift

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

COPY dari format JSON

Struktur data JSON terdiri dari satu set objek atau array. Objek JSON dimulai dan diakhiri dengan tanda kurung gigi, dan berisi kumpulan pasangan nama-nilai yang tidak berurutan. Setiap nama dan nilai dipisahkan oleh titik dua, dan pasangan dipisahkan dengan koma. Namanya adalah string dalam tanda kutip ganda. Karakter tanda kutip harus berupa tanda kutip sederhana (0x22), bukan tanda kutip miring atau “pintar”.

Array JSON dimulai dan diakhiri dengan tanda kurung, dan berisi kumpulan nilai yang diurutkan dipisahkan oleh koma. Nilai dapat berupa string dalam tanda kutip ganda, angka, Boolean benar atau salah, null, objek JSON, atau array.

Objek dan array JSON dapat bersarang, memungkinkan struktur data hierarkis. Contoh berikut menunjukkan struktur data JSON dengan dua objek yang valid.

{ "id": 1006410, "title": "Amazon Redshift Database Developer Guide" } { "id": 100540, "name": "Amazon Simple Storage Service User Guide" }

Berikut ini menunjukkan data yang sama dengan dua array JSON.

[ 1006410, "Amazon Redshift Database Developer Guide" ] [ 100540, "Amazon Simple Storage Service User Guide" ]

Opsi COPY untuk JSON

Anda dapat menentukan opsi berikut saat menggunakan COPY dengan data format JSON:

  • 'auto' — COPY secara otomatis memuat bidang dari file JSON.

  • 'auto ignorecase'— COPY secara otomatis memuat bidang dari file JSON sambil mengabaikan kasus nama bidang.

  • s3://jsonpaths_file— COPY menggunakan file JSONPaths untuk mengurai data sumber JSON. File JSONPaths adalah file teks yang berisi objek JSON tunggal dengan nama "jsonpaths" dipasangkan dengan array ekspresi JsonPath. Jika namanya adalah string selain"jsonpaths", COPY menggunakan 'auto' argumen alih-alih menggunakan file JSONPaths.

Untuk contoh yang menunjukkan cara memuat data menggunakan'auto','auto ignorecase', atau file JSONPaths, dan menggunakan objek JSON atau array, lihat. Salin dari contoh JSON

Opsi JsonPath

Dalam sintaks Amazon Redshift COPY, ekspresi JSONPath menentukan jalur eksplisit ke elemen nama tunggal dalam struktur data hierarkis JSON, menggunakan notasi braket atau notasi titik. Amazon Redshift tidak mendukung elemen JSONPath apa pun, seperti karakter wildcard atau ekspresi filter, yang mungkin diselesaikan ke jalur ambigu atau beberapa elemen nama. Akibatnya, Amazon Redshift tidak dapat mengurai struktur data multi-level yang kompleks.

Berikut ini adalah contoh file JsonPaths dengan ekspresi JsonPath menggunakan notasi braket. Tanda dolar ($) mewakili struktur tingkat akar.

{ "jsonpaths": [ "$['id']", "$['store']['book']['title']", "$['location'][0]" ] }

Pada contoh sebelumnya, $['location'][0] referensi elemen pertama dalam array. JSON menggunakan pengindeksan array berbasis nol. Indeks array harus bilangan bulat positif (lebih besar dari atau sama dengan nol).

Contoh berikut menunjukkan file JSONPaths sebelumnya menggunakan notasi titik.

{ "jsonpaths": [ "$.id", "$.store.book.title", "$.location[0]" ] }

Anda tidak dapat mencampur notasi braket dan notasi titik dalam array. jsonpaths Kurung dapat digunakan dalam notasi braket dan notasi titik untuk referensi elemen array.

Saat menggunakan notasi titik, ekspresi JSONPath tidak dapat berisi karakter berikut:

  • Tanda kutip lurus tunggal (')

  • Periode, atau titik (.)

  • Kurung ([]) kecuali digunakan untuk referensi elemen array

Jika nilai dalam pasangan nama-nilai direferensikan oleh ekspresi JsonPath adalah objek atau array, seluruh objek atau array dimuat sebagai string, termasuk tanda kurung atau tanda kurung. Misalnya, misalkan data JSON Anda berisi objek berikut.

{ "id": 0, "guid": "84512477-fa49-456b-b407-581d0d851c3c", "isActive": true, "tags": [ "nisi", "culpa", "ad", "amet", "voluptate", "reprehenderit", "veniam" ], "friends": [ { "id": 0, "name": "Martha Rivera" }, { "id": 1, "name": "Renaldo" } ] }

Ekspresi JsonPath $['tags'] kemudian mengembalikan nilai berikut.

"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]"

Ekspresi JsonPath $['friends'][1] kemudian mengembalikan nilai berikut.

"{"id": 1,"name": "Renaldo"}"

Setiap ekspresi JsonPath dalam jsonpaths array sesuai dengan satu kolom di tabel target Amazon Redshift. Urutan elemen jsonpaths array harus sesuai dengan urutan kolom dalam tabel target atau daftar kolom, jika daftar kolom digunakan.

Untuk contoh yang menunjukkan cara memuat data menggunakan 'auto' argumen atau file JSONPaths, dan menggunakan objek JSON atau array, lihat. Salin dari contoh JSON

Untuk informasi tentang cara menyalin beberapa file JSON, lihatMenggunakan manifes untuk menentukan file data.

Karakter melarikan diri di JSON

COPY dimuat \n sebagai karakter baris baru dan dimuat \t sebagai karakter tab. Untuk memuat garis miring terbalik, lepaskan dengan garis miring terbalik (). \\

Misalnya, Anda memiliki JSON berikut dalam file bernama escape.json dalam embers3://mybucket/json/.

{ "backslash": "This is a backslash: \\", "newline": "This sentence\n is on two lines.", "tab": "This sentence \t contains a tab." }

Jalankan perintah berikut untuk membuat tabel ESCAPES dan memuat JSON.

create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35)); copy escapes from 's3://mybucket/json/escape.json' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as json 'auto';

Kueri tabel ESCAPES untuk melihat hasilnya.

select * from escapes; backslash | newline | tab ------------------------+-------------------+---------------------------------- This is a backslash: \ | This sentence | This sentence contains a tab. : is on two lines. (1 row)

Hilangnya presisi numerik

Anda mungkin kehilangan presisi saat memuat angka dari file data dalam format JSON ke kolom yang didefinisikan sebagai tipe data numerik. Beberapa nilai floating point tidak terwakili persis dalam sistem komputer. Akibatnya, data yang Anda salin dari file JSON mungkin tidak dibulatkan seperti yang Anda harapkan. Untuk menghindari hilangnya presisi, kami sarankan menggunakan salah satu alternatif berikut:

  • Mewakili angka sebagai string dengan melampirkan nilai dalam karakter kutipan ganda.

  • Gunakan ROUNDEC untuk membulatkan angka alih-alih memotong.

  • Alih-alih menggunakan file JSON atau Avro, gunakan file teks CSV, dibatasi karakter, atau lebar tetap.