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 JSONPaths file untuk mengurai data sumber JSON. JSONPaths File adalah file teks yang berisi objek JSON tunggal dengan nama"jsonpaths"
dipasangkan dengan array ekspresi. JSONPath Jika nama adalah string selain"jsonpaths"
, COPY menggunakan'auto'
argumen alih-alih menggunakan JSONPaths file.
Untuk contoh yang menunjukkan cara memuat data menggunakan'auto'
,'auto ignorecase'
, atau JSONPaths file, dan menggunakan objek JSON atau array, lihat. Salin dari contoh JSON
JSONPath pilihan
Dalam sintaks Amazon Redshift COPY, JSONPath ekspresi menentukan jalur eksplisit ke elemen nama tunggal dalam struktur data hierarkis JSON, menggunakan notasi braket atau notasi titik. Amazon Redshift tidak mendukung JSONPath elemen 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 JSONPaths file dengan JSONPath ekspresi 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 JSONPaths file 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, JSONPath ekspresi 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 JSONPath ekspresi 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" } ] }
JSONPath Ekspresi $['tags']
kemudian mengembalikan nilai berikut.
"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]"
JSONPath Ekspresi $['friends'][1]
kemudian mengembalikan nilai berikut.
"{"id": 1,"name": "Renaldo"}"
Setiap JSONPath ekspresi 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 JSONPaths file, 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://amzn-s3-demo-bucket/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://amzn-s3-demo-bucket/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.