View a markdown version of this page

Mengubah definisi tabel - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung pembuatan UDF Python baru mulai Patch 198. UDF Python yang ada akan terus berfungsi hingga 30 Juni 2026. 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.

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, iceberg_table dapat berupa salah satu dari berikut ini:

-- 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 Merujuk tabel Iceberg di Amazon Redshift.

Pertimbangkan hal berikut saat menggunakan ALTER TABLE pernyataan:

  • ALTER TABLEpernyataan saat ini hanya mendukung tabel Iceberg v2.

  • Semua ALTER TABLE pernyataan adalah operasi metadata saja.

  • ALTER TABLEpernyataan tidak mendukung tabel dengan kolom tipe kompleks.

MENGUBAH NAMA TABEL KOLOM

ALTER TABLE iceberg_table RENAME [COLUMN] col_name TO new_name;

ALTER TABLE RENAME COLUMNmengganti nama kolom yang ada. col_nameDapat berupa kolom partisi atau kolom non-partisi. Setelah mengganti nama, tipe data kolom dan spesifikasi partisi tidak berubah.

catatan

ALTER TABLE RENAME COLUMNtidak didukung untuk tabel AWS Lake Formation terdaftar.

UBAH KOLOM TABEL ADD/DROP

ALTER TABLE iceberg_table ADD [COLUMN] col_name col_type;
ALTER TABLE iceberg_table DROP [COLUMN] col_name;

ADD COLUMNmenambahkan satu kolom ke tabel Iceberg yang ada. Anda dapat menggunakan tipe data apa pun yang didukung oleh Amazon Redshift Iceberg menulis. Untuk informasi selengkapnya, lihat Tipe data yang didukung dengan tabel Apache Iceberg.

ADD COLUMNadalah operasi metadata saja. 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 menjatuhkan 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 ALTER TABLE ADD, DROP, dan REPLACE PARTITION FIELD.

MENGUBAH TABEL MENGUBAH KOLOM

ALTER TABLE iceberg_table ALTER COLUMN column_name TYPE updated_data_type;

ALTER TABLE ALTER COLUMNmengubah tipe data dari kolom yang ada. Hanya pelebaran tipe yang diperbolehkan, bukan penyempitan. Karena data tidak ditulis ulang setelahALTER, penyempitan tipe data dapat menyebabkan overflow saat mengkonsumsi data tabel yang ada. Pelebaran jenis 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 4-byte int dalam tipe Iceberg, pelebaran tipe ke bilangan bulat 8-byte diperbolehkan.

Misalnya, tabel Iceberg dibuat menggunakan tipe integer 4-byte:

CREATE TABLE iceberg_table (cint int) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/';

Hal ini dapat diperlebar dengan pernyataan iniALTER:

ALTER TABLE iceberg_table ALTER COLUMN cint TYPE int8;

Untuk daftar lengkap pemetaan tipe data antara jenis Amazon Redshift dan tipe Iceberg, lihat. Tipe data yang didukung dengan tabel Apache Iceberg

Memperluas jenis kolom yang termasuk dalam spesifikasi partisi yang ada tidak didukung.

MENGUBAH PROPERTI TABEL SET TABEL

ALTER TABLE iceberg_table SET TABLE PROPERTIES ( 'compression_type' = 'compression_value');

Pernyataan ini memungkinkan Anda untuk menimpa properti tabel default. Saat ini satu-satunya properti tabel yang diizinkan untuk pernyataan ini adalahcompression_type. Anda dapat menimpa untuk menggunakan jenis kompresi yang berbeda untuk file Parket tabel Iceberg. Data dimasukkan setelah ALTER menggunakan jenis kompresi baru.

Nilai yang mungkin untuk compression_type adalah:brotli,gzip,snappy,uncompressed, danzstd.

ALTER TABLE ADD, DROP, dan REPLACE PARTITION FIELD

ALTER TABLE iceberg_table ADD PARTITION FIELD column_name | transform_function;
ALTER TABLE iceberg_table DROP PARTITION FIELD column_name | transform_function;
ALTER TABLE iceberg_table REPLACE PARTITION FIELD column_name | transform_function WITH column_name | transform_function;

[ADD | DROP | REPLACE] PARTITION FIELDPernyataan tersebut memungkinkan Anda mengubah spesifikasi partisi tabel yang ada, mendukung evolusi partisi melalui Amazon Redshift.

ALTERPernyataan untuk spesifikasi partisi hanya mengubah metadata tabel dan tidak mempartisi ulang data tabel yang ada. SetelahALTER, data baru dimasukkan ke dalam tabel mengikuti spesifikasi partisi yang baru ditentukan.

Pertimbangkan batasan berikut untuk pernyataan ini:

  • Saat mendefinisikan bidang partisi baru melalui ADD atauREPLACE ... 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 TABLE iceberg_table ... PARTITIONED BY year(ship_date) USING ICEBERG ...;

    Berikut ini gagal karena ship_date sudah menjadi bagian dari bidang partisi yang ada:

    ALTER TABLE iceberg_table ADD PARTITION FIELD bucket(128, ship_date);
  • Saat menambahkan bidang partisi baru, bidang yang baru ditambahkan selalu diperlakukan sebagai tingkat partisi terakhir dari tabel. Contoh:

    CREATE TABLE iceberg_table ... PARTITIONED BY year(ship_date) USING ICEBERG ...; ALTER TABLE iceberg_table ADD PARTITION FIELD bucket(256, item_id);

    Spesifikasi partisi tabel sama dengan:

    CREATE TABLE iceberg_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 menjatuhkan bidang partisi yang ada. Contoh:

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLE iceberg_table DROP PARTITION FIELD year(ship_date);

    Setelah iniALTER, tabel hanya dipartisi oleh. bucket(256, item_id)

  • Saat memanggilREPLACE PARTITION FIELD ... WITH ..., bidang partisi yang akan diganti dapat berupa bidang apa pun dalam spesifikasi dan tidak terbatas pada bidang terakhir. Contoh:

    CREATE TABLE iceberg_table ... PARTITIONED BY (year(ship_date), bucket(256, item_id)) USING ICEBERG ...; ALTER TABLE iceberg_table REPLACE PARTITION FIELD year(ship_date) WITH month(ship_date);

    Setelah iniALTER, partisi tabel menjadi(month(ship_date), bucket(256, item_id)).

  • voidTransformasi tidak didukung dalam ALTER pernyataan partisi.