Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Amazon DocumentDB adalah database dokumen dan karena itu tidak memiliki konsep tabel dan skema. Namun, alat BI seperti Tableau akan mengharapkan database yang terhubung untuk menyajikan skema. Secara khusus, ketika koneksi driver JDBC perlu mendapatkan skema untuk koleksi dalam database, itu akan polling untuk semua koleksi dalam database. Pengemudi akan menentukan apakah versi skema yang di-cache untuk koleksi itu sudah ada. Jika versi cache tidak ada, itu akan mengambil sampel koleksi untuk dokumen dan membuat skema berdasarkan perilaku berikut.
Topik
Keterbatasan pembuatan skema
Driver DocumentDB JDBC memberlakukan batas pada 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
Perilaku pengambilan sampel dapat dimodifikasi menggunakan string koneksi atau opsi sumber data.
-
ScanMethod= <option>
-
acak - (default) - Dokumen sampel dikembalikan dalam urutan acak.
-
IDForward - Contoh dokumen dikembalikan dalam urutan id.
-
IDReverse - Contoh dokumen dikembalikan dalam urutan terbalik id.
-
semua - Sampel semua dokumen dalam koleksi.
-
-
ScanLimit= <n>- Jumlah dokumen untuk sampel. Nilai harus berupa bilangan bulat positif. Nilai default adalah 1000. Jika ScanMethod diatur ke semua, opsi ini diabaikan.
Jenis data Amazon DocumentDB
Server Amazon DocumentDB mendukung sejumlah tipe data MongoDB. Di bawah ini adalah tipe data yang didukung, dan tipe data JDBC yang terkait.
Tipe Data MongoDB | Didukung di DocumentDB | Tipe Data JDBC |
---|---|---|
Data Biner | Ya | VARBINARY |
Boolean | Ya | BOOLEAN |
Ganda | Ya | DOUBLE |
Bilangan Bulat 32-bit | Ya | INTEGER |
Integer 64-bit | Ya | BIGINT |
Tali | Ya | VARCHAR |
ObjectId | Ya | VARCHAR |
Tanggal | Ya | TIMESTAMP |
Null | Ya | VARCHAR |
Ekspresi reguler | Ya | VARCHAR |
Stempel Waktu | Ya | VARCHAR |
MinKey | Ya | VARCHAR |
MaxKey | Ya | VARCHAR |
Objek | Ya | meja virtual |
Array | Ya | meja 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
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 memetakan ke kolom dalam skema tabel. Misalnya, dalam kumpulan bernama tim, dan satu dokumen{ "_id" : "112233", "name" :
"Alastair", "age": 25 }
, ini akan dipetakan ke skema:
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
team | id tim | VARCHAR | PK |
team | name | VARCHAR | |
team | usia | INTEGER |
Promosi konflik tipe data
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"
}
Bidang usia adalah tipe 32-bit integer dalam dokumen pertama tetapi string dalam dokumen kedua. Di sini driver JDBC akan mempromosikan tipe data JDBC ke VARCHAR untuk menangani salah satu tipe data saat ditemui.
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
team | id tim | VARCHAR | PK |
team | name | VARCHAR | |
team | usia | VARCHAR |
Promosi konflik skalar-skalar
Diagram berikut menunjukkan cara konflik tipe data skalar-skalar diselesaikan.

Promosi konflik tipe skalar-kompleks
Seperti konflik tipe skalar-skalar, bidang yang sama dalam dokumen yang berbeda dapat memiliki tipe data yang bertentangan antara kompleks (array dan objek) dan skalar (integer, boolean, dll.). Semua konflik ini diselesaikan (dipromosikan) ke VARCHAR untuk bidang tersebut. Dalam hal ini, array dan data 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 di atas memetakan skema untuk tabel customer2:
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
pelanggan2 | id pelanggan2 | VARCHAR | PK |
pelanggan2 | name | VARCHAR | |
pelanggan2 | langganan | VARCHAR |
dan tabel virtual customer1_subscriptions:
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
customer1_subscriptions | id pelanggan1 | VARCHAR | PK/FK |
customer1_subscriptions | berlangganan_index_lvl0 | BIGINT | PK |
customer1_subscriptions | nilai | VARCHAR | |
customer_address | kota | VARCHAR | |
customer_address | region | VARCHAR | |
customer_address | negeri | VARCHAR | |
customer_address | code | VARCHAR |
Penanganan tipe data objek dan array
Sejauh ini, kami hanya menjelaskan bagaimana tipe data skalar dipetakan. Jenis 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
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 di atas memetakan skema untuk tabel pelanggan:
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
pelanggan | id pelanggan | VARCHAR | PK |
pelanggan | name | VARCHAR |
dan tabel virtual customer_address:
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
customer_address | id pelanggan | VARCHAR | PK/FK |
customer_address | alamat1 | VARCHAR | |
customer_address | alamat2 | VARCHAR | |
customer_address | kota | VARCHAR | |
customer_address | region | VARCHAR | |
customer_address | negeri | VARCHAR | |
customer_address | code | VARCHAR |
Contoh bidang array tertanam
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 di atas memetakan skema untuk tabel pelanggan1:
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
pelanggan1 | id pelanggan1 | VARCHAR | PK |
pelanggan1 | name | VARCHAR |
dan tabel virtual customer1_subscriptions:
Nama Tabel | Nama kolom | Tipe data | Kunci |
---|---|---|---|
customer1_subscriptions | id pelanggan1 | VARCHAR | PK/FK |
customer1_subscriptions | berlangganan_index_lvl0 | BIGINT | PK |
customer1_subscriptions | nilai | VARCHAR | |
customer_address | kota | VARCHAR | |
customer_address | region | VARCHAR | |
customer_address | negeri | VARCHAR | |
customer_address | code | VARCHAR |