Praktik terbaik saat menggunakan Athena dengan AWS Glue - Amazon Athena

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

Praktik terbaik saat menggunakan Athena dengan AWS Glue

Saat menggunakan Athena dengan AWS Glue Data Catalog, Anda dapat menggunakan AWS Glue untuk membuat database dan tabel (skema) untuk ditanyakan di Athena, atau Anda dapat menggunakan Athena untuk membuat skema dan kemudian menggunakannya dalam dan layanan terkait. AWS Glue Topik ini memberikan pertimbangan dan praktik terbaik saat menggunakan salah satu metode.

Di bawah tenda, Athena menggunakan Trino untuk memproses pernyataan DHTML dan Hive untuk memproses pernyataan DDL yang membuat dan memodifikasi skema. Dengan teknologi ini, ada beberapa konvensi yang harus diikuti sehingga Athena AWS Glue dan bekerja sama dengan baik.

Dalam topik ini

Nama database, tabel, dan kolom

Saat Anda membuat skema AWS Glue untuk kueri di Athena, pertimbangkan hal berikut:

  • Karakter yang dapat diterima untuk nama database, nama tabel, dan nama kolom AWS Glue harus berupa string UTF-8 dan harus dalam huruf kecil. Perhatikan bahwa Athena secara otomatis menurunkan nama huruf besar dalam kueri DDL saat membuat database, tabel, atau kolom. Panjang string tidak boleh kurang dari 1 atau lebih dari 255 byte. Karakter yang dapat digunakan termasuk spasi.

  • Saat ini, dimungkinkan untuk memiliki spasi terkemuka di awal nama. Karena ruang terdepan ini sulit dideteksi dan dapat menyebabkan masalah kegunaan setelah pembuatan, hindari secara tidak sengaja membuat nama objek dengan spasi terkemuka.

  • Jika Anda menggunakan AWS::Glue::Database AWS CloudFormation template untuk membuat AWS Glue database dan tidak menentukan nama database, AWS Glue secara otomatis menghasilkan nama database dalam format resource_name—random_string yang tidak kompatibel dengan Athena.

  • Anda dapat menggunakan Pengelola AWS Glue Katalog untuk mengganti nama kolom, tetapi bukan nama tabel atau nama database. Untuk mengatasi batasan ini, Anda harus menggunakan definisi database lama untuk membuat database dengan nama baru. Kemudian Anda menggunakan definisi tabel dari database lama untuk membuat ulang tabel dalam database baru. Untuk melakukan ini, Anda dapat menggunakan AWS CLI atau AWS Glue SDK. Untuk langkah, lihat Menggunakan AWS CLI untuk membuat ulang AWS Glue database dan tabelnya.

Untuk informasi selengkapnya tentang database dan tabel AWS Glue, lihat Database dan Tabel di Panduan AWS Glue Pengembang.

Menggunakan AWS Glue crawler

AWS Glue crawler membantu menemukan skema untuk kumpulan data dan mendaftarkannya sebagai tabel di Katalog Data. AWS Glue Crawler menelusuri data Anda dan menentukan skema. Selain itu, crawler dapat mendeteksi dan mendaftarkan partisi. Untuk informasi selengkapnya, lihat Mendefinisikan crawler di Panduan AWS Glue Pengembang. Tabel dari data yang berhasil dirayapi dapat ditanyakan dari Athena.

catatan

Athena tidak mengenali pola pengecualian yang Anda tentukan untuk crawler. AWS Glue Misalnya, jika Anda memiliki bucket Amazon S3 yang berisi keduanya.csvdan.jsonfile dan Anda mengecualikan.jsonfile dari crawler, Athena mengkueri kedua grup file. Untuk menghindari hal ini, menempatkan file yang ingin Anda mengecualikan di lokasi yang berbeda.

Menjadwalkan crawler agar tetap sinkron AWS Glue Data Catalog dan Amazon S3

AWS Glue crawler dapat diatur untuk berjalan sesuai jadwal atau sesuai permintaan. Untuk informasi selengkapnya, lihat Jadwal berbasis waktu untuk pekerjaan dan crawler di Panduan Pengembang.AWS Glue

Jika Anda memiliki data yang tiba untuk tabel yang dipartisi pada waktu yang tetap, Anda dapat mengatur AWS Glue crawler agar berjalan sesuai jadwal untuk mendeteksi dan memperbarui partisi tabel. Ini dapat menghilangkan kebutuhan untuk menjalankan berpotensi panjang dan mahalMSCK REPAIRperintah atau secara manual menjalankanALTER TABLE ADD PARTITIONPerintah. Untuk informasi selengkapnya, lihat Partisi tabel di Panduan AWS Glue Pengembang.

Menggunakan beberapa sumber data dengan crawler

Ketika AWS Glue crawler memindai Amazon S3 dan mendeteksi beberapa direktori, ia menggunakan heuristik untuk menentukan di mana root untuk tabel berada dalam struktur direktori, dan direktori mana yang merupakan partisi untuk tabel. Dalam beberapa kasus, tempat skema yang terdeteksi dalam dua atau lebih direktori serupa, crawler dapat memperlakukannya sebagai partisi dan bukan tabel terpisah. Salah satu cara untuk membantu crawler menemukan tabel individu adalah dengan menambahkan direktori root setiap tabel sebagai penyimpanan data untuk crawler.

Partisi berikut di Amazon S3 adalah contoh:

s3://DOC-EXAMPLE-BUCKET/folder1/table1/partition1/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table1/partition2/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table1/partition3/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table2/partition4/file.txt s3://DOC-EXAMPLE-BUCKET/folder1/table2/partition5/file.txt

Jika skema untuktable1dantable2serupa, dan sumber data tunggal diatur kes3://DOC-EXAMPLE-BUCKET/folder1/masuk AWS Glue, crawler dapat membuat tabel tunggal dengan dua kolom partisi: satu kolom partisi yang berisitable1dantable2, dan kolom partisi kedua yang berisipartition1melaluipartition5.

Agar AWS Glue crawler membuat dua tabel terpisah, atur crawler untuk memiliki dua sumber data, s3://DOC-EXAMPLE-BUCKET/folder1/table1/ dans3://DOC-EXAMPLE-BUCKET/folder1/table2, seperti yang ditunjukkan dalam prosedur berikut.

Untuk menambahkan penyimpanan data S3 ke crawler yang ada di AWS Glue

  1. Masuk ke AWS Management Console dan buka AWS Glue konsol di https://console.aws.amazon.com/glue/.

  2. Di panel navigasi, pilih Perayap.

  3. Pilih tautan ke crawler Anda, lalu pilih Edit.

  4. Untuk Langkah 2: Pilih sumber data dan pengklasifikasi, pilih Edit.

  5. Untuk Sumber data, pilih Tambahkan sumber data.

  6. Dalam kotak dialog Tambahkan sumber data, untuk jalur S3, pilih Jelajahi.

  7. Pilih bucket yang ingin Anda gunakan, lalu pilih Pilih.

    Sumber data yang Anda tambahkan muncul di daftar Sumber data.

  8. Pilih Selanjutnya.

  9. Pada halaman Konfigurasi pengaturan keamanan, buat atau pilih peran IAM untuk crawler, lalu pilih Berikutnya.

  10. Pastikan bahwa jalur S3 berakhir dengan garis miring, lalu pilih Tambahkan sumber data S3.

  11. Pada halaman Set output dan penjadwalan, untuk konfigurasi Output, pilih database target.

  12. Pilih Selanjutnya.

  13. Pada halaman Tinjau dan perbarui, tinjau pilihan yang Anda buat. Untuk mengedit langkah, pilih Edit.

  14. Pilih Perbarui.

Menyinkronkan skema partisi untuk menghindari “HIVE_PARTITION_SCHEMA_MISMATCH”

Untuk setiap tabel dalam Katalog AWS Glue Data yang memiliki kolom partisi, skema disimpan pada tingkat tabel dan untuk setiap partisi individu dalam tabel. Skema untuk partisi diisi oleh AWS Glue crawler berdasarkan sampel data yang dibaca dalam partisi. Untuk informasi selengkapnya, lihat Menggunakan beberapa sumber data dengan crawler.

Saat Athena menjalankan kueri, itu memvalidasi skema tabel dan skema dari setiap partisi yang diperlukan untuk kueri. validasi membandingkan jenis data kolom dalam rangka dan memastikan bahwa mereka cocok untuk kolom yang tumpang tindih. Ini mencegah operasi tak terduga seperti menambahkan atau menghapus kolom dari tengah tabel. Jika Athena mendeteksi bahwa skema partisi berbeda dari skema tabel, Athena mungkin tidak dapat memproses kueri dan gagal denganHIVE_PARTITION_SCHEMA_MISMATCH.

Ada beberapa cara untuk memperbaiki masalah ini. Pertama, jika data tidak sengaja ditambahkan, Anda dapat menghapus file data yang menyebabkan perbedaan dalam skema, menjatuhkan partisi, dan re-crawl data. Kedua, Anda dapat drop partisi individu dan kemudian jalankanMSCK REPAIRdalam Athena untuk menciptakan kembali partisi menggunakan skema tabel ini. Opsi kedua ini bekerja hanya jika Anda yakin bahwa skema diterapkan akan terus membaca data dengan benar.

Memperbarui metadata tabel

Setelah crawl, AWS Glue crawler secara otomatis menetapkan metadata tabel tertentu untuk membantu membuatnya kompatibel dengan teknologi eksternal lainnya seperti Apache Hive, Presto, dan Spark. Kadang-kadang, crawler mungkin salah menetapkan properti metadata. Perbaiki properti secara manual AWS Glue sebelum menanyakan tabel menggunakan Athena. Untuk informasi selengkapnya, lihat Melihat dan mengedit detail tabel di Panduan AWS Glue Pengembang.

AWS Glue mungkin salah menetapkan metadata ketika file CSV memiliki tanda kutip di sekitar setiap bidang data, membuat properti salah. serializationLib Untuk informasi selengkapnya, lihat Data CSV terlampir dalam tanda kutip.

Bekerja dengan file CSV

File CSV terkadang memiliki tanda kutip di sekitar nilai data yang dimaksudkan untuk setiap kolom, dan mungkin ada nilai header yang disertakan dalam file CSV, yang bukan merupakan bagian dari data yang akan dianalisis. Bila Anda gunakan AWS Glue untuk membuat skema dari file-file ini, ikuti panduan di bagian ini.

Data CSV terlampir dalam tanda kutip

Anda mungkin memiliki file CSV yang memiliki bidang data tertutup dalam tanda kutip ganda seperti contoh berikut:

"John","Doe","123-555-1231","John said \"hello\"" "Jane","Doe","123-555-9876","Jane said \"hello\""

Untuk menjalankan kueri di Athena pada tabel yang dibuat dari file CSV yang memiliki nilai kutipan, Anda harus memodifikasi properti tabel untuk AWS Glue menggunakan OpenCSV. SerDe Untuk informasi selengkapnya tentang SerDe OpenCSV, lihat. OpenCSV untuk SerDe memproses CSV

Untuk mengedit properti tabel di AWS Glue konsol
  1. Di panel navigasi AWS Glue konsol, pilih Tabel.

  2. Pilih tautan untuk tabel yang ingin Anda edit, lalu pilih Tindakan, Edit tabel.

  3. Pada halaman Edit tabel, buat perubahan berikut:

    • Untuk Serialisasi lib, masukkan. org.apache.hadoop.hive.serde2.OpenCSVSerde

    • UntukParameter serde, masukkan nilai berikut untuk kunciescapeChar,quoteChar, danseparatorChar:

      • UntukescapeChar, masukkan garis miring terbalik (\).

      • UntukquoteChar, masukkan kutipan ganda (").

      • UntukseparatorChar, masukkan koma (,).

  4. Pilih Simpan.

Untuk informasi selengkapnya, lihat Melihat dan mengedit detail tabel di Panduan AWS Glue Pengembang.

Memperbarui properti AWS Glue tabel secara terprogram

Anda dapat menggunakan operasi AWS Glue UpdateTableAPI atau perintah CLI update-table untuk memodifikasi SerDeInfo blok dalam definisi tabel, seperti pada contoh JSON berikut.

"SerDeInfo": { "name": "", "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "parameters": { "separatorChar": "," "quoteChar": "\"" "escapeChar": "\\" } },

File CSV dengan header

Jika Anda menentukan tabel di Athena denganCREATE TABLEpernyataan, Anda dapat menggunakanskip.header.line.countuntuk mengabaikan header dalam data CSV Anda, seperti dalam contoh berikut.

... STORED AS TEXTFILE LOCATION 's3://DOC-EXAMPLE-BUCKET/csvdata_folder/'; TBLPROPERTIES ("skip.header.line.count"="1")

Atau, Anda dapat menghapus header CSV terlebih dahulu sehingga informasi header tidak termasuk dalam hasil permintaan Athena. Salah satu cara untuk mencapai ini adalah dengan menggunakan AWS Glue pekerjaan, yang melakukan pekerjaan ekstrak, transformasi, dan beban (ETL). Anda dapat menulis skrip dalam AWS Glue menggunakan bahasa yang merupakan perpanjangan dari dialek PySpark Python. Untuk informasi selengkapnya, lihat Menulis Pekerjaan di AWS Glue di Panduan AWS Glue Pengembang.

Contoh berikut menunjukkan fungsi dalam AWS Glue skrip yang menulis frame dinamis menggunakanfrom_options, dan menetapkan opsi writeHeader format ke false, yang menghapus informasi header:

glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://DOC-EXAMPLE-BUCKET/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")

AWS Glue pengindeksan partisi dan penyaringan

Ketika Athena menanyakan tabel yang dipartisi, Athena mengambil dan memfilter partisi tabel yang tersedia ke subset yang relevan dengan kueri Anda. Saat data dan partisi baru ditambahkan, lebih banyak waktu diperlukan untuk memproses partisi, dan runtime kueri dapat meningkat. Jika Anda memiliki tabel dengan sejumlah besar partisi yang tumbuh seiring waktu, pertimbangkan untuk menggunakan pengindeksan dan penyaringan AWS Glue partisi. Pengindeksan partisi memungkinkan Athena untuk mengoptimalkan pemrosesan partisi dan meningkatkan kinerja kueri pada tabel yang sangat dipartisi. Menyiapkan pemfilteran partisi dalam properti tabel adalah proses dua langkah:

  1. Membuat indeks partisi di AWS Glue.

  2. Mengaktifkan pemfilteran partisi untuk tabel.

Membuat indeks partisi

Untuk langkah-langkah membuat indeks partisi AWS Glue, lihat Bekerja dengan indeks partisi di Panduan AWS Glue Pengembang. Untuk batasan indeks partisi di AWS Glue, lihat bagian Tentang indeks partisi di halaman itu.

Mengaktifkan pemfilteran partisi

Untuk mengaktifkan pemfilteran partisi untuk tabel, Anda harus mengatur properti tabel baru di AWS Glue. Untuk langkah-langkah tentang cara mengatur properti tabel AWS Glue, lihat halaman Menyiapkan proyeksi partisi. Saat Anda mengedit detail tabel AWS Glue, tambahkan pasangan kunci-nilai berikut ke bagian Properti tabel:

  • Untuk Key, tambahkan partition_filtering.enabled

  • Untuk Nilai, tambahkan true

Anda dapat menonaktifkan pemfilteran partisi pada tabel ini kapan saja dengan menyetel partition_filtering.enabled nilainya. false

Setelah Anda menyelesaikan langkah-langkah di atas, Anda dapat kembali ke konsol Athena untuk menanyakan data.

Untuk informasi selengkapnya tentang penggunaan pengindeksan dan pemfilteran partisi, lihat Meningkatkan kinerja kueri Amazon Athena AWS Glue Data Catalog menggunakan indeks partisi di AWS Blog Big Data.

Bekerja dengan data geospasial

AWS Glue tidak secara native mendukung Teks Terkenal (WKT), Biner Terkenal (WKB), atau tipe data PostGIS lainnya. AWS Glue Pengklasifikasi mem-parsing data geospasial dan mengklasifikasikannya menggunakan tipe data yang didukung untuk format, seperti untuk CSV. varchar Seperti AWS Glue tabel lainnya, Anda mungkin perlu memperbarui properti tabel yang dibuat dari data geospasial untuk memungkinkan Athena mengurai tipe data ini apa adanya. Untuk informasi selengkapnya, lihat Menggunakan AWS Glue crawler dan Bekerja dengan file CSV. Athena mungkin tidak dapat mengurai beberapa tipe data geospasial dalam tabel apa adanya. AWS Glue Untuk informasi selengkapnya tentang bekerja dengan data geospasial di Athena, lihatMenanyakan data geospasial.

Menggunakan AWS Glue pekerjaan untuk ETL dengan Athena

AWS Glue pekerjaan melakukan operasi ETL. AWS Glue Pekerjaan menjalankan skrip yang mengekstrak data dari sumber, mengubah data, dan memuatnya menjadi target. Untuk informasi selengkapnya, lihat Menulis Pekerjaan di AWS Glue di Panduan AWS Glue Pengembang.

Membuat tabel menggunakan Athena untuk AWS Glue pekerjaan ETL

Tabel yang Anda buat di Athena harus memiliki properti tabel ditambahkan ke mereka yang disebut classification, yang mengidentifikasi format data. Hal ini memungkinkan AWS Glue untuk menggunakan tabel untuk pekerjaan ETL. Nilai klasifikasi dapat berupaavro,csv,json,orc,parquet, atauxml. Contoh pernyataan CREATE TABLE di Athena berikut:

CREATE EXTERNAL TABLE sampleTable ( column1 INT, column2 INT ) STORED AS PARQUET TBLPROPERTIES ( 'classification'='parquet')

Jika properti tabel tidak ditambahkan saat tabel dibuat, Anda dapat menambahkannya menggunakan AWS Glue konsol.

Untuk menambahkan properti tabel klasifikasi menggunakan AWS Glue konsol

  1. Masuk ke AWS Management Console dan buka AWS Glue konsol di https://console.aws.amazon.com/glue/.

  2. Di panel navigasi konsol, pilih Tabel.

  3. Pilih tautan untuk tabel yang ingin Anda edit, lalu pilih Tindakan, Edit tabel.

  4. Gulir ke bawah ke bagian Properti tabel.

  5. Pilih Tambahkan.

  6. Untuk Kunci, masukkan classification.

  7. Untuk Nilai, masukkan tipe data (misalnya,json).

  8. Pilih Simpan.

    Di bagian Rincian tabel, tipe data yang Anda masukkan muncul di bidang Klasifikasi untuk tabel.

Untuk informasi selengkapnya, lihat Bekerja dengan tabel di Panduan AWS Glue Pengembang.

Menggunakan pekerjaan ETL untuk mengoptimalkan kinerja kueri

AWS Glue jobs dapat membantu Anda mengubah data ke format yang mengoptimalkan kinerja kueri di Athena. Format data memiliki dampak besar pada performa kueri dan biaya permintaan di Athena.

Kami merekomendasikan untuk menggunakan format data Parket dan ORC. AWS Glue mendukung penulisan ke kedua format data ini, yang dapat membuatnya lebih mudah dan lebih cepat bagi Anda untuk mengubah data ke format optimal untuk Athena. Untuk informasi selengkapnya tentang format ini dan cara lain untuk meningkatkan kinerja, lihat 10 kiat penyetelan kinerja teratas untuk Amazon Athena.

Mengonversi tipe data SMALLINT dan TINYINT ke INT saat mengonversi ke ORC

Untuk mengurangi kemungkinan bahwa Athena tidak dapat membaca SMALLINT dan tipe TINYINT data yang dihasilkan oleh pekerjaan AWS Glue ETL, konversi SMALLINT dan TINYINT ke INT saat menggunakan wizard atau menulis skrip untuk pekerjaan ETL.

Mengotomatiskan AWS Glue pekerjaan untuk ETL

Anda dapat mengonfigurasi pekerjaan AWS Glue ETL agar berjalan secara otomatis berdasarkan pemicu. Fitur ini sangat ideal ketika data dari luar AWS didorong ke bucket Amazon S3 dalam format suboptimal untuk kueri di Athena. Untuk informasi selengkapnya, lihat Memicu AWS Glue lowongan di Panduan AWS Glue Pengembang.