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
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Fitur Apache Iceberg v3 di Amazon Redshift
Amazon Redshift mendukung tabel Apache Iceberg v3. Iceberg v3 memperkenalkan nilai kolom default, pelacakan garis keturunan baris, dan vektor penghapusan. Anda dapat membuat tabel v3 baru atau memutakhirkan tabel v2 yang ada ke v3.
Tabel Iceberg v3 menggunakan sintaks SQL yang sama untuk kueri dan operasi DML (INSERT, DELETE, UPDATE, MERGE) sebagai tabel v2. Fitur yang dijelaskan pada halaman ini khusus untuk Iceberg v3.
Membuat tabel Iceberg v3
Untuk membuat tabel Iceberg v3, tentukan 'format-version'='3' dalam klausa TABLE PROPERTIES:
CREATE TABLEexternal_schema.table_name( column_name data_type [DEFAULT literal_value] [, ...] ) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/' [PARTITIONED BY [[column_name | transform_function]], ...] TABLE PROPERTIES ('format-version'='3' [, 'compression_type'='compression_value']);
Contoh:
CREATE TABLE my_schema.orders ( id int, status varchar DEFAULT 'pending', priority int DEFAULT 0 ) USING ICEBERG LOCATION 's3://amzn-s3-demo-bucket/orders/' TABLE PROPERTIES ('format-version'='3');
Jika Anda tidak menentukan versi format, Amazon Redshift membuat tabel sebagai Iceberg v2.
Meningkatkan dari v2 ke v3
Anda dapat memutakhirkan tabel Iceberg v2 yang ada ke v3:
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Memutakhirkan versi format adalah operasi khusus metadata. File data yang ada tidak ditulis ulang. File penghapusan posisi v2 yang ada tetap valid dan diterapkan selama pembacaan. Operasi penulisan pertama setelah peningkatan menghasilkan nilai garis keturunan baris untuk seluruh tabel. Pada operasi DELETE, UPDATE, atau MERGE berikutnya, Amazon Redshift menggabungkan penghapusan posisi v2 ke dalam vektor penghapusan untuk file data yang terpengaruh oleh operasi.
penting
Sebelum memutakhirkan ke Iceberg v3, tin Batasan jau bagian ini, karena beberapa fitur belum didukung untuk tabel v3. Karena menurunkan versi dari v3 ke v2 tidak didukung, pastikan bahwa fitur yang tidak didukung tidak akan memengaruhi beban kerja Anda sebelum melanjutkan dengan peningkatan.
Batasan
-
Anda dapat menggunakan Iceberg v3 hanya di cluster Amazon Redshift Serverless (kecuali 4 RPU) dan pada cluster yang disediakan yang menggunakan tipe instans RG.
-
Anda tidak dapat membaca atau menulis tipe kompleks (struct, list, map, varian) di tabel Iceberg v3.
-
Anda tidak dapat menggunakan tipe data berikut dalam tabel Iceberg v3: struct, list, map, varian, geometri, geografi, biner, uuid, waktu, timestamp_ns, timestamptz_ns, dan unknown.
-
Anda tidak dapat menggunakan tabel Iceberg v3 yang berisi penghapusan kesetaraan.
-
Anda tidak dapat membuat tampilan terwujud pada tabel Iceberg v3.
-
Setelah memutakhirkan tabel ke v3, tipe Iceberg memetakan ke
timestamptztipe Amazon Redshift TIMESTAMPTZ alih-alih TIMESTAMP (digunakan di v2). Akibatnya, kueri Anda mengembalikan stempel waktu yang menyertakan informasi zona waktu.
Nilai kolom default
Nilai kolom default hanya didukung untuk tabel Iceberg v3. Amazon Redshift mengembalikan kesalahan jika Anda menentukan nilai default pada tabel Iceberg v2.
Nilai default menentukan nilai literal yang dikembalikan ke kolom ketika tidak ada nilai eksplisit yang ada. Dengan ini, Anda dapat menambahkan kolom baru ke tabel yang ada tanpa menulis ulang file data. Pembacaan file data yang ditulis sebelumnya secara otomatis mengembalikan nilai default untuk kolom baru. Default juga ditulis ketika pernyataan DML menghilangkan kolom atau menentukan DEFAULT sebagai nilainya.
Hanya nilai literal yang didukung sebagai default. Jenis data bersarang tidak mendukung nilai default.
CREATE TABLE AS SELECT tidak mewarisi nilai kolom default dari tabel sumber. Untuk menentukan default pada tabel baru, gunakan ALTER TABLE ALTER COLUMN SET DEFAULT setelah pembuatan.
Mendefinisikan default pada pembuatan tabel
CREATE TABLEexternal_schema.table_name( column_name data_type DEFAULT literal_value [, ...] ) USING ICEBERG LOCATION '...' TABLE PROPERTIES ('format-version'='3');
Menambahkan kolom dengan default
ALTER TABLEiceberg_tableADD COLUMN column_name data_type DEFAULT literal_value;
File data yang ada mengembalikan nilai default untuk kolom yang baru ditambahkan tanpa memerlukan penulisan ulang data.
Mengubah atau menghapus default
ALTER TABLEiceberg_tableALTER COLUMN column_name SET DEFAULT literal_value; ALTER TABLEiceberg_tableALTER COLUMN column_name DROP DEFAULT;
SET DEFAULT mengubah nilai default kolom yang ada. Default baru berlaku untuk file data yang ditulis setelah perubahan. File data yang ada terus menggunakan default sebelumnya.
DROP DEFAULT menghapus nilai default dari kolom. Setelah operasi ini, penulisan baru tidak lagi menerapkan default untuk kolom. File data yang tidak berisi kolom terus mengembalikan nilai default awal kolom.
Perilaku INSERT
Saat memasukkan baris tanpa menentukan kolom yang memiliki nilai default, nilai default ditulis ke file data.
TAMPILKAN TABEL
SHOW TABLE menampilkan nilai default dalam outputnya.
Garis garis keturunan
Garis keturunan baris hanya didukung untuk tabel Iceberg v3. Ini menyediakan dua kolom semu yang melacak identitas baris dan riwayat modifikasi. Kolom ini dikelola secara otomatis oleh Amazon Redshift. Anda tidak menetapkan nilai-nilai mereka.
Pseudo-columns
| Kolom | Jenis data | Deskripsi |
|---|---|---|
_row_id |
BIGINT | Secara unik mengidentifikasi setiap baris dalam tabel. Ditugaskan secara otomatis pada operasi penulisan. |
_last_updated_sequence_number |
BIGINT | Nomor urutan snapshot dari operasi penulisan terakhir yang mengubah baris. |
Menanyakan garis keturunan baris
Kolom garis keturunan baris harus dinamai secara eksplisit dalam daftar SELECT. Mereka tidak termasuk dalam SELECT *.
SELECT _row_id, _last_updated_sequence_number, * FROM my_schema.my_iceberg_v3_table;
Anda dapat menggunakan kolom garis keturunan baris dalam klausa WHERE, ORDER BY, GROUP BY, dan JOIN:
SELECT * FROM my_schema.my_iceberg_v3_table WHERE _last_updated_sequence_number >= 3 ORDER BY _row_id;
Perilaku pada tabel non-v3
Saat menanyakan tabel non-Iceberg v3, _row_id dan _last_updated_sequence_number mengembalikan NULL.
Perilaku setelah peningkatan v2-ke-v3
Untuk tabel yang ditingkatkan dari Iceberg v2 ke v3, nilai garis keturunan baris tidak segera tersedia untuk data pra-peningkatan. K _row_id edu _last_updated_sequence_number anya dan mengembalikan NULL hingga operasi penulisan pertama setelah peningkatan, yang menghasilkan nilai garis keturunan baris untuk seluruh tabel. Ini adalah operasi khusus metadata dan tidak menulis ulang file data yang ada.
Tulis perilaku
Garis garis keturunan secara otomatis diisi oleh Amazon Redshift pada semua operasi penulisan (INSERT, CTAS, UPDATE, MERGE). Setiap baris menerima yang unik_row_id, dan _last_updated_sequence_number mencerminkan nomor urutan snapshot dari komit yang menulis baris.
Batasan
-
Kolom garis keturunan baris tidak termasuk dalam SELECT *.
-
Garis keturunan baris tidak didukung untuk Iceberg v2 atau tabel sebelumnya.
-
Pre-upgrade data dalam tabel yang ditingkatkan v2-ke-v3 mengembalikan NULL untuk kedua kolom semu hingga operasi penulisan pertama setelah peningkatan.
Vektor penghapusan
Vektor penghapusan adalah mekanisme yang digunakan Iceberg v3 untuk melacak penghapusan tingkat baris. Mereka menggantikan file hapus posisi yang digunakan oleh Iceberg v2.
Saat Anda menjalankan DELETE, UPDATE, atau MERGE pada tabel Iceberg v3, Amazon Redshift mencatat posisi baris yang dihapus dalam vektor penghapusan daripada menulis file penghapusan posisi terpisah. Ini ditangani secara otomatis. Tidak ada perubahan pada sintaks SQL yang diperlukan.
Cara kerja vektor penghapusan
Vektor penghapusan adalah bitmap terkompresi yang mencatat posisi baris mana dalam file data yang telah dihapus. Vektor penghapusan disimpan dalam file Puffin di lokasi S3 yang sama dengan data tabel. Setiap file data memiliki paling banyak satu vektor penghapusan.
Saat membaca tabel Iceberg v3, Amazon Redshift secara otomatis menerapkan vektor penghapusan untuk mengecualikan baris yang dihapus dari hasil kueri.
Manfaat dibandingkan file hapus posisi
-
Vektor penghapusan lebih kompak daripada file hapus posisi.
-
Vektor penghapusan tunggal per file data menghindari akumulasi banyak file hapus kecil.
-
Penghapusan berikutnya pada file data yang sama menghasilkan vektor penghapusan baru yang menggabungkan penghapusan sebelumnya dengan posisi yang baru dihapus, mempertahankan vektor penghapusan tunggal per file data.
-
Karena vektor penghapusan lebih kompak dan menghindari akumulasi banyak file kecil, membaca dan menulis lebih cepat dibandingkan dengan file hapus posisi Iceberg v2.
Perilaku setelah peningkatan v2-ke-v3
Setelah memutakhirkan tabel dari Iceberg v2 ke v3, file penghapusan posisi v2 yang ada tetap valid dan diterapkan selama pembacaan. Pada operasi penulisan berikutnya (DELETE, UPDATE, atau MERGE), Amazon Redshift menggabungkan penghapusan posisi v2 yang ada ke dalam vektor penghapusan, seperti yang didefinisikan oleh spesifikasi Iceberg.
Batasan
-
Vektor penghapusan tidak didukung untuk Iceberg v2 atau tabel sebelumnya.
-
Tabel Iceberg v3 tidak dapat kembali ke file hapus posisi untuk operasi penulisan baru. Ini berarti tabel Iceberg v3 dapat membaca file penghapusan posisi yang ada, tetapi tidak ada file penghapusan posisi baru yang dapat ditambahkan. Sebaliknya, tabel Iceberg v3 hanya dapat menambahkan penghapusan baru menggunakan vektor penghapusan.