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.
Mengubah definisi tabel
ALTER TABLEpernyataan digunakan untuk mengubah definisi tabel, termasuk skema, spesifikasi partisi, dan properti. Anda dapat menggunakan pernyataan DDL ini untuk mengelola tabel Iceberg Anda secara langsung melalui Amazon Redshift.
Semua ALTER TABLE pernyataan mendukung penggunaan referensi skema eksternal atau referensi notasi tiga bagian untuk tabel Iceberg. Dalam contoh sintaks di bawah ini, dapat berupa salah satu dari berikut ini:iceberg_table
-- External schema notation:<external_schema>.<table_name>-- Three-part notation for S3 table buckets: "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name>-- Three-part notation for the awsdatacatalog root catalog: awsdatacatalog.<database_name>.<table_name>
Untuk informasi selengkapnya, lihat Mereferensikan tabel Iceberg di Amazon Redshift.
Pertimbangkan hal berikut saat menggunakan ALTER TABLE pernyataan:
-
ALTER TABLEpernyataan saat ini hanya mendukung tabel Iceberg v2 atau v3. -
Semua
ALTER TABLEpernyataan adalah operasi khusus metadata. -
ALTER TABLEpernyataan tidak mendukung tabel dengan kolom tipe kompleks.
Daftar Isi
Meningkatkan ke Iceberg v3
Anda dapat memutakhirkan tabel Iceberg v2 ke v3 menggunakan: ALTER TABLE SET
TABLE PROPERTIES
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Untuk detail tambahan, lihat Meningkatkan dari v2 ke v3.
UBAH TABEL GANTI NAMA KOLOM
ALTER TABLEiceberg_tableRENAME [COLUMN]col_nameTOnew_name;
ALTER TABLE RENAME COLUMNmengganti nama kolom yang ada. Ini bisa berupa kolom partisi atau kolom yang tidak dipartisi. Setelah mengganti nama, tipe data kolom dan spesifikasi partisi tidak berubah.col_name
catatan
ALTER TABLE RENAME COLUMNtidak didukung untuk tabel AWS Lake Formation terdaftar.
UBAH ADD/DROP KOLOM TABEL
ALTER TABLEiceberg_tableADD [COLUMN]col_namecol_type;
ALTER TABLEiceberg_tableDROP [COLUMN]col_name;
ADD COLUMNmenambahkan satu kolom ke tabel Iceberg yang ada. Anda dapat menggunakan jenis data apa pun yang didukung oleh Amazon Redshift Iceberg write. Untuk informasi selengkapnya, lihat Jenis data yang didukung dengan tabel Apache Iceberg.
ADD COLUMNadalah operasi khusus metadata. Nilai kolom yang baru ditambahkan pada baris yang ada adalahNULL.
DROP COLUMNmenjatuhkan kolom dari tabel Iceberg yang ada. Untuk tabel yang dipartisi, Anda tidak dapat melepaskan kolom yang termasuk dalam spesifikasi partisi saat ini. Anda harus menghapus bidang partisi yang melibatkan kolom terlebih dahulu sebelum menjatuhkan kolom. Untuk informasi selengkapnya, lihat UBAH TABEL TAMBAH, JATUHKAN, dan GANTI BIDANG PARTISI.
Untuk tabel Iceberg v3, Anda dapat menentukan nilai default saat menambahkan kolom. File data yang ada mengembalikan default yang ditentukan alih-alih NULL untuk kolom yang baru ditambahkan tanpa memerlukan penulisan ulang data. Nilai kolom default hanya didukung untuk tabel Iceberg v3. Amazon Redshift mengembalikan kesalahan jika Anda menentukan nilai default pada tabel Iceberg v2.
-- External schema notation ALTER TABLE my_external_schema.orders ADD COLUMN priority INT DEFAULT 0; -- Three-part notation (awsdatacatalog / Glue) ALTER TABLE awsdatacatalog.my_glue_db.orders ADD COLUMN priority INT DEFAULT 0; -- Three-part notation (S3 Table Buckets) ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ADD COLUMN priority INT DEFAULT 0;
Untuk baris yang ada, nilai default diisi untuk kolom yang baru ditambahkan:
-- Existing table with rows SELECT id FROM my_external_schema.orders; -- 1 -- 2 -- Add a column with a default ALTER TABLE my_external_schema.orders ADD COLUMN status varchar DEFAULT 'active'; -- Existing rows return the default without a data rewrite SELECT id, status FROM my_external_schema.orders; -- 1 | active -- 2 | active
MENGUBAH TABEL MENGUBAH KOLOM
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameTYPEupdated_data_type;
ALTER TABLE ALTER COLUMNmengubah tipe data kolom yang ada. Hanya pelebaran tipe yang diperbolehkan, bukan penyempitan. Karena data tidak ditulis ulang setelahALTER, penyempitan tipe data dapat menyebabkan luapan saat mengonsumsi data tabel yang ada. Jenis pelebaran berikut diperbolehkan sesuai spesifikasi gunung es:
int → bigint float → double decimal(P, S) → decimal(P2, S) where P2 > P (scale cannot be changed)
Di Amazon Redshift, tipe data dapat memiliki alias. Misalnya, bilangan bulat 4-byte menggunakan nama int tipe atau. int4 Selama mereka dipetakan ke int 4-byte dalam tipe Iceberg, pelebaran tipe ke bilangan bulat 8-byte diperbolehkan.
Misalnya, tabel Iceberg dibuat menggunakan tipe integer 4-byte:
CREATE TABLEiceberg_table(cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';
Hal ini dapat diperluas dengan ALTER pernyataan ini:
ALTER TABLEiceberg_tableALTER COLUMN cint TYPE int8;
Untuk daftar lengkap pemetaan tipe data antara tipe Amazon Redshift dan tipe Iceberg, lihat. Jenis data yang didukung dengan tabel Apache Iceberg
Memperluas jenis kolom yang termasuk dalam spesifikasi partisi yang ada tidak didukung.
Untuk tabel Iceberg v3, Anda dapat mengatur atau menghapus nilai default pada kolom yang ada:
ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameSET DEFAULTliteral_value; ALTER TABLEiceberg_tableALTER COLUMNcolumn_nameDROP 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 yang diterapkan pada penulisan baru, setara dengan menyetel default ke NULL. File data yang tidak berisi kolom terus mengembalikan nilai default awal kolom.
-- External schema notation ALTER TABLE my_external_schema.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE my_external_schema.orders ALTER COLUMN status DROP DEFAULT; -- Three-part notation (awsdatacatalog / Glue) ALTER TABLE awsdatacatalog.my_glue_db.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE awsdatacatalog.my_glue_db.orders ALTER COLUMN status DROP DEFAULT; -- Three-part notation (S3 Table Buckets) ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ALTER COLUMN status SET DEFAULT 'active'; ALTER TABLE "amzn-s3-demo-bucket@s3tablescatalog".my_namespace.orders ALTER COLUMN status DROP DEFAULT;
UBAH PROPERTI TABEL SET TABEL
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ( 'compression_type' = 'compression_value');
Pernyataan ini memungkinkan Anda untuk mengganti properti tabel default. Saat ini satu-satunya properti tabel yang diizinkan untuk pernyataan ini adalahcompression_type. Anda dapat menulisnya untuk menggunakan jenis kompresi yang berbeda untuk tabel Iceberg file Parquet. Data dimasukkan setelah ALTER menggunakan tipe kompresi baru.
Nilai yang mungkin untuk compression_type adalah:brotli,gzip,snappy,uncompressed, danzstd.
Anda juga dapat memutakhirkan tabel Iceberg v2 yang ada ke v3 dengan mengatur versi format:
ALTER TABLEiceberg_tableSET TABLE PROPERTIES ('format-version' = '3');
Untuk detail tambahan, lihat Meningkatkan dari v2 ke v3.
UBAH TABEL TAMBAH, JATUHKAN, dan GANTI BIDANG PARTISI
ALTER TABLEiceberg_tableADD PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableDROP PARTITION FIELDcolumn_name|transform_function;
ALTER TABLEiceberg_tableREPLACE PARTITION FIELDcolumn_name|transform_functionWITHcolumn_name|transform_function;
Per [ADD | DROP | REPLACE] PARTITION FIELD nyataan ini memungkinkan Anda untuk mengubah spesifikasi partisi tabel yang ada, mendukung evolusi partisi melalui Amazon Redshift.
Per ALTER nyataan untuk spesifikasi partisi hanya mengubah metadata tabel dan tidak mempartisi ulang data tabel yang ada. Setelah ituALTER, data baru dimasukkan ke dalam tabel mengikuti spesifikasi partisi yang baru ditentukan.
Pertimbangkan batasan berikut untuk pernyataan ini:
-
Saat menentukan bidang partisi baru melalui
ADDatauREPLACE ... WITH ..., bidang baru tidak dapat menyertakan kolom yang sudah menjadi bagian dari bidang partisi lainnya. Ini adalah batasan yang sama seperti ketika Anda menentukan spesifikasi partisi awal diCREATE TABLE. Untuk informasi selengkapnya, lihat CREATE TABLE.Misalnya, ketika Anda memiliki tabel:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...;Berikut ini gagal karena
ship_datesudah menjadi bagian dari bidang partisi yang ada:ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(128, ship_date); -
Saat menambahkan bidang partisi baru, bidang yang baru ditambahkan selalu diperlakukan sebagai tingkat terakhir partisi tabel. Contoh:
CREATE TABLEiceberg_table... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLEiceberg_tableADD PARTITION FIELD bucket(256, item_id);Spesifikasi partisi tabel sama dengan:
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; -
Saat menjatuhkan bidang partisi, itu tidak terbatas pada tingkat partisi terakhir. Anda dapat menghapus bidang partisi yang ada. Contoh:
CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableDROP PARTITION FIELD year(ship_date);Setelah ini
ALTER, tabel hanya dipartisi olehbucket(256, item_id). -
Saat memanggil
REPLACE PARTITION FIELD ... WITH ..., bidang partisi yang akan diganti dapat berupa bidang apa pun dalam spesifikasi dan tidak terbatas pada bidang terakhir. Contoh:CREATE TABLEiceberg_table... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLEiceberg_tableREPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);Setelah ini
ALTER, partisi tabel menjadi(month(ship_date), bucket(256, item_id)). -
voidTransformasi tidak didukung dalamALTERpernyataan partisi.