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.
Merujuk 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 Gunung Es, atau menggunakan notasi tiga bagian untuk akses langsung ke katalog yang dipasang secara otomatis.
Menggunakan skema eksternal untuk referensi tabel Iceberg
Skema eksternal menyediakan cara untuk mereferensikan tabel di Katalog Data Anda dari dalam Amazon Redshift. Saat membuat skema eksternal, Anda membuat sambungan antara database Amazon Redshift dan database Katalog Data tertentu yang berisi tabel Iceberg Anda.
Untuk membuat skema eksternal untuk tabel Iceberg:
CREATE EXTERNAL SCHEMAschema_nameFROM 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 * FROMschema_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 JOINschema_name.iceberg_ordersi ON r.customer_id = i.customer_id;
Menggunakan notasi tiga bagian dengan katalog yang dipasang secara otomatis
Three-part notasi memungkinkan Anda untuk secara 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 pengaturan pemasangan otomatis Katalog Data, lihat Menyederhanakan akses objek eksternal di Amazon Redshift menggunakan pemasangan otomatis
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 penggunaan katalog awsdatacatalog root, lihat Menanyakan AWS Glue Data Catalog di Panduan Manajemen Pergeseran Merah Amazon 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 * FROMmy_iceberg_table;
Untuk menyetel jalur pencarian resolusi skema dengan bucket tabel Amazon S3:
USE "my_table_bucket@s3tablescatalog"; SET search_path TOmy_database; SELECT * FROMmy_iceberg_table;
catatan
USEPernyataan dan hanya search_path didukung untuks3tablescatalog. Mereka tidak dapat digunakan denganawsdatacatalog. Untuk mereferensikan tabelawsdatacatalog, gunakan notasi tiga bagian penuh.
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 .parquet). 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 meja adalah unit otorisasi yang dimaksudkan.
Untuk meningkatkan kinerja kueri, Amazon Redshift menyimpan file metadata Iceberg (termasuk file metadata root, daftar manifes, dan file manifes) di memori. File metadata root (metadata.json) divalidasi ulang terhadap Amazon S3 pada interval yang dapat dikonfigurasi (TTL). Setelah TTL kedaluwarsa, 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 akan 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 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 menerapkan konsistensi antara izin tingkat metadata dan tingkat file data dalam bucket Amazon S3 Anda. Ini adalah tanggung jawab pelanggan untuk memastikan bahwa izin diterapkan secara konsisten di semua file yang merupakan 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 secara jelas menunjukkan sumber dan tujuan data, seperti atau.
sales_data_lakecustomer_analytics -
Leverage statistik tabel — Pastikan statistik kolom dihasilkan untuk tabel Iceberg Anda gunakan AWS Glue untuk 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 menanyakannya. Amazon Redshift memberikan konsistensi transaksional, memastikan Anda melihat snapshot data yang konsisten selama eksekusi kueri.
-
Gunakan izin IAM yang sesuai — Pastikan klaster 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 — Pastikan 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 Parket 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 cache hingga durasi TTL yang dikonfigurasi (default: 2 menit).
-
Pantau 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 referensi tabel Iceberg:
Menggabungkan data di beberapa tabel Gunung Es:
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;
Bergabung dengan 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;