

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

# Konektor Amazon Athena DocumentDB
<a name="connectors-docdb"></a>

Konektor Amazon Athena DocumentDB memungkinkan Athena berkomunikasi dengan instans DocumentDB Anda sehingga Anda dapat menanyakan data DocumentDB Anda dengan SQL. Konektor juga bekerja dengan endpoint yang kompatibel dengan MongoDB.

Tidak seperti penyimpanan data relasional tradisional, koleksi Amazon DocumentDB tidak memiliki skema yang ditetapkan. DocumentDB tidak memiliki toko metadata. Setiap entri dalam koleksi DocumentDB dapat memiliki bidang dan tipe data yang berbeda.

Konektor DocumentDB mendukung dua mekanisme untuk menghasilkan informasi skema tabel: inferensi skema dasar dan metadata. AWS Glue Data Catalog 

Inferensi skema adalah default. Opsi ini memindai sejumlah kecil dokumen dalam koleksi Anda, membentuk gabungan semua bidang, dan memaksa bidang yang memiliki tipe data yang tidak tumpang tindih. Opsi ini berfungsi dengan baik untuk koleksi yang sebagian besar memiliki entri seragam.

Untuk koleksi dengan variasi tipe data yang lebih besar, konektor mendukung pengambilan metadata dari file. AWS Glue Data Catalog Jika konektor melihat AWS Glue database dan tabel yang cocok dengan database DocumentDB dan nama koleksi Anda, ia mendapatkan informasi skema dari tabel yang sesuai. AWS Glue Saat Anda membuat AWS Glue tabel, kami sarankan Anda menjadikannya superset dari semua bidang yang mungkin ingin Anda akses dari koleksi DocumentDB Anda. 

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

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.

## Prasyarat
<a name="connectors-docdb-prerequisites"></a>
+ Menyebarkan konektor ke Anda Akun AWS menggunakan konsol Athena atau. AWS Serverless Application Repository Untuk informasi selengkapnya, lihat [Buat koneksi sumber data](connect-to-a-data-source.md) atau [Gunakan AWS Serverless Application Repository untuk menyebarkan konektor sumber data](connect-data-source-serverless-app-repo.md).

## Parameter
<a name="connectors-docdb-parameters"></a>

Gunakan parameter di bagian ini untuk mengkonfigurasi konektor DocumentDB.

**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](https://docs.aws.amazon.com/glue/latest/dg/connection-properties.html) yang sesuai. Mulai 3 Desember 2024, gunakan parameter di bawah ini hanya jika Anda [menggunakan konektor sumber data Athena versi sebelumnya secara manual](connect-data-source-serverless-app-repo.md).

### Koneksi Glue (disarankan)
<a name="connectors-docdb-gc"></a>

Kami menyarankan Anda mengonfigurasi konektor DocumentDB dengan menggunakan objek koneksi Glue. Untuk melakukan ini, atur variabel `glue_connection` lingkungan dari konektor DocumentDB Lambda ke nama koneksi Glue yang akan digunakan.

**Properti koneksi lem**

Gunakan perintah berikut untuk mendapatkan skema untuk objek koneksi Glue. Skema ini berisi semua parameter yang dapat Anda gunakan untuk mengontrol koneksi Anda.

```
aws glue describe-connection-type --connection-type DOCUMENTDB
```

**Properti lingkungan Lambda**
+ **glue\$1connection** - Menentukan nama koneksi Glue yang terkait dengan konektor federasi.

**catatan**  
Semua konektor yang menggunakan koneksi Glue harus digunakan AWS Secrets Manager untuk menyimpan kredensil.
Konektor DocumentDB yang dibuat menggunakan koneksi Glue tidak mendukung penggunaan handler multiplexing.
Konektor DocumentDB yang dibuat menggunakan koneksi Glue hanya mendukung 2. `ConnectionSchemaVersion`

### Koneksi warisan
<a name="connectors-docdb-legacy"></a>
+ **spill\$1bucket** - Menentukan bucket Amazon S3 untuk data yang melebihi batas fungsi Lambda.
+ **spill\$1prefix** — (Opsional) Default ke subfolder dalam nama yang ditentukan. `spill_bucket` `athena-federation-spill` Kami menyarankan Anda mengonfigurasi [siklus hidup penyimpanan](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) Amazon S3 di lokasi ini untuk menghapus tumpahan yang lebih lama dari jumlah hari atau jam yang telah ditentukan sebelumnya.
+ **spill\$1put\$1request\$1headers** — (Opsional) Peta header permintaan dan nilai yang disandikan JSON untuk permintaan Amazon S3 yang digunakan untuk menumpahkan (misalnya,). `putObject` `{"x-amz-server-side-encryption" : "AES256"}` Untuk kemungkinan header lainnya, lihat [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)di *Referensi API Amazon Simple Storage Service*.
+ **kms\$1key\$1id** — (Opsional) Secara default, data apa pun yang tumpah ke Amazon S3 dienkripsi menggunakan mode enkripsi yang diautentikasi AES-GCM dan kunci yang dihasilkan secara acak. Agar fungsi Lambda Anda menggunakan kunci enkripsi yang lebih kuat yang dihasilkan oleh KMS seperti`a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`, Anda dapat menentukan ID kunci KMS.
+ **disable\$1spill\$1encryption** — (Opsional) Ketika diatur ke, menonaktifkan enkripsi tumpahan. `True` Defaultnya `False` sehingga data yang tumpah ke S3 dienkripsi menggunakan AES-GCM — baik menggunakan kunci yang dihasilkan secara acak atau KMS untuk menghasilkan kunci. [Menonaktifkan enkripsi tumpahan dapat meningkatkan kinerja, terutama jika lokasi tumpahan Anda menggunakan enkripsi sisi server.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)
+ **disable\$1glue** — (Opsional) Jika ada dan disetel ke true, konektor tidak mencoba untuk mengambil metadata tambahan dari. AWS Glue
+ **glue\$1catalog** [- (Opsional) Gunakan opsi ini untuk menentukan katalog lintas akun. AWS Glue](data-sources-glue-cross-account.md) Secara default, konektor mencoba untuk mendapatkan metadata dari akunnya sendiri AWS Glue .
+ **default\$1docdb** - Jika ada, menentukan string koneksi DocumentDB untuk digunakan ketika tidak ada variabel lingkungan khusus katalog ada.
+ **disable\$1projection\$1and\$1casing** - (Opsional) Menonaktifkan proyeksi dan casing. Gunakan jika Anda ingin menanyakan tabel Amazon DocumentDB yang menggunakan nama kolom peka huruf besar/kecil. `disable_projection_and_casing`Parameter menggunakan nilai-nilai berikut untuk menentukan perilaku pemetaan casing dan kolom: 
  + **false** — Ini adalah pengaturan default. Proyeksi diaktifkan, dan konektor mengharapkan semua nama kolom berada dalam huruf kecil. 
  + **benar** - Menonaktifkan proyeksi dan casing. 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](https://aws.amazon.com/blogs/apn/aws-data-transfer-charges-for-server-and-serverless-architectures/) 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. 
+ **enable\$1case\$1insensitive\$1match** — (Opsional) Saat, melakukan pencarian yang tidak peka huruf besar/kecil terhadap skema dan nama tabel di `true` Amazon DocumentDB. Nilai default-nya `false`. Gunakan jika kueri Anda berisi skema huruf besar atau nama tabel.

#### Menentukan string koneksi
<a name="connectors-docdb-specifying-connection-strings"></a>

Anda dapat memberikan satu atau beberapa properti yang menentukan detail koneksi DocumentDB untuk instance DocumentDB yang Anda gunakan dengan konektor. Untuk melakukan ini, tetapkan variabel lingkungan Lambda yang sesuai dengan nama katalog yang ingin Anda gunakan di Athena. Misalnya, Anda ingin menggunakan kueri berikut untuk menanyakan dua instance DocumentDB yang berbeda dari Athena:

```
SELECT * FROM "docdb_instance_1".database.table
```

```
SELECT * FROM "docdb_instance_2".database.table
```

Sebelum Anda dapat menggunakan dua pernyataan SQL ini, Anda harus menambahkan dua variabel lingkungan ke fungsi `docdb_instance_1` Lambda Anda: dan. `docdb_instance_2` Nilai untuk masing-masing harus berupa string koneksi DocumentDB dalam format berikut:

```
mongodb://:@:/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0      
```

##### Menggunakan rahasia
<a name="connectors-docdb-using-secrets"></a>

Anda dapat secara opsional menggunakan AWS Secrets Manager sebagian atau seluruh nilai untuk detail string koneksi Anda. [Untuk menggunakan fitur Kueri Federasi Athena dengan Secrets Manager, VPC yang terhubung ke fungsi Lambda Anda harus memiliki [akses internet atau](https://aws.amazon.com/premiumsupport/knowledge-center/internet-access-lambda-function/) titik akhir VPC untuk terhubung ke Secrets Manager.](https://docs.aws.amazon.com/secretsmanager/latest/userguide/vpc-endpoint-overview.html)

Jika Anda menggunakan sintaks `${my_secret}` untuk memasukkan nama rahasia dari Secrets Manager di string koneksi Anda, konektor akan menggantikan `${my_secret}` dengan nilai teks biasa dari Secrets Manager persis. Rahasia harus disimpan sebagai rahasia teks biasa dengan nilai`<username>:<password>`. Rahasia yang disimpan sebagai tidak `{username:<username>,password:<password>}` akan diteruskan ke string koneksi dengan benar.

Rahasia juga dapat digunakan untuk seluruh string koneksi sepenuhnya, dan nama pengguna dan kata sandi dapat didefinisikan dalam rahasia.

Misalnya, Anda menyetel variabel lingkungan Lambda `docdb_instance_1` ke nilai berikut:

```
mongodb://${docdb_instance_1_creds}@myhostname.com:123/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0         
```

Athena Query Federation SDK secara otomatis mencoba untuk mengambil rahasia bernama dari Secrets `docdb_instance_1_creds` Manager dan menyuntikkan nilai tersebut sebagai pengganti. `${docdb_instance_1_creds}` Setiap bagian dari string koneksi yang dilampirkan oleh kombinasi `${ }` karakter ditafsirkan sebagai rahasia dari Secrets Manager. Jika Anda menentukan nama rahasia yang tidak dapat ditemukan konektor di Secrets Manager, konektor tidak menggantikan teks.

## Mengambil metadata tambahan
<a name="supplemental-metadata"></a>

Untuk mengambil metadata tambahan, ikuti langkah-langkah berikut untuk mengonfigurasi database dan tabel Glue Anda.

### Siapkan database Glue
<a name="setup-glue-database"></a>

1. Buat database Glue dengan nama yang sama dengan koleksi DocumentDB Anda.

1. Di bidang URI Lokasi, masukkan`docdb-metadata-flag`.

### Konfigurasikan tabel Glue
<a name="setup-glue-table"></a>

Tambahkan parameter berikut ke tabel Glue Anda:
+ `docdb-metadata-flag = true`
+ `columnMapping = apple=APPLE`

  Dalam contoh ini, `apple` mewakili nama kolom huruf kecil di Glue, dan `APPLE` mewakili nama kolom case-sensitive yang sebenarnya dalam koleksi DocumentDB Anda.

### Verifikasi pengambilan metadata
<a name="verify-metadata-retrieval"></a>

1. Jalankan kueri Anda.

1. Periksa CloudWatch log fungsi Lambda untuk pengambilan metadata yang berhasil. Pengambilan yang berhasil akan menampilkan entri log berikut:

   ```
   doGetTable: Retrieved schema for table[TableName{schemaName=test, tableName=profiles}] from AWS Glue.
   ```

**catatan**  
Jika tabel Anda sudah memiliki `columnMapping` bidang yang dikonfigurasi, Anda hanya perlu menambahkan `docdb-metadata-flag = true` parameter ke properti tabel.

## Menyiapkan database dan tabel di AWS Glue
<a name="connectors-docdb-setting-up-databases-and-tables-in-aws-glue"></a>

Karena kemampuan inferensi skema bawaan konektor memindai sejumlah dokumen terbatas dan hanya mendukung sebagian tipe data, Anda mungkin ingin menggunakan AWS Glue metadata sebagai gantinya.

Untuk mengaktifkan AWS Glue tabel untuk digunakan dengan Amazon DocumentDB, Anda harus memiliki AWS Glue database dan tabel untuk database dan koleksi DocumentDB yang ingin Anda berikan metadata tambahan.

**Untuk menggunakan AWS Glue tabel untuk metadata tambahan**

1. Gunakan AWS Glue konsol untuk membuat AWS Glue database yang memiliki nama yang sama dengan nama database Amazon DocumentDB Anda.

1. Mengatur properti URI database untuk menyertakan **docdb-metadata-flag**.

1. (Opsional) Tambahkan properti tabel **SourceTable**. Properti ini mendefinisikan nama tabel sumber di Amazon DocumentDB. Gunakan properti ini jika AWS Glue tabel Anda memiliki nama yang berbeda dari nama tabel di Amazon DocumentDB. Perbedaan aturan penamaan antara AWS Glue dan Amazon DocumentDB dapat membuat ini diperlukan. Misalnya, huruf kapital tidak diizinkan dalam nama AWS Glue tabel, tetapi mereka diizinkan dalam nama tabel Amazon DocumentDB.

1. (Opsional) Tambahkan properti tabel **ColumnMapping**. Properti ini mendefinisikan pemetaan nama kolom. Gunakan properti ini jika aturan penamaan AWS Glue kolom mencegah Anda membuat AWS Glue tabel yang memiliki nama kolom yang sama dengan yang ada di tabel Amazon DocumentDB Anda. Ini dapat berguna karena huruf kapital diizinkan dalam nama kolom Amazon DocumentDB tetapi tidak diizinkan AWS Glue dalam nama kolom.

   Nilai `columnMapping` properti diharapkan menjadi satu set pemetaan dalam format. `col1=Col1,col2=Col2`
**catatan**  
 Pemetaan kolom hanya berlaku untuk nama kolom tingkat atas dan bukan untuk bidang bersarang. 

   Setelah Anda menambahkan properti AWS Glue `columnMapping` tabel, Anda dapat menghapus variabel lingkungan `disable_projection_and_casing` Lambda.

1. Pastikan Anda menggunakan tipe data yang sesuai untuk AWS Glue yang tercantum dalam dokumen ini.

## Dukungan tipe data
<a name="connectors-docdb-data-type-support"></a>

Bagian ini mencantumkan tipe data yang digunakan konektor DocumentDB untuk inferensi skema, dan tipe data saat metadata digunakan. AWS Glue 

### Jenis data inferensi skema
<a name="connectors-docdb-schema-inference-data-types"></a>

Fitur inferensi skema konektor DocumentDB mencoba menyimpulkan nilai sebagai milik salah satu tipe data berikut. Tabel menunjukkan tipe data yang sesuai untuk Amazon DocumentDB, Java, dan Apache Arrow.


****  

| Panah Apache | Java atau DocDB | 
| --- | --- | 
| VARCHAR | String | 
| INT | Bilangan Bulat | 
| BIGINT | Panjang | 
| BIT | Boolean | 
| FLOAT4 | Desimal | 
| FLOAT8 | Ganda | 
| STEMPEL WAKTU | Date | 
| VARCHAR | ObjectId | 
| DAFTAR | Daftar | 
| STRUCT | Dokumen | 

### AWS Glue tipe data
<a name="connectors-docdb-glue-data-types"></a>

Jika Anda menggunakan AWS Glue metadata tambahan, Anda dapat mengonfigurasi tipe data berikut. Tabel menunjukkan tipe data yang sesuai untuk AWS Glue dan Apache Arrow.


****  

| AWS Glue | Panah Apache | 
| --- | --- | 
| int | INT | 
| bigint | BIGINT | 
| double | FLOAT8 | 
| float | FLOAT4 | 
| boolean | BIT | 
| biner | VARBINARY | 
| string | VARCHAR | 
| Daftar | DAFTAR | 
| Struct | STRUCT | 

## Izin yang Diperlukan
<a name="connectors-docdb-required-permissions"></a>

Untuk detail lengkap tentang kebijakan IAM yang diperlukan konektor ini, tinjau `Policies` bagian file [athena-docdb.yaml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-docdb/athena-docdb.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 DocumentDB membutuhkan akses baca saja ke untuk mendapatkan informasi AWS Glue Data Catalog skema.
+ **CloudWatch Log** — Konektor memerlukan akses ke CloudWatch Log untuk menyimpan log.
+ **AWS Secrets Manager akses baca** - Jika Anda memilih untuk menyimpan detail titik akhir DocumentDB di Secrets Manager, Anda harus memberikan akses konektor ke rahasia tersebut.
+ **Akses VPC** — Konektor memerlukan kemampuan untuk memasang dan melepaskan antarmuka ke VPC Anda sehingga dapat terhubung dengannya dan berkomunikasi dengan instance DocumentDB Anda.

## Performa
<a name="connectors-docdb-performance"></a>

Konektor Athena Amazon DocumentDB saat ini tidak mendukung pemindaian paralel tetapi mencoba untuk menekan predikat sebagai bagian dari kueri DocumentDB-nya, dan predikat terhadap indeks pada koleksi DocumentDB Anda menghasilkan data yang dipindai secara signifikan lebih sedikit.

Fungsi Lambda melakukan pushdown proyeksi untuk mengurangi data yang dipindai oleh kueri. Namun, memilih subset kolom terkadang menghasilkan runtime eksekusi kueri yang lebih lama. `LIMIT`klausa mengurangi jumlah data yang dipindai, tetapi jika Anda tidak memberikan predikat, Anda harus mengharapkan `SELECT` kueri dengan `LIMIT` klausa untuk memindai setidaknya 16 MB data.

## Kueri passthrough
<a name="connectors-docdb-passthrough-queries"></a>

Konektor Athena Amazon DocumentDB mendukung kueri [passthrough](federated-query-passthrough.md) dan berbasis NoSQL. Untuk informasi tentang menanyakan Amazon DocumentDB[,](https://docs.aws.amazon.com/documentdb/latest/developerguide/querying.html) lihat Menanyakan di Panduan *Pengembang Amazon* DocumentDB.

Untuk menggunakan kueri passthrough dengan Amazon DocumentDB, gunakan sintaks berikut:

```
SELECT * FROM TABLE(
        system.query(
            database => 'database_name',
            collection => 'collection_name',
            filter => '{query_syntax}'
        ))
```

Contoh berikut menanyakan `example` database dalam `TPCDS` koleksi, memfilter semua buku dengan judul *Bill of* Rights.

```
SELECT * FROM TABLE(
        system.query(
            database => 'example',
            collection => 'tpcds',
            filter => '{title: "Bill of Rights"}'
        ))
```

## Sumber daya tambahan
<a name="connectors-docdb-additional-resources"></a>
+ *Untuk artikel tentang penggunaan [Kueri Federasi Amazon Athena untuk menghubungkan database MongoDB ke Quick](federated-queries.md) untuk membangun dasbor dan visualisasi, lihat Memvisualisasikan data [MongoDB dari [Quick](https://aws.amazon.com/quicksight/) menggunakan Kueri Federasi Amazon Athena di Blog Big Data](https://aws.amazon.com/blogs/big-data/visualize-mongodb-data-from-amazon-quicksight-using-amazon-athena-federated-query/).AWS *
+ Untuk informasi tambahan tentang konektor ini, kunjungi [situs terkait](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-docdb) GitHub di.com.