Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
COPYdari JSON format
Struktur JSON data terdiri dari satu set objek atau array. Sebuah JSON objek dimulai dan diakhiri dengan kawat 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”.
JSONArray 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, JSON objek, atau array.
JSONobjek dan array dapat bersarang, memungkinkan struktur data hierarkis. Contoh berikut menunjukkan struktur JSON data 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 JSON array.
[ 1006410, "Amazon Redshift Database Developer Guide" ] [ 100540, "Amazon Simple Storage Service User Guide" ]
COPYpilihan untuk JSON
Anda dapat menentukan opsi berikut saat menggunakan COPY dengan data JSON format:
-
'auto'
— COPY secara otomatis memuat bidang dari JSON file. -
'auto ignorecase'
— COPY secara otomatis memuat bidang dari JSON file sambil mengabaikan kasus nama bidang. -
s3://jsonpaths_file
— COPY menggunakan JSONPaths file untuk mengurai data JSON sumber. JSONPathsFile adalah file teks yang berisi satu JSON objek dengan nama"jsonpaths"
dipasangkan dengan array JSONPath ekspresi. 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 JSON objek atau array, lihatSalin dari JSON contoh.
JSONPathpilihan
Dalam COPY sintaks Amazon Redshift, JSONPath ekspresi menentukan jalur eksplisit ke elemen nama tunggal dalam struktur data JSON hierarkis, 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. JSONmenggunakan 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 JSON data 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" } ] }
JSONPathEkspresi $['tags']
kemudian mengembalikan nilai berikut.
"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]"
JSONPathEkspresi $['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 JSON objek atau array, lihatSalin dari JSON contoh.
Untuk informasi tentang cara menyalin beberapa JSON file, lihatMenggunakan manifes untuk menentukan file data.
Karakter melarikan diri di JSON
COPYmemuat \n
sebagai karakter baris baru dan dimuat \t
sebagai karakter tab. Untuk memuat garis miring terbalik, lepaskan dengan garis miring terbalik (). \\
Misalnya, Anda memiliki yang berikut ini JSON 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 ESCAPES tabel dan memuatJSON.
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 ESCAPES tabel 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 JSON format ke kolom yang didefinisikan sebagai tipe data numerik. Beberapa nilai floating point tidak terwakili persis dalam sistem komputer. Akibatnya, data yang Anda salin dari JSON file 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 ROUNDECuntuk membulatkan angka alih-alih memotong.
-
Alih-alih menggunakan JSON atau file Avro, gunakan, dibatasi karakterCSV, atau file teks dengan lebar tetap.