

 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 ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/) yang diterbitkan pada 30 Juni 2025. 

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

# Mereferensikan tabel Iceberg di Amazon Redshift
<a name="referencing-iceberg-tables"></a>

Amazon Redshift menyediakan beberapa cara untuk mereferensikan tabel Apache Iceberg yang disimpan di danau data Anda. Anda dapat menggunakan skema eksternal untuk membuat referensi ke database Katalog Data yang berisi tabel Iceberg, atau menggunakan notasi tiga bagian untuk akses langsung ke katalog yang dipasang secara otomatis.

## Menggunakan skema eksternal untuk mereferensikan tabel Iceberg
<a name="referencing-iceberg-external-schemas"></a>

Skema eksternal menyediakan cara untuk mereferensikan tabel di Katalog Data Anda dari dalam Amazon Redshift. Saat membuat skema eksternal, Anda membuat koneksi antara database Amazon Redshift dan database Katalog Data tertentu yang berisi tabel Iceberg Anda.

Untuk membuat skema eksternal untuk tabel Iceberg:

```
CREATE EXTERNAL SCHEMA {{schema_name}}
FROM DATA CATALOG
DATABASE '{{glue_database_name}}'
IAM_ROLE '{{arn:aws:iam::account-id:role/role-name}}';
```

Setelah membuat skema eksternal, Anda dapat menanyakan tabel Iceberg menggunakan notasi dua bagian:

```
SELECT * FROM {{schema_name}}.{{iceberg_table_name}};
```

Anda juga dapat bergabung dengan tabel Iceberg dengan tabel Amazon Redshift lokal:

```
SELECT r.customer_id, i.order_date, r.customer_name
FROM local_customers r
JOIN {{schema_name}}.{{iceberg_orders}} i 
ON r.customer_id = i.customer_id;
```

## Menggunakan notasi tiga bagian dengan katalog yang dipasang secara otomatis
<a name="referencing-iceberg-three-part-notation"></a>

Dengan notasi tiga bagian, Anda dapat langsung mereferensikan tabel dalam katalog yang dipasang secara otomatis tanpa membuat skema eksternal. Metode ini sangat berguna saat bekerja dengan bucket tabel Amazon S3 yang digabungkan dengan AWS Lake Formation. Untuk informasi tentang menyiapkan pemasangan otomatis Katalog Data, lihat Meny [ ederhanakan akses objek eksternal di Amazon Redshift menggunakan pemasangan otomatis. AWS Glue Data Catalog](https://aws.amazon.com/blogs/big-data/simplify-external-object-access-in-amazon-redshift-using-automatic-mounting-of-the-aws-glue-data-catalog/)

Sintaks untuk notasi tiga bagian adalah:

```
{{"catalog_name"}}.{{database_name}}.{{table_name}}
```

Misalnya, untuk menanyakan tabel Iceberg di katalog tabel Amazon S3 yang dipasang secara otomatis:

```
SELECT * FROM "{{my_table_bucket}}@s3tablescatalog".{{my_database}}.{{my_iceberg_table}};
```

Untuk informasi selengkapnya tentang mengintegrasikan bucket tabel Amazon S3 dengan Amazon Redshift, lihat [ Mengintegrasikan Tabel S3 dengan Amazon Redshift ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-redshift.html) di Panduan * Pengguna Amazon S3. *

Anda juga dapat mereferensikan tabel di bawah katalog root yang dipasang secara otomatis`awsdatacatalog`, yang menyediakan akses langsung ke database dan tabel yang terdaftar di: AWS Glue Data Catalog

```
SELECT * FROM awsdatacatalog.{{my_database}}.{{my_iceberg_table}};
```

Untuk informasi selengkapnya tentang menggunakan katalog `awsdatacatalog` root, lihat Meng [ kueri AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-glue.html) di Panduan Manajemen * Amazon Redshift * dan Mengelola ruang [ nama Katalog Data ](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-namespaces-datacatalog.html) di Panduan Pengembang. *AWS Lake Formation *

Anda juga dapat menggunakan `USE` pernyataan untuk menyetel katalog dan database default untuk bucket tabel Amazon S3:

```
USE "{{my_table_bucket}}@s3tablescatalog".{{my_database}};
SELECT * FROM {{my_iceberg_table}};
```

Untuk mengatur jalur pencarian untuk resolusi skema dengan bucket tabel Amazon S3:

```
USE "{{my_table_bucket}}@s3tablescatalog";
SET search_path TO {{my_database}};
SELECT * FROM {{my_iceberg_table}};
```

**catatan**  
Per `USE` nyataan dan hanya `search_path` didukung untuk`s3tablescatalog`. Mereka tidak bisa digunakan dengan`awsdatacatalog`. Untuk mereferensikan tabel`awsdatacatalog`, gunakan notasi tiga bagian lengkap.

## Praktik terbaik untuk mereferensikan tabel Iceberg
<a name="referencing-iceberg-best-practices"></a>

Tabel Apache Iceberg adalah entitas logis tunggal yang terdiri dari beberapa file: file metadata root (metadata.json), daftar manifes, file manifes, dan file data (biasanya.). File metadata root berfungsi sebagai titik masuk dan berisi referensi ke semua file lain yang membentuk tabel. Saat Anda memberikan akses Amazon Redshift ke tabel Iceberg, Amazon Redshift menggunakan file metadata root untuk menemukan dan membaca semua file data yang direferensikan. Jika Amazon Redshift memiliki akses ke file metadata root, itu mengasumsikan dan memerlukan akses ke semua file data yang mendasarinya juga. Ini konsisten dengan desain Iceberg, di mana akses tingkat tabel adalah unit otorisasi yang dimaksudkan.

Untuk meningkatkan kinerja kueri, Amazon Redshift menyimpan file metadata Iceberg (termasuk file metadata root, daftar manifes, dan file manifes) dalam memori. File metadata root (metadata.json) divalidasi ulang terhadap Amazon S3 pada interval yang dapat dikonfigurasi (TTL). Setelah TTL berakhir, Amazon Redshift melakukan permintaan Amazon S3 HEAD pada file metadata root untuk memverifikasi bahwa peran IAM masih memiliki akses dan file tersebut belum dimodifikasi. Jika pemeriksaan izin gagal atau file telah berubah, entri yang di-cache diusir dan metadata diambil kembali dari Amazon S3. Karena file metadata root adalah titik masuk untuk semua akses tabel, validasi ulang ini berfungsi sebagai gerbang izin untuk seluruh tabel. Daftar manifes dan file manifes di-cache tanpa validasi ulang TTL independen - validitas aksesnya berasal dari pemeriksaan izin metadata root. Ini berarti bahwa jika Anda mencabut izin Amazon S3 pada tabel Iceberg, kueri dapat terus berhasil selama maksimal 2 menit saat menggunakan metadata yang di-cache.

**penting**  
Amazon S3 memungkinkan Anda mengatur izin pada tingkat objek individual, yang berarti secara teknis dimungkinkan untuk memberikan akses ke metadata tabel Iceberg sambil membatasi akses ke beberapa file data yang mendasarinya. Ini menciptakan inkonsistensi izin yang dapat menyebabkan kegagalan kueri atau kesalahan akses tak terduga di Amazon Redshift.

Amazon Redshift memvalidasi akses ke file metadata root yang di-cache secara berkala tetapi tidak memvalidasi atau menegakkan konsistensi antara izin tingkat metadata dan tingkat file data dalam bucket Amazon S3 Anda. Merupakan tanggung jawab pelanggan untuk memastikan bahwa izin diterapkan secara konsisten di semua file yang membentuk tabel Iceberg.

Untuk menghindari hal ini, pertimbangkan praktik terbaik berikut saat mereferensikan tabel Iceberg di Amazon Redshift:
+ **Gunakan nama skema deskriptif ** — Saat membuat skema eksternal, gunakan nama yang dengan jelas menunjukkan sumber dan tujuan data, seperti `sales_data_lake` atau`customer_analytics`.
+ **Memanfaatkan statistik tabel ** — Pastikan statistik kolom dibuat untuk tabel Iceberg Anda yang digunakan untuk AWS Glue mengoptimalkan kinerja kueri. Amazon Redshift menggunakan statistik ini untuk perencanaan dan pengoptimalan kueri.
+ **Pertimbangkan kesegaran data ** — Tabel gunung es dapat diperbarui oleh layanan lain saat Anda menanyainya. Amazon Redshift menyediakan konsistensi transaksional, memastikan Anda melihat snapshot data yang konsisten selama eksekusi kueri Anda.
+ **Gunakan izin IAM yang sesuai ** — Pastikan cluster atau grup kerja Amazon Redshift Anda memiliki izin IAM yang diperlukan untuk mengakses lokasi Amazon S3 tempat tabel Iceberg Anda disimpan, serta metadata Katalog Data.
+ **Izin tingkat tabel ** — Berikan izin di tingkat tabel, bukan pada tingkat file individual.
+ **Izin seragam ** — Pertahankan akses seragam di seluruh jalur Amazon S3 untuk tabel Iceberg Anda, termasuk semua metadata, manifes, dan file data.
+ **Hindari kebijakan tingkat objek yang membatasi ** — Jangan menetapkan kebijakan tingkat objek yang membatasi pada file Parquet individual dalam awalan tabel Iceberg.
+ **Memahami cache TTL untuk perubahan izin ** — Saat Anda mencabut izin Amazon S3 pada tabel Iceberg, kueri dapat terus berhasil menggunakan metadata root yang di-cache hingga durasi TTL yang dikonfigurasi (default: 2 menit).
+ **Memantau kinerja kueri ** — Gunakan fitur pemantauan kueri Amazon Redshift untuk melacak kinerja kueri terhadap tabel Iceberg dan mengoptimalkan sesuai kebutuhan.

## Pola referensi umum
<a name="referencing-iceberg-examples"></a>

Contoh berikut menunjukkan pola umum untuk mereferensikan tabel Iceberg:

**Menggabungkan data di beberapa tabel Iceberg: **

```
SELECT 
    region,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count
FROM data_lake.sales_transactions
WHERE transaction_date >= '2024-01-01'
GROUP BY region
ORDER BY total_sales DESC;
```

**Menggabungkan tabel Iceberg dengan tabel Amazon Redshift lokal: **

```
SELECT 
    c.customer_name,
    c.customer_tier,
    SUM(o.order_amount) as total_orders
FROM customers c
JOIN data_lake.order_history o ON c.customer_id = o.customer_id
WHERE o.order_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY c.customer_name, c.customer_tier;
```

**Menggunakan notasi tiga bagian dengan kueri kompleks: **

```
WITH recent_orders AS (
    SELECT customer_id, order_date, order_amount
    FROM "analytics_bucket@s3tablescatalog".ecommerce.orders
    WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
)
SELECT 
    customer_id,
    COUNT(*) as order_count,
    AVG(order_amount) as avg_order_value
FROM recent_orders
GROUP BY customer_id
HAVING COUNT(*) > 1;
```