

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Menulis ke tabel Apache Iceberg
<a name="iceberg-writes"></a>

Dengan Amazon Redshift, Anda dapat membuat dan menulis ke tabel Apache Iceberg yang disimpan di bucket tabel Amazon S3 dan Amazon S3. Menulis data Iceberg langsung dari Amazon Redshift merampingkan manajemen data Anda dengan menghilangkan alat tambahan. Tabel gunung es harus terdaftar. AWS Glue Data Catalog

Anda dapat menggunakan arsitektur lakehouse dengan tabel Apache Iceberg sambil secara bersamaan memanfaatkan analitik SQL Amazon Redshift yang kuat di gudang dan danau. Anda juga mendapatkan akses langsung ke fitur Amazon Redshift tingkat lanjut seperti tampilan terwujud pada tabel Iceberg Anda, secara signifikan meningkatkan kemampuan analitis Anda tanpa menambah kerumitan.

Penulisan Iceberg didukung pada cluster yang disediakan Amazon Redshift dan instans Tanpa Server Amazon Redshift.

**Topics**
+ [Perintah SQL](iceberg-writes-sql-syntax.md)
+ [Semantik transaksi](iceberg-writes-transaction-semantics.md)
+ [Praktik terbaik](iceberg-writes-best-practices.md)

# Perintah SQL
<a name="iceberg-writes-sql-syntax"></a>

Tabel Apache Iceberg di Amazon Redshift menyediakan cara ampuh untuk mengelola kumpulan data analitik besar di danau data Anda. Tabel ini mendukung transaksi ACID, evolusi skema, dan kemampuan perjalanan waktu sambil mempertahankan kinerja tinggi untuk beban kerja analitik. Menggunakan tabel Apache Iceberg, Anda dapat secara efisien mengatur dan mempartisi data Anda, mengontrol format file dan kompresi, dan terintegrasi dengan mulus dengan layanan lain. AWS 

Anda dapat membuat tabel Iceberg yang dipartisi dan tidak dipartisi menggunakan dan perintah. `CREATE TABLE ... USING ICEBERG` `CREATE TABLE ... USING ICEBERG AS SELECT` Anda dapat mereferensikan tabel Iceberg menggunakan notasi skema eksternal (`external_schema.table_name`) atau notasi tiga bagian (). `"catalog_name".database_name.table_name` Contoh di bagian ini menunjukkan kedua metode.

Setelah Anda membuat tabel, Anda dapat menambahkan data menggunakan `INSERT` perintah standar. Ingatlah bahwa meskipun Amazon Redshift bekerja dengan banyak tipe data Iceberg, Anda mungkin perlu mengonversi beberapa format data saat memasukkan informasi. 

Anda dapat melihat tabel Iceberg menggunakan `SHOW TABLES` perintah. Jika Anda ingin menghapus tabel dari AWS Glue Data Catalog, Anda dapat menggunakan `DROP TABLE` perintah. Perhatikan bahwa ini hanya menghapus pendaftaran tabel. Data aktual akan tetap disimpan sampai Anda menghapusnya secara terpisah.

Semua pernyataan SQL lainnya, seperti`DELETE`,,`UPDATE`, dan `MERGE``ALTER TABLE`, belum didukung pada tabel Iceberg.

Bagian berikut menunjukkan sintaks SQL untuk membuat, menyisipkan, dan mengelola tabel Iceberg di Amazon Redshift.

**Contents**
+ [CREATE TABLE](#iceberg-writes-create-table)
+ [BUAT TABEL SEBAGAI PILIH](#iceberg-writes-create-table-as-select)
+ [TAMPILKAN TABEL](#iceberg-writes-show-table)
+ [MASUKKAN KE DALAM](#iceberg-writes-insert-into)
+ [MEJA DROP](#iceberg-writes-drop-table)

## CREATE TABLE
<a name="iceberg-writes-create-table"></a>

```
CREATE TABLE [IF NOT EXISTS] <external_schema>.<table_name> (
  column_name data_type [, ...]
)
USING ICEBERG
[LOCATION 's3://your-bucket-name/prefix/']
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression_value>')]
```

Anda juga dapat menggunakan notasi tiga bagian untuk bucket tabel S3:

```
CREATE TABLE "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name> (
  column_name data_type [, ...]
)
USING ICEBERG
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression_value>')]
```

Perhatikan bahwa `<external_schema>` harus ada nama skema eksternal di mana tabel eksternal akan dibuat. Untuk informasi selengkapnya tentang cara membuat dan mengelola skema eksternal, lihat [MEMBUAT SKEMA EKSTERNAL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) di dokumentasi Amazon Redshift.

`LOCATION`Klausa mendefinisikan lokasi tabel untuk tabel Iceberg yang baru dibuat ini. Untuk tabel Amazon S3, `LOCATION` tidak dapat ditentukan karena lokasi tabel ditentukan oleh katalog tabel Amazon S3 (). `s3tablescatalog` 

Dalam semua kasus lain, `LOCATION` diperlukan, dan itu harus menjadi lokasi kosong, artinya tidak ada objek Amazon S3 yang berbagi ember dan awalan yang sama ini. Perhatikan bahwa wilayah bucket Amazon S3 harus berada di wilayah yang sama dengan cluster Amazon Redshift. 

Namun, AWS menyediakan metode untuk mereplikasi data dari tabel Iceberg yang disimpan AWS Glue Data Catalog dalam satu Wilayah AWS ke yang berbeda Wilayah AWS, yang memungkinkan Anda untuk mereplikasi penulisan ke wilayah yang berbeda. Untuk informasi selengkapnya, lihat [Mereplikasi data di seluruh Wilayah AWS](https://docs.aws.amazon.com/prescriptive-guidance/latest/apache-iceberg-on-aws/best-practices-workloads.html#workloads-replication).

`PARTITIONED BY`mendefinisikan partisi tabel Iceberg. Amazon Redshift mendukung semua transformasi partisi Iceberg v2 kecuali untuk. `void` Berikut adalah daftar transformasi yang didukung:
+ **identitas**
+ **ember [N]**
+ **memotong [W]**
+ **tahun**
+ **bulan**
+ **hari**
+ **jam**

Untuk definisi lengkap dari transformasi ini dan tipe data yang kompatibel, lihat Transformasi [Partisi dalam dokumentasi](https://iceberg.apache.org/spec/#partition-transforms) Apache Iceberg.

`PARTITIONED BY`Mendukung partisi multi-level. Misalnya, Anda dapat menjalankan perintah berikut:

```
CREATE TABLE ...
USING ICEBERG
LOCATION ...
PARTITIONED BY (bucket(16, id), year(ship_date));
```

Namun, Amazon Redshift tidak mendukung penggunaan satu kolom di lebih dari satu transformasi. Misalnya, sintaks berikut tidak didukung:

```
CREATE TABLE ...
USING ICEBERG
LOCATION ...
PARTITIONED BY (bucket(16, ship_date), year(ship_date));
```

`TABLE PROPERTIES`Klausa mendefinisikan properti tabel tambahan untuk tabel Iceberg ini. Satu-satunya properti tabel yang kami dukung adalah `compression_type` yang mendefinisikan kompresi file data Parket default. Jika ini tidak ditentukan, `snappy` digunakan sebagai codec kompresi. Nilai yang mungkin untuk `compression_type` adalah:`zstd`,`brotli`,`gzip`,`snappy`, dan`uncompressed`.

**catatan**  
`CREATE TABLE ... LIKE ...`tidak didukung untuk tabel Iceberg. Tabel gunung es juga tidak mendukung batasan kolom dan atribut kolom seperti tabel RMS.

Atau, Anda dapat membuat dan mengisi tabel Iceberg dalam satu operasi menggunakan: `CREATE TABLE AS SELECT`

## BUAT TABEL SEBAGAI PILIH
<a name="iceberg-writes-create-table-as-select"></a>

```
CREATE TABLE <external_schema>.<table_name> [(
  column_name[, ...]
)]
USING ICEBERG
[LOCATION 's3://your-bucket-name/prefix/']
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression-value>')]
AS
SELECT query
```

Anda juga dapat menggunakan notasi tiga bagian untuk membuat tabel dalam katalog yang dipasang secara otomatis:

```
CREATE TABLE "<catalog_name>".<database_name>.<table_name> [(
  column_name[, ...]
)]
USING ICEBERG
[LOCATION 's3://your-bucket-name/prefix/']
[PARTITIONED BY [[column_name | transform_function]], ...]
[TABLE PROPERTIES ('compression_type'='<compression-value>')]
AS
SELECT query
```

Ini mirip dengan `CREATE TABLE` pernyataan kecuali yang diikuti `CREATE` oleh `SELECT` pernyataan untuk mengisi tabel dengan hasil `SELECT` kueri.

`CREATE TABLE`Klausa di sini tidak lagi memungkinkan Anda untuk menentukan tipe data karena tipe data kolom akan ditentukan oleh `SELECT` kueri.

Jika `SELECT` kueri gagal karena alasan apa pun, kueri ini akan gagal dan tabel Iceberg tidak akan dibuat.

Anda dapat melihat struktur tabel Iceberg Anda menggunakan: `SHOW TABLE`

## TAMPILKAN TABEL
<a name="iceberg-writes-show-table"></a>

```
SHOW TABLE <external_schema>.<table_name>
```

Anda juga dapat menggunakan notasi tiga bagian dengan katalog yang dipasang secara otomatis:

```
SHOW TABLE "<catalog_name>".<database_name>.<table_name>
```

`SHOW TABLE`menampilkan `CREATE TABLE` pernyataan untuk tabel Iceberg. Perintah akan menunjukkan hasil yang sesuai berdasarkan jenis tabel. Berikut ini adalah contoh `SHOW TABLE` output untuk tabel Iceberg:

```
CREATE TABLE my_schema.items (id int, price decimal(5, 2))
USING ICEBERG
LOCATION 's3://my_s3_bucket/items/'
PARTITIONED BY (bucket(16, id))
TABLE PROPERTIES ('compression_type'='snappy')
```

**catatan**  
Untuk tabel Amazon S3, karena lokasi tabel dikelola oleh katalog tabel Amazon S3, klausa akan dihilangkan `LOCATION` dalam hasil. `SHOW TABLE`

Setelah membuat tabel, Anda dapat menambahkan data menggunakan`INSERT INTO`:

## MASUKKAN KE DALAM
<a name="iceberg-writes-insert-into"></a>

```
INSERT INTO <external_schema>.<table_name> [(column_name [, ...])] VALUES (...)
INSERT INTO <external_schema>.<table_name> [(column_name [, ...])] (SELECT query)

-- Using three-part notation for S3 table buckets:
INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name> [(column_name [, ...])] VALUES (...)
INSERT INTO "<table_bucket_name>@s3tablescatalog".<database_name>.<table_name> [(column_name [, ...])] (SELECT query)
```

Anda dapat `INSERT INTO` ada tabel Iceberg menggunakan sintaks di atas. Jika `VALUES` klausa digunakan, Anda memberikan nilai untuk kolom yang terdaftar oleh`column_name`, atau semua kolom jika `column_name` bagian dihilangkan.

Ketika data dimasukkan ke dalam tabel dipartisi, baris baru didistribusikan sesuai dengan spesifikasi partisi yang telah ditentukan. Jika karena alasan apapun `SELECT` query gagal, query akan gagal dan tidak ada data akan dimasukkan ke dalam tabel Iceberg.

Anda dapat melihat tabel Iceberg `INSERT INTO` yang tidak dibuat oleh Amazon Redshift. Namun, ada beberapa batasan:
+ Tabel harus berupa tabel Iceberg v2.
+ Tabel harus menggunakan Parket sebagai format data default.
+ Tabel tidak boleh memiliki kompresi metadata yang disetel ke True.
+ Tabel tidak boleh mengaktifkan Write-Audit-Publish (WAP).

Untuk menghapus tabel Iceberg dari katalog, gunakan perintah: `DROP TABLE`

## MEJA DROP
<a name="iceberg-writes-drop-table"></a>

```
DROP TABLE <external_schema>.<table_name>
```

Anda juga dapat menggunakan notasi tiga bagian dengan katalog yang dipasang secara otomatis:

```
DROP TABLE "<catalog_name>.<database_name>.<table_name>
```

Menjatuhkan tabel Iceberg adalah operasi metadata saja. Ini menghapus entri tabel dari AWS Glue Data Catalog dan katalog tabel Amazon S3, jika ini adalah tabel Amazon S3. Amazon Redshift tidak membersihkan atau menghapus file data atau file metadata yang ada di bawah lokasi tabel. Anda dapat menggunakan fitur dalam AWS Glue dan tabel Amazon S3 untuk menghapus file yatim piatu. Untuk AWS Glue, lihat [Menghapus file yatim piatu](https://docs.aws.amazon.com/glue/latest/dg/orphan-file-deletion.html). Untuk tabel Amazon S3, lihat Pemeliharaan [tabel](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).

# Semantik transaksi
<a name="iceberg-writes-transaction-semantics"></a>

Kueri tulis Redshift Iceberg mendukung ACID dan isolasi snapshot. Transaksi tulis telah menjamin atomisitas dan tidak menghasilkan pembaruan sebagian ketika kueri gagal secara tak terduga. 

Beberapa transaksi Iceberg dapat berjalan secara bersamaan, dan jika dua transaksi mencoba memodifikasi tabel atau partisi yang sama secara bersamaan, komit transaksi gagal. Ini memastikan integritas data. Ketika ini terjadi, Anda harus menyelesaikan konflik secara manual dan menjalankan kembali kueri yang gagal. Amazon Redshift tidak secara otomatis mencoba lagi dan menyelesaikan konflik.

Satu kueri tulis Iceberg selalu diperlakukan sebagai transaksi komit otomatis tunggal. Ketika kueri tulis Iceberg, seperti kueri CREATE atau INSERT, disertakan dalam blok transaksi eksplisit, tidak ada kueri lain yang dapat berjalan dalam blok transaksi yang sama. Transaksi akan gagal.

Berikut adalah beberapa contoh. Contoh pertama menunjukkan bahwa query pernyataan tunggal selalu auto-commit setelah query selesai. Dalam skenario ini, Anda membuat tabel pesanan penjualan baru:

```
CREATE TABLE sales_schema.orders (
    order_id int, 
    customer_id int, 
    order_date date, 
    total_amount decimal(10,2)
) USING ICEBERG LOCATION 's3://my-data-lake/sales/orders/';
```

Contoh ini adalah blok transaksi eksplisit untuk memasukkan pesanan pelanggan menggunakan notasi tiga bagian untuk bucket tabel S3. Transaksi tidak melakukan komit otomatis setelah kueri INSERT, melainkan melakukan dan menyisipkan data pesanan dengan perintah COMMIT:

```
BEGIN;
INSERT INTO "analytics_bucket@s3tablescatalog".sales_db.orders VALUES (12345, 9876, '2024-10-30', 299.99);
COMMIT;
```

Contoh ini adalah skenario rollback blok transaksi eksplisit di mana Anda menguji penyisipan pesanan tetapi memutuskan untuk membatalkannya. Transaksi tidak melakukan komit otomatis setelah kueri INSERT, melainkan memutar kembali dengan perintah ROLLBACK tanpa memasukkan urutan pengujian.

```
BEGIN;
INSERT INTO sales_schema.orders VALUES (12346, 5432, '2024-10-30', 150.75);
ROLLBACK;
```

Contoh terakhir ini menunjukkan bagaimana, ketika Anda mencoba menjalankan pernyataan lain dalam blok transaksi yang sama dengan query INSERT, transaksi gagal tanpa memasukkan data pesanan. Dalam skenario ini, Anda mencoba menyisipkan pesanan dan segera menanyakan tabel: 

```
BEGIN;
INSERT INTO sales_schema.orders VALUES (12347, 7890, '2024-10-30', 425.50);
SELECT * FROM sales_schema.orders WHERE order_id = 12347;
```

Satu-satunya pengecualian untuk ini adalah `DROP TABLE` pernyataan, yang selalu berperilaku sebagai pernyataan komit otomatis dan tidak dapat berjalan dalam blok transaksi eksplisit. Ini untuk mempertahankan perilaku yang sama seperti `DROP TABLE` pada tabel eksternal. Untuk informasi lebih lanjut, lihat [DROP TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_TABLE.html).

**catatan**  
Iceberg write SQLs tidak dapat dieksekusi dari dalam prosedur tersimpan. 

# Praktik terbaik
<a name="iceberg-writes-best-practices"></a>

Pertimbangkan praktik terbaik berikut saat Anda menulis ke tabel Apache Iceberg:
+ Untuk beban kerja menulis atau streaming yang kecil dan sering, pertimbangkan untuk menggunakan fitur pemadatan yang disediakan oleh AWS Glue Data Catalog atau tabel Amazon S3 untuk mengoptimalkan ukuran file untuk dibaca.
+ `DROP TABLE`Perintah membatalkan pendaftaran tabel dari AWS Glue Data Catalog atau katalog tabel Amazon S3, tetapi file Anda masih tetap ada. Anda dapat menggunakan fitur dalam AWS Glue dan tabel Amazon S3 untuk menghapus file yatim piatu. Untuk AWS Glue, lihat [Menghapus file yatim piatu](https://docs.aws.amazon.com/glue/latest/dg/orphan-file-deletion.html). Untuk tabel Amazon S3, lihat Pemeliharaan [tabel](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-maintenance.html).