

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

# Pembuatan skema otomatis JDBC
<a name="connect-jdbc-autoschemagen"></a>

Amazon DocumentDB adalah database dokumen dan oleh karena itu tidak memiliki konsep tabel dan skema. Namun, alat BI seperti Tableau akan mengharapkan database yang dihubungkan untuk menyajikan skema. Secara khusus, ketika koneksi driver JDBC perlu mendapatkan skema untuk koleksi dalam database, itu akan melakukan polling untuk semua koleksi dalam database. Driver akan menentukan apakah versi cache dari skema untuk koleksi itu sudah ada. Jika versi cache tidak ada, itu akan mengambil sampel koleksi untuk dokumen dan membuat skema berdasarkan perilaku berikut. 

**Topics**
+ [Batasan pembuatan skema](#connect-jdbc-autoschemagen-limits)
+ [Opsi metode pemindaian](#connect-jdbc-autoschemagen-scanningoptions)
+ [Jenis data Amazon DocumentDB](#connect-jdbc-autoschemagen-datatypes)
+ [Memetakan bidang dokumen skalar](#connect-jdbc-autoschemagen-scalarfields)
+ [Penanganan tipe data objek dan array](#connect-jdbc-autoschemagen-objectandarray)

## Batasan pembuatan skema
<a name="connect-jdbc-autoschemagen-limits"></a>

Driver DocumentDB JDBC memberlakukan batasan panjang pengidentifikasi pada 128 karakter. Generator skema dapat memotong panjang pengidentifikasi yang dihasilkan (nama tabel dan nama kolom) untuk memastikan mereka sesuai dengan batas itu. 

## Opsi metode pemindaian
<a name="connect-jdbc-autoschemagen-scanningoptions"></a>

Perilaku pengambilan sampel dapat dimodifikasi menggunakan string koneksi atau opsi sumber data.
+ *Metode pemindaian = * <option>
  + *acak - (default) - Dokumen sampel dikembalikan dalam urutan acak. *
  + *IDForward * - Dokumen sampel dikembalikan dalam urutan id.
  + *IDReverse * - Dokumen sampel dikembalikan dalam urutan terbalik id.
  + *semua * - Sampel semua dokumen dalam koleksi.
+ *ScanLimit= * <n>- Jumlah dokumen untuk sampel. Nilai harus berupa bilangan bulat positif. Nilai defaultnya adalah * 1000*. Jika * ScanMeth * od disetel ke * semua*, opsi ini diabaikan.

## Jenis data Amazon DocumentDB
<a name="connect-jdbc-autoschemagen-datatypes"></a>

Server Amazon DocumentDB mendukung sejumlah tipe data MongoDB. Tercantum di bawah ini adalah tipe data yang didukung, dan tipe data JDBC terkait.


| Tipe Data MongoDB | Didukung di DocumentDB | Jenis Data JDBC | 
| --- | --- | --- | 
| Data Biner | Ya | VARBINARY | 
| Boolean | Ya | BOOLEAN | 
| Ganda | Ya | DOUBLE | 
| Bilangan bulat 32-bit | Ya | INTEGER | 
| Bilangan bulat 64-bit | Ya | BIGINT | 
| Tali | Ya | VARCHAR | 
| ObjectId | Ya | VARCHAR | 
| Date | Ya | TIMESTAMP | 
| Null | Ya | VARCHAR | 
| Ekspresi reguler | Ya | VARCHAR | 
| Stempel waktu | Ya | VARCHAR | 
| MinKey | Ya | VARCHAR | 
| MaxKey | Ya | VARCHAR | 
| Objek | Ya | tabel virtual | 
| Array | Ya | tabel virtual | 
| Decimal128 | Tidak | DECIMAL | 
| JavaScript | Tidak | VARCHAR | 
| JavaScript (dengan ruang lingkup) | Tidak | VARCHAR | 
| Tidak terdefinisi | Tidak | VARCHAR | 
| Simbol | Tidak | VARCHAR | 
| DBPointer (4,0 \+) | Tidak | VARCHAR | 

## Memetakan bidang dokumen skalar
<a name="connect-jdbc-autoschemagen-scalarfields"></a>

Saat memindai sampel dokumen dari koleksi, driver JDBC akan membuat satu atau lebih skema untuk mewakili sampel dalam koleksi. Secara umum, bidang skalar dalam dokumen dipetakan ke kolom dalam skema tabel. Misalnya, dalam koleksi bernama tim, dan satu dokumen`{ "_id" : "112233", "name" : "Alastair", "age": 25 }`, ini akan dipetakan ke skema:


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| team | id tim  | VARCHAR | PK | 
| team | name | VARCHAR |  | 
| team | usia | INTEGER |  | 

### Promosi konflik tipe data
<a name="connect-jdbc-autoschemagen-conflictpromo"></a>

Saat memindai dokumen sampel, ada kemungkinan bahwa tipe data untuk bidang tidak konsisten dari dokumen ke dokumen. Dalam hal ini, driver JDBC akan mempromosikan tipe data JDBC ke tipe data umum yang akan sesuai dengan semua tipe data dari dokumen sampel. 

Sebagai Contoh:

```
{
"_id" : "112233",
"name" : "Alastair", "age" : 25
}

{
"_id" : "112244",
"name" : "Benjamin",
"age" : "32"
}
```

*Bid * ang usia adalah tipe 32-bit integer di dokumen pertama tetapi string di dokumen kedua. Di sini driver JDBC akan mempromosikan tipe data JDBC ke VARCHAR untuk menangani salah satu jenis data saat ditemui.


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| team | id tim  | VARCHAR | PK | 
| team | name | VARCHAR |  | 
| team | usia | VARCHAR |  | 

### Scalar-scalar promosi konflik
<a name="connect-jdbc-autoschemagen-scalarconflictpromo"></a>

Diagram berikut menunjukkan cara di mana konflik tipe data skalar-skalar diselesaikan.

![Diagram hierarki yang menunjukkan bagaimana tipe data yang saling bertentangan akan dipromosikan ketika mereka tidak konsisten dalam dokumen.](http://docs.aws.amazon.com/id_id/documentdb/latest/devguide/images/jdbc/scalar-scalar-promotion.png)


### Scalar-complex jenis promosi konflik
<a name="connect-jdbc-autoschemagen-scalar-complex"></a>

Seperti konflik tipe skalar-skalar, bidang yang sama dalam dokumen yang berbeda dapat memiliki tipe data yang saling bertentangan antara kompleks (array dan objek) dan skalar (integer, boolean, dll.). Semua konflik ini diselesaikan (dipromosikan) ke VARCHAR untuk bidang-bidang tersebut. Dalam hal ini, data array dan objek dikembalikan sebagai representasi JSON.

Array Tertanam - Contoh Konflik Bidang String:

```
{
   "_id":"112233",
   "name":"George Jackson",
   "subscriptions":[
      "Vogue",
      "People",
      "USA Today"
   ]
}
{
   "_id":"112244",
   "name":"Joan Starr",
   "subscriptions":1
}
```

Contoh sebelumnya memetakan ke skema untuk tabel customer2: 


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| pelanggan2 | id pelanggan2  | VARCHAR | PK | 
| pelanggan2 | name | VARCHAR |  | 
| pelanggan2 | langganan | VARCHAR |  | 

dan tabel virtual customer1\_subscription:


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| pelanggan1\_langganan | id pelanggan1  | VARCHAR | PK/FK | 
| pelanggan1\_langganan | subscriptions\_index\_lvl0 | BIGINT | PK | 
| pelanggan1\_langganan | nilai | VARCHAR |  | 
| alamat pelanggan | kota | VARCHAR |  | 
| alamat pelanggan | region | VARCHAR |  | 
| alamat pelanggan | negeri | VARCHAR |  | 
| alamat pelanggan | code | VARCHAR |  | 

## Penanganan tipe data objek dan array
<a name="connect-jdbc-autoschemagen-objectandarray"></a>

Sejauh ini, kami hanya menjelaskan bagaimana tipe data skalar dipetakan. Tipe data Object dan Array (saat ini) dipetakan ke tabel virtual. Driver JDBC akan membuat tabel virtual untuk mewakili bidang objek atau array dalam dokumen. Nama tabel virtual yang dipetakan akan menggabungkan nama koleksi asli diikuti dengan nama bidang yang dipisahkan oleh karakter garis bawah (“\_”).

Kunci utama tabel dasar (“\_id”) mengambil nama baru di tabel virtual baru dan disediakan sebagai kunci asing ke tabel dasar terkait.

Untuk bidang tipe array tertanam, kolom indeks dihasilkan untuk mewakili indeks ke dalam array di setiap tingkat array.

### Contoh bidang objek tertanam
<a name="connect-jdbc-autoschemagen-embededobj"></a>

Untuk bidang objek dalam dokumen, pemetaan ke tabel virtual dibuat oleh driver JDBC.

```
{
   "Collection: customer",
   "_id":"112233",
   "name":"George Jackson",
   "address":{
      "address1":"123 Avenue Way",
      "address2":"Apt. 5",
      "city":"Hollywood",
      "region":"California",
      "country":"USA",
      "code":"90210"
   }
}
```

Contoh sebelumnya memetakan ke skema untuk tabel pelanggan: 


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| pelanggan | ID pelanggan  | VARCHAR | PK | 
| pelanggan | name | VARCHAR |  | 

dan tabel virtual customer\_address:


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| alamat pelanggan | ID pelanggan  | VARCHAR | PK/FK | 
| alamat pelanggan | alamat1 | VARCHAR |  | 
| alamat pelanggan | alamat2 | VARCHAR |  | 
| alamat pelanggan | kota | VARCHAR |  | 
| alamat pelanggan | region | VARCHAR |  | 
| alamat pelanggan | negeri | VARCHAR |  | 
| alamat pelanggan | code | VARCHAR |  | 

### Contoh bidang array tertanam
<a name="connect-jdbc-autoschemagen-embedarray"></a>

Untuk bidang array dalam dokumen, pemetaan ke tabel virtual juga dibuat oleh driver JDBC.

```
{
   "Collection: customer1",
   "_id":"112233",
   "name":"George Jackson",
   "subscriptions":[
      "Vogue",
      "People",
      "USA Today"
   ]
}
```

Contoh sebelumnya memetakan ke skema untuk tabel customer1: 


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| pelanggan1 | id pelanggan1  | VARCHAR | PK | 
| pelanggan1 | name | VARCHAR |  | 

dan tabel virtual customer1\_subscription:


| Nama Tabel | Nama kolom | Tipe data | Key | 
| --- | --- | --- | --- | 
| pelanggan1\_langganan | id pelanggan1  | VARCHAR | PK/FK | 
| pelanggan1\_langganan | subscriptions\_index\_lvl0 | BIGINT | PK | 
| pelanggan1\_langganan | nilai | VARCHAR |  | 
| alamat pelanggan | kota | VARCHAR |  | 
| alamat pelanggan | region | VARCHAR |  | 
| alamat pelanggan | negeri | VARCHAR |  | 
| alamat pelanggan | code | VARCHAR |  | 