Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pembuatan skema otomatis JDBC
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.
Topik
Batasan pembuatan skema
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
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
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
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
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
Diagram berikut menunjukkan cara di mana konflik tipe data skalar-skalar diselesaikan.
Scalar-complex jenis promosi konflik
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
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
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
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 |