Akses, kueri, dan gabungkan tabel Amazon DynamoDB menggunakan Athena - AWS Prescriptive Guidance

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

Akses, kueri, dan gabungkan tabel Amazon DynamoDB menggunakan Athena

Moinul Al-Mamun, Amazon Web Services

Ringkasan

Pola ini menunjukkan cara mengatur koneksi antara Amazon Athena dan Amazon DynamoDB dengan menggunakan konektor Amazon Athena DynamoDB. Konektor menggunakan fungsi AWS Lambda untuk menanyakan data di DynamoDB. Anda tidak perlu menulis kode apa pun untuk mengatur koneksi. Setelah koneksi dibuat, Anda dapat dengan cepat mengakses dan menganalisis tabel DynamoDB dengan menggunakan Athena Federated Query untuk menjalankan perintah SQL dari Athena. Anda juga dapat menggabungkan satu atau beberapa tabel DynamoDB satu sama lain atau ke sumber data lain, seperti Amazon Redshift atau Amazon Aurora.

Prasyarat dan batasan

Prasyarat

  • Akun AWS aktif dengan izin untuk mengelola tabel DynamoDB, sumber Data Athena, Lambda, dan AWS Identity and Access Management (IAM)

  • Bucket Amazon Simple Storage Service (Amazon S3) tempat Athena dapat menyimpan hasil kueri

  • Bucket S3 tempat Konektor DynamoDB Athena dapat menyimpan data dalam jangka pendek

  • Wilayah AWS yang mendukung mesin Athena versi 2

  • Izin IAM untuk mengakses Athena dan bucket S3 yang diperlukan

  • Konektor Amazon Athena DynamoDB, diinstal

Batasan

Ada biaya untuk menanyakan tabel DynamoDB. Ukuran tabel melebihi beberapa gigabyte (GBs) dapat menimbulkan biaya tinggi. Kami menyarankan Anda mempertimbangkan biaya sebelum melakukan operasi SCAN tabel penuh. Untuk informasi selengkapnya, lihat harga Amazon DynamoDB. Untuk mengurangi biaya dan mencapai kinerja tinggi, kami sarankan Anda selalu menggunakan LIMIT dalam kueri Anda (misalnya,SELECT * FROM table1 LIMIT 10). Selain itu, sebelum Anda melakukan kueri JOIN atau GROUP BY di lingkungan produksi, pertimbangkan ukuran tabel Anda. Jika tabel Anda terlalu besar, pertimbangkan opsi alternatif seperti memigrasikan tabel ke Amazon S3.

Arsitektur

Diagram berikut menunjukkan bagaimana pengguna dapat menjalankan query SQL pada tabel DynamoDB dari Athena.

Alur kerja untuk menghubungkan Athena dan DynamoDB untuk menjalankan query SQL.

Diagram menunjukkan alur kerja berikut:

  1. Untuk menanyakan tabel DynamoDB, pengguna menjalankan kueri SQL dari Athena.

  2. Athena memulai fungsi Lambda.

  3. Fungsi Lambda menanyakan data yang diminta dalam tabel DynamoDB.

  4. DynamoDB mengembalikan data yang diminta ke fungsi Lambda. Kemudian, fungsi mentransfer hasil kueri ke pengguna melalui Athena.

  5. Fungsi Lambda menyimpan data di bucket S3.

Tumpukan teknologi

  • Amazon Athena

  • Amazon DynamoDB

  • Amazon S3

  • AWS Lambda

Alat

  • Amazon Athena adalah layanan kueri interaktif yang membantu Anda menganalisis data secara langsung di Amazon S3 dengan menggunakan SQL standar.

  • Amazon Athena DynamoDB Connector adalah alat AWS yang memungkinkan Athena terhubung dengan DynamoDB dan mengakses tabel Anda dengan menggunakan kueri SQL.

  • Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan dapat diskalakan.

  • AWS Lambda adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buat tabel sampel pertama.

  1. Masuk ke AWS Management Console dan buka konsol DynamoDB.

  2. Pilih Buat tabel.

  3. Untuk nama Tabel, masukkan dydbtable1.

  4. Untuk kunci Partisi, masukkan PK1.

  5. Untuk tombol Sortir, masukkan SK1.

  6. Di bagian Pengaturan tabel, pilih Sesuaikan pengaturan.

  7. Di bagian kelas Tabel, pilih DynamoDB Standard.

  8. Di bagian Pengaturan kapasitas baca/tulis, untuk mode Kapasitas, pilih Sesuai permintaan.

  9. Di bagian Enkripsi saat istirahat, pilih Dimiliki oleh Amazon DynamoDB.

  10. Pilih Buat tabel.

Developer

Masukkan data sampel ke dalam tabel pertama.

  1. Buka Konsol DynamoDB.

  2. Di panel navigasi, pilih Tabel, lalu pilih tabel Anda di kolom Nama.

  3. Pilih Tindakan, lalu pilih Buat item.

  4. Pilih tampilan JSON.

  5. Di bilah judul editor Atribut, matikan Lihat DynamoDB JSON.

  6. Di editor Atribut, masukkan contoh data berikut satu per satu:

{ "PK1": "1234", "SK1": "info", "Salary": "5000" }
{ "PK1": "1235", "SK1": "info", "Salary": "5200" }
Developer

Buat tabel sampel kedua.

  1. Buka Konsol DynamoDB.

  2. Pilih Buat tabel.

  3. Untuk nama Tabel, masukkan dydbtable2.

  4. Untuk kunci Partisi, masukkan PK2.

  5. Untuk tombol Sortir, masukkan SK2.

  6. Di bagian Pengaturan tabel, pilih Sesuaikan pengaturan.

  7. Di bagian kelas Tabel, pilih DynamoDB Standard.

  8. Di bagian Pengaturan kapasitas baca/tulis, untuk mode Kapasitas, pilih Sesuai permintaan.

  9. Di bagian Enkripsi saat istirahat, pilih Dimiliki oleh Amazon DynamoDB.

  10. Pilih Buat tabel.

Developer

Masukkan data sampel ke dalam tabel kedua.

  1. Buka Konsol DynamoDB.

  2. Di panel navigasi, pilih Tabel, lalu pilih tabel Anda di kolom Nama.

  3. Pilih Tindakan, lalu pilih Buat item.

  4. Di bilah judul editor Atribut, matikan Lihat DynamoDB JSON.

  5. Di editor Atribut, masukkan contoh data berikut satu per satu:

{ "PK2": "1234", "SK2": "bonus", "Bonus": "500" }
{ "PK2": "1235", "SK2": "bonus", "Bonus": "1000" }
Developer
TugasDeskripsiKeterampilan yang dibutuhkan

Siapkan konektor sumber data.

Buat sumber data untuk DynamoDB, lalu buat fungsi Lambda untuk terhubung ke sumber data tersebut.

  1. Masuk ke AWS Management Console dan buka konsol Athena.

  2. Di panel navigasi, pilih Sumber data, lalu pilih Buat sumber data.

  3. Pilih sumber data Amazon DynamoDB, lalu pilih Berikutnya.

  4. Di bagian Rincian sumber data, untuk nama sumber data, masukkan TestDynamoDB.

  5. Di bagian Detail koneksi, pilih fungsi Lambda yang sudah digunakan atau pilih fungsi Buat Lambda jika Anda tidak memiliki fungsi Lambda untuk digunakan untuk pola ini. Catatan: Untuk informasi selengkapnya tentang membuat fungsi Lambda, lihat Memulai Lambda di Panduan Pengembang Lambda.

  6. (Opsional) Jika Anda memilih fungsi Create Lambda, maka Anda harus mengonfigurasi CloudFormation template AWS yang disertakan oleh aplikasi Java sebelum menerapkan tumpukan itu. Template termasuk ApplicationName, SpillBucket, AthenaCatalogName, dan pengaturan aplikasi lainnya. Catatan: Setelah Anda menerapkan aplikasi berbasis Java ini, tumpukan membuat fungsi Lambda yang memungkinkan Athena berkomunikasi dengan DynamoDB. Ini membuat tabel Anda dapat diakses melalui perintah SQL.

  7. Terapkan fungsi Lambda Anda.

  8. Pilih Berikutnya.

Developer

Verifikasi bahwa fungsi Lambda dapat mengakses bucket tumpahan S3.

  1. Buka Konsol Lambda.

  2. Di panel navigasi, pilih Fungsi, lalu pilih fungsi yang Anda buat sebelumnya.

  3. Pilih tab Konfigurasi.

  4. Di panel kiri, pilih variabel Lingkungan, dan kemudian konfirmasikan bahwa nilai untuk kuncinya adalahspill_bucket.

  5. Di panel kiri, pilih Izin, lalu di bagian Peran eksekusi, pilih peran IAM terlampir. Catatan: Anda diarahkan ke peran IAM yang dilampirkan ke fungsi Lambda Anda di konsol IAM.

  6. Konfirmasikan bahwa Anda memiliki izin menulis di spill_bucket bucket.

Jika Anda mengalami kesalahan, lihat bagian Informasi tambahan dalam pola ini untuk panduan.

Developer
TugasDeskripsiKeterampilan yang dibutuhkan

Kueri tabel DynamoDB.

  1. Masuk ke AWS Management Console dan buka konsol Athena.

  2. Di panel navigasi, pilih Sumber data, lalu pilih Buat sumber data.

  3. Di panel navigasi, pilih Editor kueri.

  4. Pada tab Editor, di bagian Data, untuk Sumber data, pilih sumber data Anda untuk Sumber data.

  5. Untuk Database, pilih database Anda.

  6. Untuk Query 1, masukkan query berikut: SELECT * FROM dydbtable1 t1;

  7. Pilih Jalankan, lalu verifikasi output dalam tabel.

  8. Untuk Query 2, masukkan query berikut: SELECT * FROM dydbtable2 t2;

  9. Pilih Jalankan, lalu verifikasi output dalam tabel.

Developer

Bergabunglah dengan dua tabel DynamoDB.

DynamoDB adalah penyimpanan data NoSQL dan tidak mendukung operasi gabungan SQL. Akibatnya, Anda harus melakukan operasi gabungan pada dua tabel DynamoDB:

  1. Pilih ikon plus untuk membuat kueri lain.

  2. Untuk Query 3, masukkan query berikut:

SELECT pk1, salary, bonus FROM dydbtable1 t1 JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;
Developer

Sumber daya terkait

Informasi tambahan

Jika Anda menjalankan kueri di Athena dengan spill_bucket dalam {bucket_name}/folder_name/ format, maka Anda dapat menerima pesan galat berikut:

"GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[arn:aws:lambda:us-east-1:xxxxxx:function:testdynamodb] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://amzn-s3-demo-bucket/athena_dynamodb_spill_data/] This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: [query-id]"

Untuk mengatasi kesalahan ini, perbarui variabel lingkungan fungsi Lambda spill_bucket ke{bucket_name_only}, lalu perbarui kebijakan IAM Lambda berikut untuk akses tulis bucket:

{ "Action": [ "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObjectVersion", "s3:PutObject", "s3:PutObjectAcl", "s3:GetLifecycleConfiguration", "s3:PutLifecycleConfiguration", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::spill_bucket", "arn:aws:s3:::spill_bucket/*" ], "Effect": "Allow" }

Atau, Anda dapat menghapus konektor sumber data Athena yang Anda buat sebelumnya, dan membuatnya kembali dengan menggunakan hanya untuk. {bucket_name} spill_bucket