Konektor Amazon Athena DynamoDB - Amazon Athena

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

Konektor Amazon Athena DynamoDB

Konektor Amazon Athena DynamoDB memungkinkan Amazon Athena untuk berkomunikasi dengan DynamoDB sehingga Anda dapat menanyakan tabel Anda. SQL Operasi tulis seperti INSERT INTO tidak didukung.

Konektor ini dapat didaftarkan dengan Glue Data Catalog sebagai katalog federasi. Ini mendukung kontrol akses data yang didefinisikan dalam Lake Formation di katalog, database, tabel, kolom, baris, dan tingkat tag. Konektor ini menggunakan Glue Connections untuk memusatkan properti konfigurasi di Glue.

Jika Anda mengaktifkan Lake Formation di akun Anda, IAM peran untuk konektor Lambda federasi Athena yang Anda gunakan harus memiliki akses baca AWS Serverless Application Repository di Lake Formation ke. AWS Glue Data Catalog

Prasyarat

Batasan

Jika Anda memigrasikan koneksi DynamoDB Anda ke Glue Catalog dan Lake Formation, hanya tabel huruf kecil dan nama kolom yang akan dikenali.

Parameter

Gunakan parameter di bagian ini untuk mengkonfigurasi konektor DynamoDB.

catatan

Konektor sumber data Athena dibuat pada 3 Desember 2024 dan kemudian menggunakan koneksi. AWS Glue

Nama parameter dan definisi yang tercantum di bawah ini adalah untuk konektor sumber data Athena yang dibuat sebelum 3 Desember 2024. Ini dapat berbeda dari properti AWS Glue koneksi yang sesuai. Mulai 3 Desember 2024, gunakan parameter di bawah ini hanya jika Anda menggunakan konektor sumber data Athena versi sebelumnya secara manual.

  • spill_bucket - Menentukan bucket Amazon S3 untuk data yang melebihi batas fungsi Lambda.

  • spill_prefix — (Opsional) Default ke subfolder dalam nama yang ditentukan. spill_bucket athena-federation-spill Kami menyarankan Anda mengonfigurasi siklus hidup penyimpanan Amazon S3 di lokasi ini untuk menghapus tumpahan yang lebih lama dari jumlah hari atau jam yang telah ditentukan sebelumnya.

  • spill_put_request_headers — (Opsional) Peta header permintaan dan nilai yang JSON dikodekan untuk permintaan Amazon S3 yang digunakan untuk tumpahan (misalnya,). putObject {"x-amz-server-side-encryption" : "AES256"} Untuk kemungkinan header lainnya, lihat PutObjectdi APIReferensi Layanan Penyimpanan Sederhana Amazon.

  • kms_key_id — (Opsional) Secara default, data apa pun yang tumpah ke Amazon S3 dienkripsi menggunakan AES mode enkripsi yang diautentikasi dan kunci yang dihasilkan secara acak. GCM Agar fungsi Lambda Anda menggunakan kunci enkripsi yang lebih kuat yang dihasilkan oleh KMS likea7e63k4b-8loc-40db-a2a1-4d0en2cd8331, Anda dapat menentukan ID KMS kunci.

  • disable_spill_encryption — (Opsional) Ketika diatur ke, menonaktifkan enkripsi tumpahan. True Defaultnya False agar data yang tumpah ke S3 dienkripsi menggunakan AES - GCM — baik menggunakan kunci yang dihasilkan secara acak atau untuk menghasilkan kunci. KMS Menonaktifkan enkripsi tumpahan dapat meningkatkan kinerja, terutama jika lokasi tumpahan Anda menggunakan enkripsi sisi server.

  • disable_glue — (Opsional) Jika ada dan disetel ke true, konektor tidak mencoba untuk mengambil metadata tambahan dari. AWS Glue

  • glue_catalog - (Opsional) Gunakan opsi ini untuk menentukan katalog lintas akun. AWS Glue Secara default, konektor mencoba untuk mendapatkan metadata dari akunnya sendiri AWS Glue .

  • disable_projection_and_casing - (Opsional) Menonaktifkan proyeksi dan casing. Gunakan jika Anda ingin menanyakan tabel DynamoDB yang memiliki casing di nama kolom mereka dan Anda tidak ingin menentukan properti di columnMapping meja Anda. AWS Glue

    disable_projection_and_casingParameter menggunakan nilai-nilai berikut untuk menentukan perilaku pemetaan casing dan kolom:

    • auto - Menonaktifkan proyeksi dan casing ketika tipe yang sebelumnya tidak didukung terdeteksi dan pemetaan nama kolom tidak diatur di atas meja. Ini adalah pengaturan default.

    • selalu — Menonaktifkan proyeksi dan casing tanpa syarat. Ini berguna ketika Anda memiliki casing di nama kolom DynamoDB Anda tetapi tidak ingin menentukan pemetaan nama kolom apa pun.

    Saat menggunakan disable_projection_and_casing parameter, ingatlah poin-poin berikut:

    • Penggunaan parameter dapat menghasilkan penggunaan bandwidth yang lebih tinggi. Selain itu, jika fungsi Lambda Anda tidak sama Wilayah AWS dengan sumber data Anda, Anda akan dikenakan biaya transfer AWS lintas wilayah standar yang lebih tinggi sebagai akibat dari penggunaan bandwidth yang lebih tinggi. Untuk informasi selengkapnya tentang biaya transfer lintas wilayah, lihat Biaya Transfer AWS Data untuk Arsitektur Server dan Tanpa Server di Blog Jaringan Mitra. AWS

    • Karena jumlah byte yang lebih besar ditransfer dan karena jumlah byte yang lebih besar memerlukan waktu deserialisasi yang lebih tinggi, latensi keseluruhan dapat meningkat.

Menyiapkan database dan tabel di AWS Glue

Karena kemampuan inferensi skema bawaan konektor terbatas, Anda mungkin ingin menggunakannya AWS Glue untuk metadata. Untuk melakukan ini, Anda harus memiliki database dan tabel di AWS Glue. Untuk mengaktifkannya untuk digunakan dengan DynamoDB, Anda harus mengedit properti mereka.

Untuk mengedit properti database di 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, perluas Katalog Data, lalu pilih Database.

    Pada halaman Database, Anda dapat mengedit database yang ada, atau memilih Tambah database untuk membuatnya.

  3. Dalam daftar database, pilih tautan untuk database yang ingin Anda edit.

  4. Pilih Edit.

  5. Pada halaman Perbarui database, di bawah pengaturan Database, untuk Lokasi, tambahkan stringdynamo-db-flag. Kata kunci ini menunjukkan bahwa database berisi tabel yang digunakan konektor DynamoDB Athena untuk metadata tambahan dan diperlukan untuk database selain. AWS Glue default dynamo-db-flagProperti ini berguna untuk menyaring database dalam akun dengan banyak database.

  6. Pilih Perbarui Database.

Untuk mengedit properti tabel di 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, perluas Katalog Data, lalu pilih Tabel.

  3. Pada halaman Tabel, dalam daftar tabel, pilih nama tertaut tabel yang ingin Anda edit.

  4. Pilih Tindakan, Edit tabel.

  5. Pada halaman Edit tabel, di bagian properti Tabel, tambahkan properti tabel berikut sesuai kebutuhan. Jika Anda menggunakan crawler AWS Glue DynamoDB, properti ini diatur secara otomatis.

    • dynamodb - String yang menunjukkan ke konektor DynamoDB Athena bahwa tabel dapat digunakan untuk metadata tambahan. Masukkan dynamodb string dalam properti tabel di bawah bidang yang disebut klasifikasi (sama persis).

      catatan

      Halaman Setel properti tabel yang merupakan bagian dari proses pembuatan tabel di AWS Glue konsol memiliki bagian Format data dengan bidang Klasifikasi. Anda tidak dapat masuk atau memilih dynamodb di sini. Sebagai gantinya, setelah Anda membuat tabel, ikuti langkah-langkah untuk mengedit tabel dan untuk memasukkan classification dan dynamodb sebagai pasangan kunci-nilai di bagian Properti tabel.

    • sourceTable- Properti tabel opsional yang mendefinisikan nama tabel sumber di DynamoDB. Gunakan ini jika aturan penamaan AWS Glue tabel mencegah Anda membuat AWS Glue tabel dengan nama yang sama dengan tabel DynamoDB Anda. Misalnya, huruf kapital tidak diizinkan dalam nama AWS Glue tabel, tetapi mereka diizinkan dalam nama tabel DynamoDB.

    • columnMapping- Properti tabel opsional yang mendefinisikan pemetaan nama kolom. Gunakan ini jika aturan penamaan AWS Glue kolom mencegah Anda membuat AWS Glue tabel dengan nama kolom yang sama dengan tabel DynamoDB Anda. Misalnya, huruf kapital tidak diizinkan dalam nama AWS Glue kolom tetapi diizinkan dalam nama kolom DynamoDB. Nilai properti diharapkan dalam format Col1 = Col1, Col2 = Col2. Perhatikan bahwa pemetaan kolom hanya berlaku untuk nama kolom tingkat atas dan bukan untuk bidang bersarang.

    • defaultTimeZone- Properti tabel opsional yang diterapkan ke date atau datetime nilai yang tidak memiliki zona waktu eksplisit. Menyetel nilai ini adalah praktik yang baik untuk menghindari perbedaan antara zona waktu default sumber data dan zona waktu sesi Athena.

    • datetimeFormatMapping- Properti tabel opsional yang menentukan date atau datetime format yang akan digunakan saat mengurai data dari kolom AWS Glue date atau tipe timestamp data. Jika properti ini tidak ditentukan, konektor mencoba menyimpulkan format ISO -8601. Jika konektor tidak dapat menyimpulkan date atau datetime memformat atau mengurai string mentah, maka nilainya dihilangkan dari hasilnya.

      datetimeFormatMappingNilainya harus dalam formatcol1=someformat1,col2=someformat2. Berikut ini adalah beberapa contoh format:

      yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ss

      Jika kolom Anda memiliki date atau datetime nilai tanpa zona waktu dan Anda ingin menggunakan kolom dalam WHERE klausa, atur datetimeFormatMapping properti untuk kolom tersebut.

  6. Jika Anda menentukan kolom secara manual, pastikan Anda menggunakan tipe data yang sesuai. Jika Anda menggunakan crawler, validasi kolom dan jenis yang ditemukan crawler.

  7. Pilih Simpan.

Izin yang Diperlukan

Untuk detail selengkapnya tentang IAM kebijakan yang diperlukan konektor ini, tinjau Policies bagian file athena-dynamodb.yaml. Daftar berikut merangkum izin yang diperlukan.

  • Akses tulis Amazon S3 - Konektor memerlukan akses tulis ke lokasi di Amazon S3 untuk menumpahkan hasil dari kueri besar.

  • Athena GetQueryExecution — Konektor menggunakan izin ini untuk gagal cepat ketika kueri Athena hulu telah dihentikan.

  • AWS Glue Data Catalog- Konektor DynamoDB memerlukan akses baca saja ke untuk mendapatkan informasi AWS Glue Data Catalog skema.

  • CloudWatch Log — Konektor memerlukan akses ke CloudWatch Log untuk menyimpan log.

  • Akses baca DynamoDB — Konektor menggunakan DescribeTableListSchemas,,, ListTablesQuery, dan operasi. Scan API

Kinerja

Konektor DynamoDB Athena mendukung pemindaian paralel dan mencoba menekan predikat sebagai bagian dari kueri DynamoDB-nya. Predikat kunci hash dengan nilai X yang berbeda menghasilkan panggilan X kueri ke DynamoDB. Semua skenario predikat lainnya menghasilkan Y jumlah panggilan pemindaian, di mana Y ditentukan secara heuristik berdasarkan ukuran tabel Anda dan throughput yang disediakan. Namun, memilih subset kolom terkadang menghasilkan runtime eksekusi kueri yang lebih lama.

LIMITklausa dan predikat sederhana ditekan ke bawah dan dapat mengurangi jumlah data yang dipindai dan akan menyebabkan penurunan waktu eksekusi kueri.

LIMITklausa

LIMIT NPernyataan mengurangi data yang dipindai oleh kueri. Dengan LIMIT N pushdown, konektor hanya mengembalikan N baris ke Athena.

Predikat

Predikat adalah ekspresi dalam WHERE klausa SQL kueri yang mengevaluasi nilai Boolean dan memfilter baris berdasarkan beberapa kondisi. Untuk meningkatkan fungsionalitas, dan untuk mengurangi jumlah data yang dipindai, konektor DynamoDB Athena dapat menggabungkan ekspresi ini dan mendorongnya langsung ke DynamoDB.

Operator konektor DynamoDB Athena berikut mendukung pushdown predikat:

  • Boolean: AND

  • Kesetaraan:EQUAL, NOT _, _ EQUALTHAN, LESS _ LESS THAN _OR_, _EQUAL, _ GREATER _OR_THAN, GREATER IS_ THAN EQUAL NULL

Contoh pushdown gabungan

Untuk kemampuan kueri yang ditingkatkan, gabungkan jenis pushdown, seperti pada contoh berikut:

SELECT * FROM my_table WHERE col_a > 10 and col_b < 10 LIMIT 10

Untuk artikel tentang penggunaan pushdown predikat untuk meningkatkan kinerja dalam kueri federasi, termasuk DynamoDB, lihat Meningkatkan kueri federasi dengan pushdown predikat di Amazon Athena di Blog Big Data.AWS

Kueri passthrough

Konektor DynamoDB mendukung kueri passthrough dan menggunakan sintaks PartiQL. Operasi GetItemAPIDynamoDB tidak didukung. Untuk informasi tentang menanyakan DynamoDB menggunakan PartiQL, lihat pernyataan pilih PartiQL untuk DynamoDB di Panduan Pengembang Amazon DynamoDB.

Untuk menggunakan kueri passthrough dengan DynamoDB, gunakan sintaks berikut:

SELECT * FROM TABLE( system.query( query => 'query_string' ))

Contoh kueri passthrough DynamoDB berikut menggunakan PartiQL untuk mengembalikan daftar perangkat Fire TV Stick yang memiliki properti selambat-lambatnya 12/24/22. DateWatched

SELECT * FROM TABLE( system.query( query => 'SELECT Devices FROM WatchList WHERE Devices.FireStick.DateWatched[0] > '12/24/22'' ))

Pemecahan Masalah

Beberapa filter pada kolom kunci sortir

Pesan kesalahan: hanya KeyConditionExpressions boleh berisi satu kondisi per kunci

Penyebab: Masalah ini dapat terjadi di mesin Athena versi 3 dalam kueri yang memiliki filter batas bawah dan atas pada kolom kunci sortir DynamoDB. Karena DynamoDB tidak mendukung lebih dari satu kondisi filter pada kunci pengurutan, kesalahan muncul ketika konektor mencoba menekan kueri yang kedua kondisi diterapkan.

Solusi: Perbarui konektor ke versi 2023.11.1 atau yang lebih baru. Untuk petunjuk tentang memperbarui konektor, lihatPerbarui konektor sumber data.

Biaya

Biaya untuk penggunaan konektor tergantung pada AWS sumber daya yang mendasari yang digunakan. Karena kueri yang menggunakan pemindaian dapat menggunakan sejumlah besar unit kapasitas baca (RCUs), pertimbangkan informasi untuk harga Amazon DynamoDB dengan cermat.

Sumber daya tambahan