View a markdown version of this page

Mereferensikan tabel Iceberg di Amazon Redshift - Amazon Redshift

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 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

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

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

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

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 di Panduan Pengguna Amazon S3.

Anda juga dapat mereferensikan tabel di bawah katalog root yang dipasang secara otomatisawsdatacatalog, 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 di Panduan Manajemen Amazon Redshift dan Mengelola ruang nama Katalog Data 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 untuks3tablescatalog. Mereka tidak bisa digunakan denganawsdatacatalog. Untuk mereferensikan tabelawsdatacatalog, gunakan notasi tiga bagian lengkap.

Praktik terbaik untuk mereferensikan tabel Iceberg

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 ataucustomer_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

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;