View a markdown version of this page

SALIN dari format JSON - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

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

SALIN dari format JSON

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

Sebuah array JSON dimulai dan diakhiri dengan tanda kurung, dan berisi kumpulan nilai yang 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 yang "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 atau array JSON, 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 tanda kurung atau notasi titik. Amazon Redshift tidak mendukung elemen JSONPath apa pun, seperti karakter wildcard atau ekspresi filter, yang mungkin berubah menjadi 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 tanda kurung. Tanda dolar ($) mewakili struktur tingkat akar.

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

Dalam 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 tanda kurung dan notasi titik dalam jsonpaths array. Kurung dapat digunakan dalam notasi tanda kurung dan notasi titik untuk mereferensikan elemen array.

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

  • Tanda kutip lurus tunggal (')

  • Periode, atau titik (.)

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

Jika nilai dalam pasangan nama-nilai yang direferensikan oleh ekspresi JSONPath adalah objek atau array, seluruh objek atau array dimuat sebagai string, termasuk kurung 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 di \n muat sebagai karakter baris baru dan memu \t at sebagai karakter tab. Untuk memuat garis miring terbalik, lepaskan dengan backslash (). \\

Misalnya, Anda memiliki JSON berikut dalam file bernama escape.json dalam buckets3://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)

Kehilangan 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 float point tidak direpresentasikan secara tepat dalam sistem komputer. Akibatnya, data yang Anda salin dari file JSON mungkin tidak dibulatkan seperti yang Anda harapkan. Untuk menghindari hilangnya presisi, sebaiknya gunakan 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.