Bekerja dengan tabel Apache Iceberg dengan menggunakan Amazon Athena SQL - AWS Panduan Preskriptif

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

Bekerja dengan tabel Apache Iceberg dengan menggunakan Amazon Athena SQL

Amazon Athena menyediakan dukungan bawaan untuk Apache Iceberg, dan tidak memerlukan langkah atau konfigurasi tambahan. Bagian ini memberikan gambaran rinci tentang fitur yang didukung dan panduan tingkat tinggi untuk menggunakan Athena untuk berinteraksi dengan tabel Iceberg.

Versi dan kompatibilitas fitur

catatan

Bagian berikut mengasumsikan bahwa Anda menggunakan mesin Athena versi 3.

Dukungan spesifikasi tabel gunung es

Spesifikasi tabel Apache Iceberg menentukan bagaimana tabel Iceberg harus berperilaku. Athena mendukung format tabel versi 2, jadi tabel Iceberg apa pun yang Anda buat dengan konsol, CLI, atau SDK secara inheren menggunakan versi itu.

Jika Anda menggunakan tabel Iceberg yang dibuat dengan mesin lain, seperti Apache Spark di Amazon EMR AWS Glue atau, pastikan untuk mengatur versi format tabel dengan menggunakan properti tabel. Sebagai referensi, lihat bagian Membuat dan menulis tabel Gunung Es sebelumnya dalam panduan ini.

Dukungan fitur Iceberg

Anda dapat menggunakan Athena untuk membaca dan menulis ke tabel Iceberg. Saat Anda mengubah data dengan menggunakanUPDATE,MERGE INTO, dan DELETE FROM pernyataan, Athena hanya mendukung merge-on-read mode. Properti ini tidak dapat diubah. Untuk memperbarui atau menghapus data dengan copy-on-write, Anda harus menggunakan mesin lain seperti Apache Spark di Amazon EMR atau. AWS Glue Tabel berikut merangkum dukungan fitur Iceberg di Athena.

Dukungan DDL Dukungan DML AWS Lake Formation untuk keamanan (opsional)
Format tabel Membuat tabel Evolusi skema Membaca data Menulis data Kontrol akses baris/kolom
Amazon Athena Versi 2 X X opy-on-write
✓ M erge-on-read
catatan

Athena tidak mendukung kueri Incremental.

Bekerja dengan tabel Iceberg

Untuk memulai dengan cepat menggunakan Iceberg di Athena, lihat bagian Memulai dengan tabel Iceberg di Athena SQL sebelumnya dalam panduan ini.

Tabel berikut mencantumkan batasan dan rekomendasi.

Skenario

Batasan

Rekomendasi

Tabel generasi DDL

Tabel gunung es yang dibuat dengan mesin lain dapat memiliki properti yang tidak terpapar di Athena. Untuk tabel ini, tidak mungkin untuk menghasilkan DDL.

Gunakan pernyataan yang setara di mesin yang membuat tabel (misalnya, SHOW CREATE TABLE pernyataan untuk Spark).

Awalan Amazon S3 acak dalam objek yang ditulis ke tabel Gunung Es

Secara default, tabel Iceberg yang dibuat dengan Athena mengaktifkan properti. write.object-storage.enabled

Untuk menonaktifkan perilaku ini dan mendapatkan kontrol penuh atas properti tabel Iceberg, buat tabel Iceberg dengan mesin lain seperti Spark di Amazon EMR atau. AWS Glue

Kueri tambahan

Saat ini tidak didukung di Athena.

Untuk menggunakan kueri inkremental untuk mengaktifkan pipeline konsumsi data tambahan, gunakan Spark di Amazon EMR atau. AWS Glue

Migrasi tabel yang ada ke Iceberg

Untuk memigrasikan Athena AWS Glue atau tabel saat ini (juga dikenal sebagai tabel Hive) ke format Iceberg, Anda dapat menggunakan migrasi data di tempat atau penuh:

  • Migrasi di tempat adalah proses menghasilkan file metadata Iceberg di atas file data yang ada.

  • Migrasi data lengkap membuat lapisan metadata Iceberg dan juga menulis ulang file data yang ada dari tabel asli ke tabel Iceberg baru.

Bagian berikut memberikan gambaran umum tentang API yang tersedia untuk memigrasikan tabel dan panduan untuk memilih strategi migrasi. Untuk informasi selengkapnya tentang kedua strategi ini, lihat bagian Migrasi Tabel di dokumentasi Gunung Es.

Migrasi di tempat

Migrasi di tempat menghilangkan kebutuhan untuk menulis ulang semua file data. Sebagai gantinya, file metadata Iceberg dibuat dan ditautkan ke file data yang ada. Iceberg menawarkan tiga opsi untuk menerapkan migrasi di tempat:

Saat ini, prosedur migrasi tidak berfungsi secara langsung dengan AWS Glue Data Catalog—itu hanya berfungsi dengan metastore Hive. Jika Anda memiliki persyaratan untuk menggunakan migrate prosedur alih-alih snapshot atauadd_files, Anda dapat menggunakan klaster EMR Amazon sementara dengan metastore Hive (HMS). Pendekatan ini membutuhkan Iceberg versi 1.2 atau yang lebih baru.

Katakanlah Anda ingin membuat tabel Hive berikut:

Memigrasi tabel Hive ke Amazon Athena

Anda dapat membuat tabel Hive ini dengan menjalankan kode ini di konsol Athena:

CREATE EXTERNAL TABLE 'hive_table'( 'id' bigint, 'data' string) USING parquet LOCATION 's3://datalake-xxxx/aws_workshop/iceberg_db/hive_table' INSERT INTO iceberg_db.hive_table VALUES (1, 'a')

Jika tabel Hive Anda dipartisi, sertakan pernyataan partisi dan tambahkan partisi sesuai dengan persyaratan Hive.

ALTER TABLE default.placeholder_table_for_migration ADD PARTITION (date = '2023-10-10')

Langkah:

  1. Buat klaster EMR Amazon tanpa mengaktifkan AWS Glue Data Catalog integrasi—yaitu, jangan pilih kotak centang untuk metadata tabel Hive atau Spark. Itu karena Anda akan menggunakan metastore Hive asli (HMS) yang tersedia di cluster untuk solusi ini.

    AWS Glue Data Catalog pengaturan tanpa metadata Hive atau Spark
  2. Konfigurasikan sesi Spark untuk menggunakan implementasi katalog Iceberg Hive.

    "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.type": "hive",
  3. Validasi bahwa klaster EMR Amazon Anda tidak terhubung AWS Glue Data Catalog dengan show databases menjalankan atau. show tables

    Memvalidasi bahwa kluster EMR Amazon tidak terhubung ke AWS Glue Data Catalog
  4. Daftarkan tabel Hive di metastore Hive dari cluster EMR Amazon Anda, lalu gunakan prosedur Iceberg. migrate

    Prosedur migrasi gunung es

    Prosedur ini membuat file metadata Iceberg di lokasi yang sama dengan tabel Hive.

  5. Daftarkan tabel Iceberg yang dimigrasi di. AWS Glue Data Catalog

  6. Beralih kembali ke kluster EMR Amazon yang memiliki AWS Glue Data Catalog integrasi yang diaktifkan.

    AWS Glue Data Catalog pengaturan dengan metadata Spark
  7. Gunakan konfigurasi Iceberg berikut di sesi Spark.

    "spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.glue_catalog.warehouse": "s3://datalake-xxxx/aws_workshop", "spark.sql.catalog.glue_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.glue_catalog.io-impl": "org.apache.iceberg.aws.s3.S3FileIO",

Anda sekarang dapat menanyakan tabel ini dari Amazon EMR, AWS Glue, atau Athena.

Tampilkan perintah tabel untuk tabel Iceberg

Migrasi data lengkap

Migrasi data lengkap membuat ulang file data serta metadata. Pendekatan ini membutuhkan waktu lebih lama dan membutuhkan sumber daya komputasi tambahan dibandingkan dengan migrasi di tempat. Namun, opsi ini membantu meningkatkan kualitas tabel: Anda dapat memvalidasi data, membuat skema dan perubahan partisi, menggunakan data, dan sebagainya. Untuk menerapkan migrasi data lengkap, gunakan salah satu opsi berikut:

  • Gunakan pernyataan CREATE TABLE ... AS SELECT (CTAS) di Spark di Amazon EMR,, AWS Glue atau Athena.  Anda dapat mengatur spesifikasi partisi dan properti tabel untuk tabel Iceberg baru dengan menggunakan klausa PARTITIONED BY andTBLPROPERTIES. Anda dapat menyempurnakan skema dan partisi untuk tabel baru sesuai dengan kebutuhan Anda alih-alih hanya mewarisinya dari tabel sumber.

  • Baca dari tabel sumber dan tulis data sebagai tabel Iceberg baru dengan menggunakan Spark di Amazon EMR atau AWS Glue (lihat Membuat tabel dalam dokumentasi Gunung Es).

Memilih strategi migrasi

Untuk memilih strategi migrasi terbaik, pertimbangkan pertanyaan dalam tabel berikut.

Pertanyaan

Rekomendasi

Apa format file data (misalnya, CSV atau Apache Parquet)?

  • Pertimbangkan migrasi di tempat jika format file tabel Anda adalah Parket, ORC, atau Avro.

  • Untuk format lain seperti CSV, JSON, dan sebagainya, gunakan migrasi data lengkap.

Apakah Anda ingin memperbarui atau mengkonsolidasikan skema tabel?

  • Jika Anda ingin mengembangkan skema tabel dengan menggunakan kemampuan asli Iceberg, pertimbangkan migrasi di tempat. Misalnya, Anda dapat mengganti nama kolom setelah migrasi. (Skema dapat diubah di lapisan metadata Iceberg.)

  • Jika Anda ingin menghapus seluruh kolom dari file data, sebaiknya gunakan migrasi data lengkap.

Apakah tabel akan mendapat manfaat dari mengubah strategi partisi?

  • Jika pendekatan partisi Iceberg memenuhi persyaratan Anda (misalnya, data baru disimpan dengan menggunakan tata letak partisi baru sementara partisi yang ada tetap apa adanya), pertimbangkan migrasi di tempat.

  • Jika Anda ingin menggunakan partisi tersembunyi di tabel Anda, pertimbangkan migrasi data lengkap. Untuk informasi selengkapnya tentang partisi tersembunyi, lihat bagian Praktik terbaik.

Apakah tabel akan mendapat manfaat dari menambahkan atau mengubah strategi urutan pengurutan?

  • Menambahkan atau mengubah urutan data Anda memerlukan penulisan ulang kumpulan data. Dalam hal ini, pertimbangkan untuk menggunakan migrasi data lengkap.

  • Untuk tabel besar yang sangat mahal untuk menulis ulang semua partisi tabel, pertimbangkan untuk menggunakan migrasi di tempat dan menjalankan pemadatan (dengan pengurutan diaktifkan) untuk partisi yang paling sering diakses.

Apakah tabel memiliki banyak file kecil?

  • Menggabungkan file kecil menjadi file yang lebih besar memerlukan penulisan ulang kumpulan data. Dalam hal ini, pertimbangkan untuk menggunakan migrasi data lengkap.

  • Untuk tabel besar yang sangat mahal untuk menulis ulang semua partisi tabel, pertimbangkan untuk menggunakan migrasi di tempat dan menjalankan pemadatan (dengan pengurutan diaktifkan) untuk partisi yang paling sering diakses.