Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai 1 November 2025. Jika Anda ingin menggunakan Python UDFs, buat UDFs sebelum tanggal tersebut. Python yang ada UDFs akan terus berfungsi seperti biasa. Untuk informasi lebih lanjut, lihat posting blog
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan COPY untuk memuat data ke kolom SUPER
Di bagian berikut, Anda dapat mempelajari berbagai cara menggunakan perintah COPY untuk memuat data JSON ke Amazon Redshift. Untuk informasi tentang parameter format data yang digunakan Amazon Redshift untuk mengurai JSON dalam perintah COPY, baca deskripsi parameter diJSON format for COPY. Parameter format data
Topik
Menyalin data dari JSON dan Avro
Amazon Redshift menyediakan metode berikut untuk menyerap dokumen JSON menggunakan COPY, bahkan dengan struktur JSON yang sepenuhnya atau sebagian tidak diketahui:
-
Simpan data yang berasal dari dokumen JSON ke dalam satu kolom data SUPER menggunakan opsi.
noshred
Metode ini berguna ketika skema tidak diketahui atau diharapkan berubah. Dengan demikian, metode ini memudahkan untuk menyimpan seluruh tupel dalam satu kolom SUPER. -
Rusak dokumen JSON menjadi beberapa kolom Amazon Redshift menggunakan
auto
opsi or.jsonpaths
Atribut dapat berupa skalar Amazon Redshift atau nilai SUPER.
Anda dapat menggunakan opsi ini dengan format JSON atau Avro. Untuk informasi lebih lanjut tentang opsi JSON sepertinoshred
,auto
, danjsonpaths
, lihatJSON format for COPY.
Ukuran maksimum untuk objek JSON di Amazon Redshift adalah 4 MB, yang berlaku sebelum penghancuran atau penguraian apa pun.
Metode 1: Menyalin dokumen JSON ke dalam satu kolom data SUPER menggunakan noshred
Anda dapat menyalin seluruh dokumen JSON ke dalam kolom data SUPER tunggal menggunakan noshred
opsi dalam perintah COPY. Pertimbangkan contoh berikut:
Buat tabel dengan kolom data SUPER tunggal.
CREATE TABLE region_nations_noshred (rdata SUPER);
Salin data dari Amazon S3 ke kolom data SUPER tunggal. Untuk menyerap data sumber JSON ke dalam satu kolom data SUPER, tentukan
noshred
opsi dalam klausa FORMAT JSON.COPY region_nations_noshred FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 'noshred';
Setelah COPY berhasil menelan JSON, tabel Anda memiliki kolom data
rdata
SUPER yang berisi data dari seluruh objek JSON. Data yang dicerna mempertahankan semua properti hierarki JSON. Namun, daun dikonversi ke jenis skalar Amazon Redshift untuk pemrosesan kueri yang efisien.Gunakan query berikut untuk mengambil string JSON asli.
SELECT rdata FROM region_nations_noshred;
Saat Amazon Redshift menghasilkan kolom data SUPER, kolom tersebut dapat diakses menggunakan JDBC sebagai string melalui serialisasi JSON. Untuk informasi selengkapnya, lihat Serialisasi JSON bersarang kompleks.
Metode 2: Menyalin dokumen JSON ke beberapa kolom data SUPER
Anda dapat menghancurkan dokumen JSON menjadi beberapa kolom yang dapat berupa kolom data SUPER atau jenis skalar Amazon Redshift. Amazon Redshift menyebarkan bagian yang berbeda dari objek JSON ke kolom yang berbeda. Pertimbangkan contoh berikut:
Buat tabel dengan beberapa kolom untuk menahan JSON yang diparut.
CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );
Untuk menyalin JSON ke dalam
region_nations
tabel, tentukan AUTO opsi di Format JSON klausa untuk membagi nilai JSON di beberapa kolom. COPY mencocokkan atribut JSON tingkat atas dengan nama kolom dan memungkinkan nilai bersarang untuk dicerna sebagai nilai SUPER, seperti array dan objek JSON.COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 'auto';
Ketika nama atribut JSON dalam kasus atas dan bawah campuran, tentukan
auto ignorecase
opsi dalam klausa FORMAT JSON. Untuk informasi selengkapnya tentang perintah COPY, lihatMuat dari data JSON menggunakan opsi 'auto ignorecase'.
Dalam beberapa kasus, ada ketidakcocokan antara nama kolom dan atribut JSON atau atribut untuk memuat bersarang lebih dari satu level. Jika demikian, gunakan jsonpaths
file untuk memetakan atribut JSON secara manual ke kolom Amazon Redshift. Pertimbangkan contoh berikut:
Buat tabel dengan beberapa kolom untuk menahan JSON yang diparut.
CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super );
-
Dalam hal ini, nama kolom tidak cocok dengan atribut JSON. Anda dapat membuat
jsonpaths
file yang memetakan jalur atribut ke kolom tabel berdasarkan posisinya dalamjsonpaths
array, seperti berikut ini:{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$.r_comment", "$.r_nations ] }
-
Gunakan lokasi
jsonpaths
file sebagai argumen ke opsi FORMAT JSON di COPY.COPY nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 's3://redshift-downloads/semistructured/tpch-nested/data/jsonpaths/nations_jsonpaths.json';
-
Gunakan kueri berikut untuk mengakses tabel yang menunjukkan penyebaran data ke beberapa kolom. Kolom data SUPER dicetak menggunakan format JSON.
SELECT r_regionkey,r_name,r_comment,r_nations[0].n_nationkey FROM region_nations ORDER BY 1,2,3 LIMIT 1;
jsonpaths
file memetakan bidang dalam dokumen JSON ke kolom tabel. Anda dapat mengekstrak kolom tambahan, seperti distribusi dan kunci pengurutan, sambil tetap memuat dokumen lengkap sebagai kolom SUPER. Kueri berikut memuat dokumen lengkap ke nations
kolom. name
Kolom adalah kunci sortir dan regionkey
kolom adalah kunci distribusi. Pertimbangkan contoh berikut:
Buat tabel dengan beberapa kolom untuk menahan JSON yang diparut.
CREATE TABLE nations_sorted ( regionkey smallint, name varchar, nations super ) DISTKEY(regionkey) SORTKEY(name);
Petakan root jsonpath “$” ke root dokumen sebagai berikut:
{"jsonpaths": [ "$.r_regionkey", "$.r_name", "$" ] }
Gunakan lokasi
jsonpaths
file sebagai argumen ke opsi FORMAT JSON di COPY.COPY nations_sorted FROM 's3://redshift-downloads/semistructured/tpch-nested/data/json/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT JSON 's3://redshift-downloads/semistructured/tpch-nested/data/jsonpaths/nations_sorted_jsonpaths.json';
Untuk informasi lebih lanjut tentang penggunaanjsonpaths
, lihatCOPY dari format JSON.
Menyalin data dari teks dan CSV
Amazon Redshift mewakili kolom SUPER dalam format teks dan CSV sebagai JSON serial. Pemformatan JSON yang valid diperlukan agar kolom SUPER dimuat dengan informasi jenis yang benar. Hapus kutipan objek, array, angka, boolean, dan nilai null. Bungkus nilai string dalam tanda kutip ganda. Kolom SUPER menggunakan aturan pelolosan standar untuk format teks dan CSV.
Saat menyalin dari CSV, pembatas diloloskan sesuai dengan standar CSV. Pertimbangkan contoh berikut:
CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super ); COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/csv/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT CSV;
Saat menyalin dari teks, jika pembatas yang dipilih mungkin juga muncul di bidang SUPER, gunakan opsi ESCAPE selama COPY dan UNLOAD. Pertimbangkan contoh berikut:
CREATE TABLE region_nations ( r_regionkey smallint ,r_name varchar ,r_comment varchar ,r_nations super ); COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/text/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' DELIMITER ',' ESCAPE;
Menyalin data dari format kolom Parket dan ORC
Jika data semi-terstruktur atau bersarang Anda sudah tersedia dalam format Apache Parquet atau Apache ORC, Anda dapat menggunakan perintah COPY untuk menyerap data ke Amazon Redshift.
Struktur tabel Amazon Redshift harus sesuai dengan jumlah kolom dan tipe data kolom dari file Parket atau ORC. Dengan menentukan SERIALIZETOJSON dalam perintah COPY, Anda dapat memuat semua jenis kolom dalam file yang sejajar dengan kolom SUPER dalam tabel sebagai SUPER. Ini termasuk tipe struktur dan array.
Contoh berikut menggunakan format Parket:
COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/parquet/region_nation' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT PARQUET SERIALIZETOJSON;
Contoh berikut menggunakan format ORC.
COPY region_nations FROM 's3://redshift-downloads/semistructured/tpch-nested/data/orc/region_nation' IAM_ROLE 'arn:aws:iam::xxxxxxxxxxxx:role/Redshift-S3' FORMAT ORC SERIALIZETOJSON;
Saat atribut tipe data tanggal atau waktu ada di ORC, Amazon Redshift mengonversinya menjadi varchar setelah menyandikannya di SUPER.