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.csv
dan.json
file dan Anda mengecualikan.json
file 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
REPAIR
perintah atau secara manual menjalankanALTER TABLE ADD PARTITION
Perintah. 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 untuktable1
dantable2
serupa, 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 berisitable1
dantable2
, dan kolom partisi kedua yang berisipartition1
melaluipartition5
.
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
Masuk ke AWS Management Console dan buka AWS Glue konsol di https://console.aws.amazon.com/glue/
. -
Di panel navigasi, pilih Perayap.
-
Pilih tautan ke crawler Anda, lalu pilih Edit.
-
Untuk Langkah 2: Pilih sumber data dan pengklasifikasi, pilih Edit.
-
Untuk Sumber data, pilih Tambahkan sumber data.
-
Dalam kotak dialog Tambahkan sumber data, untuk jalur S3, pilih Jelajahi.
-
Pilih bucket yang ingin Anda gunakan, lalu pilih Pilih.
Sumber data yang Anda tambahkan muncul di daftar Sumber data.
-
Pilih Selanjutnya.
-
Pada halaman Konfigurasi pengaturan keamanan, buat atau pilih peran IAM untuk crawler, lalu pilih Berikutnya.
-
Pastikan bahwa jalur S3 berakhir dengan garis miring, lalu pilih Tambahkan sumber data S3.
-
Pada halaman Set output dan penjadwalan, untuk konfigurasi Output, pilih database target.
-
Pilih Selanjutnya.
-
Pada halaman Tinjau dan perbarui, tinjau pilihan yang Anda buat. Untuk mengedit langkah, pilih Edit.
-
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 REPAIR
dalam 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
-
Di panel navigasi AWS Glue konsol, pilih Tabel.
-
Pilih tautan untuk tabel yang ingin Anda edit, lalu pilih Tindakan, Edit tabel.
-
Pada halaman Edit tabel, buat perubahan berikut:
-
Untuk Serialisasi lib, masukkan.
org.apache.hadoop.hive.serde2.OpenCSVSerde
-
UntukParameter serde, masukkan nilai berikut untuk kunci
escapeChar
,quoteChar
, danseparatorChar
:-
Untuk
escapeChar
, masukkan garis miring terbalik (\
). -
Untuk
quoteChar
, masukkan kutipan ganda ("
). -
Untuk
separatorChar
, masukkan koma (,
).
-
-
-
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 TABLE
pernyataan, Anda dapat menggunakanskip.header.line.count
untuk 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:
-
Membuat indeks partisi di AWS Glue.
-
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
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
Masuk ke AWS Management Console dan buka AWS Glue konsol di https://console.aws.amazon.com/glue/
. -
Di panel navigasi konsol, pilih Tabel.
-
Pilih tautan untuk tabel yang ingin Anda edit, lalu pilih Tindakan, Edit tabel.
-
Gulir ke bawah ke bagian Properti tabel.
-
Pilih Tambahkan.
-
Untuk Kunci, masukkan
classification
. -
Untuk Nilai, masukkan tipe data (misalnya,
json
). -
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.