

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
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena"></a>

*Moinul Al-Mamun, Amazon Web Services*

## Ringkasan
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-summary"></a>

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](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html). 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
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-prereqs"></a>

**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](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html)
+ Izin IAM untuk mengakses Athena dan bucket S3 yang diperlukan
+ [Konektor Amazon Athena DynamoDB](https://github.com/awslabs/aws-athena-query-federation/tree/master/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](https://aws.amazon.com/dynamodb/pricing/). 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](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/) S3.

## Arsitektur
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-architecture"></a>

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.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/e6ff94af-d208-40c7-94e4-af257755a603/images/bc8e0132-b578-463b-bf55-3c39ce359c17.png)


Diagram menunjukkan alur kerja berikut:

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

1. Athena memulai fungsi Lambda.

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

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

1. Fungsi Lambda menyimpan data di bucket S3.

**Tumpukan teknologi**
+ Amazon Athena
+ Amazon DynamoDB
+ Amazon S3
+ AWS Lambda

## Alat
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-tools"></a>
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) adalah layanan kueri interaktif yang membantu Anda menganalisis data secara langsung di Amazon S3 dengan menggunakan SQL standar.
+ [Amazon Athena DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) adalah alat AWS yang memungkinkan Athena terhubung dengan DynamoDB dan mengakses tabel Anda dengan menggunakan kueri SQL.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) adalah layanan database NoSQL yang dikelola sepenuhnya yang menyediakan kinerja yang cepat, dapat diprediksi, dan dapat diskalakan.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-epics"></a>

### Buat contoh tabel DynamoDB
<a name="create-sample-dynamodb-tables"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Buat tabel sampel pertama.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Masukkan data sampel ke dalam tabel pertama. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK1": "1234",<br />  "SK1": "info",<br />  "Salary": "5000"<br /> }</pre><pre>{<br />  "PK1": "1235",<br />  "SK1": "info",<br />  "Salary": "5200"<br /> }</pre> | Developer | 
| Buat tabel sampel kedua.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Masukkan data sampel ke dalam tabel kedua. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK2": "1234",<br /> "SK2": "bonus",<br /> "Bonus": "500"<br />}</pre><pre>{<br />  "PK2": "1235",<br /> "SK2": "bonus",<br /> "Bonus": "1000"<br />}</pre> | Developer | 

### Buat sumber data di Athena untuk DynamoDB
<a name="create-a-data-source-in-athena-for-dynamodb"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Siapkan konektor sumber data. | Buat sumber data untuk DynamoDB, lalu buat fungsi Lambda untuk terhubung ke sumber data tersebut.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Developer | 
| Verifikasi bahwa fungsi Lambda dapat mengakses bucket tumpahan S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)Jika Anda mengalami kesalahan, lihat bagian *Informasi tambahan* dalam pola ini untuk panduan. | Developer | 

### Akses tabel DynamoDB dari Athena
<a name="access-dynamodb-tables-from-athena"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Kueri tabel DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>SELECT pk1, salary, bonus FROM dydbtable1 t1<br /> JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;</pre> | Developer | 

## Sumber daya terkait
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-resources"></a>
+ Konektor [DynamoDB Amazon Athena (AWS Labs)](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)
+ [Kueri sumber data apa pun dengan kueri federasi baru Amazon Athena](https://aws.amazon.com/blogs/big-data/query-any-data-source-with-amazon-athenas-new-federated-query/) (AWS Big Data Blog)
+ [Referensi versi mesin Athena (Panduan](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html) Pengguna Athena)
+ [Sederhanakan ekstraksi dan analisis data Amazon DynamoDB dengan menggunakan AWS Glue dan Amazon Athena (AWS](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/) Database Blog)

## Informasi tambahan
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-additional"></a>

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`