Operasi DDL Tablestore membuat pemetaan SQL untuk tabel data atau indeks pencarian yang sudah ada serta mengelola skema dan metadata tabel pemetaan.
Ikhtisar pernyataan DDL
Statement | Engine | Deskripsi |
CREATE TABLE | tablestore | Membuat pemetaan untuk tabel data. Mesin SQL secara otomatis memilih indeks optimal untuk kueri. |
CREATE TABLE | searchindex | Membuat pemetaan untuk indeks pencarian. Mesin SQL menjalankan kueri melalui indeks pencarian yang ditentukan. |
ALTER TABLE | - | Menambahkan atau menghapus kolom atribut pada tabel pemetaan yang sudah ada. |
DROP MAPPING TABLE | - | Menghapus pemetaan tanpa memengaruhi tabel data atau indeks dasarnya. |
DESCRIBE | - | Menampilkan nama bidang, tipe data, penanda kunci primer, dan nullability dari tabel pemetaan. |
SHOW INDEX | - | Menampilkan informasi indeks yang terkait dengan tabel pemetaan, termasuk indeks kunci primer, secondary, dan search index. |
SHOW TABLES | - | Menampilkan semua tabel pemetaan dalam instans saat ini. |
Berbeda dengan database relasional tradisional, CREATE TABLE di Tablestore tidak membuat tabel fisik, melainkan membuat pemetaan akses SQL untuk tabel data atau indeks pencarian yang sudah ada. DROP MAPPING TABLE hanya menghapus pemetaan tersebut tanpa memengaruhi data dasarnya.
Buat pemetaan tabel data
Pernyataan CREATE TABLE dengan ENGINE='tablestore' membuat pemetaan untuk tabel data yang sudah ada. Setelah pemetaan dibuat, mesin SQL secara otomatis memilih indeks optimal (kunci primer, indeks sekunder, atau indeks pencarian) untuk menjalankan kueri.
Sintaksis
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type [NOT NULL | NULL], ...
PRIMARY KEY(key_part [, key_part])
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';Untuk tabel dengan satu kolom kunci primer, tentukan PRIMARY KEY langsung dalam definisi kolom:
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type PRIMARY KEY,
column_name data_type [NOT NULL | NULL], ...
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency}';Parameter
Parameter | Wajib | Deskripsi |
IF NOT EXISTS | Tidak | Jika ditentukan, tidak ada error yang dikembalikan ketika tabel pemetaan sudah ada. Jika tidak ditentukan, error |
table_name | Ya | Nama tabel pemetaan. Nama ini harus sesuai dengan nama tabel data. |
column_name | Ya | Nama kolom. Nama kolom dalam SQL harus sesuai dengan nama kolom di tabel data (tidak peka huruf besar/kecil). Misalnya, jika kolom tabel data adalah |
data_type | Ya | Tipe data SQL kolom tersebut. Tipe data harus sesuai dengan tipe data kolom di tabel data. Kolom kunci primer hanya mendukung BIGINT, VARCHAR(1024), dan VARBINARY(1024). Kolom atribut juga mendukung DOUBLE, BOOL, MEDIUMTEXT, dan MEDIUMBLOB. Untuk pemetaan tipe lengkap, lihat Pemetaan tipe data dalam SQL. |
NOT NULL | NULL | Tidak | Menentukan apakah kolom mengizinkan nilai NULL. Kolom kunci primer secara default NOT NULL. Kolom atribut secara default NULL. Tentukan NOT NULL untuk kolom atribut yang harus memiliki nilai. |
PRIMARY KEY | Ya | Definisi kunci primer. Kunci primer harus sesuai dengan kolom kunci primer tabel data dalam urutan dan tipe. |
ENGINE | Tidak | Jenis mesin eksekusi. Default ke |
consistency | Tidak | Tingkat konsistensi hasil kueri. Nilai valid: |
allow_inaccurate_aggregation | Tidak | Menentukan apakah akurasi agregasi ditukar dengan performa kueri. Default ke |
Contoh
Buat pemetaan untuk exampletable dengan kolom kunci primer colvalue (VARCHAR) dan id (BIGINT), serta kolom atribut content (MEDIUMTEXT):
CREATE TABLE exampletable(colvalue VARCHAR(1024), id BIGINT, content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE='tablestore';Buat pemetaan dengan konsistensi kuat:
CREATE TABLE exampletable2(id BIGINT(20), colvalue VARCHAR(1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';Buat pemetaan indeks pencarian
Untuk membuat pemetaan untuk indeks pencarian yang sudah ada, gunakan pernyataan CREATE TABLE dengan ENGINE='searchindex'. Setelah pemetaan dibuat, mesin SQL menjalankan semua kueri melalui indeks pencarian yang ditentukan.
Kasus penggunaan
Diperlukan kemampuan indeks pencarian seperti pencarian teks lengkap, pencarian vektor, atau kueri tipe nested.
Rute kueri harus diarahkan ke indeks pencarian tertentu, bukan bergantung pada pemilihan indeks otomatis oleh mesin SQL.
Sintaksis
CREATE TABLE [IF NOT EXISTS] user_defined_name(
column_name data_type [, column_name data_type]
)
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name": index_name, "table_name": table_name}';Parameter
Parameter | Wajib | Deskripsi |
IF NOT EXISTS | Tidak | Jika ditentukan, tidak ada error yang dikembalikan ketika tabel pemetaan sudah ada. |
user_defined_name | Ya | Nama kustom tabel pemetaan. Nama ini tidak perlu sesuai dengan nama tabel data atau indeks. |
column_name | Ya | Nama kolom. Definisi kunci primer tidak diperlukan. Tabel pemetaan indeks pencarian tidak mendukung tipe VARCHAR. Gunakan MEDIUMTEXT untuk kolom string. |
index_name | Ya | Nama indeks pencarian. Ditentukan dalam ENGINE_ATTRIBUTE. Indeks tersebut harus sudah ada. |
table_name | Ya | Nama tabel data tempat indeks pencarian tersebut berada. Ditentukan dalam ENGINE_ATTRIBUTE. |
Contoh
Buat tabel pemetaan search_exampletable1 untuk indeks pencarian exampletable1_index pada tabel data exampletable1:
CREATE TABLE search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';Gunakan IF NOT EXISTS untuk menghindari error jika pemetaan sudah ada:
CREATE TABLE IF NOT EXISTS search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';Perbarui kolom tabel pemetaan
Pernyataan ALTER TABLE menambahkan atau menghapus kolom atribut pada tabel pemetaan yang sudah ada.
Hanya tabel pemetaan yang dibuat dengan pernyataan
CREATE TABLEyang mendukungALTER TABLE. Tabel pemetaan yang terikat otomatis oleh pernyataan sepertiDESCRIBEtidak mendukung operasi ini.Setiap pernyataan hanya menambahkan atau menghapus satu kolom. Untuk memodifikasi beberapa kolom, jalankan pernyataan tersebut beberapa kali.
ALTER TABLEhanya memperbarui skema tabel pemetaan dan tidak memengaruhi struktur penyimpanan tabel data.Kolom kunci primer tidak dapat ditambahkan atau dihapus.
Setelah menjalankan pernyataan ini, mesin SQL melakukan refresh secara asinkron dan membutuhkan waktu hingga 30 detik untuk selesai. Kueri selama proses refresh mungkin tidak mengembalikan kolom baru.
Sintaksis
ALTER TABLE table_name option column_name [data_type];Parameter
Parameter | Wajib | Deskripsi |
table_name | Ya | Nama tabel pemetaan. |
option | Ya | Jenis operasi: |
column_name | Ya | Nama kolom. Saat menambahkan kolom, nama tersebut tidak boleh sama dengan nama kolom yang sudah ada. Aturan penulisan huruf mengikuti aturan yang sama seperti pada |
data_type | Hanya untuk | Tipe data SQL kolom tersebut. Tipe data harus sesuai dengan kolom yang bersesuaian di tabel data. Tidak diperlukan untuk |
Contoh
Tambahkan kolom atribut ke tabel pemetaan:
ALTER TABLE exampletable ADD COLUMN colvalue BIGINT;
ALTER TABLE exampletable ADD COLUMN content MEDIUMTEXT;Hapus kolom atribut dari tabel pemetaan:
ALTER TABLE exampletable DROP COLUMN colvalue;Hapus pemetaan
Pernyataan DROP MAPPING TABLE menghapus satu atau beberapa pemetaan sekaligus.
Pernyataan ini hanya menghapus pemetaan SQL. Tabel data dasar dan datanya tidak terpengaruh.
Sintaksis
DROP MAPPING TABLE [IF EXISTS] table_name, ...;Parameter
Parameter | Wajib | Deskripsi |
table_name | Ya | Nama tabel pemetaan. Pisahkan beberapa nama dengan koma (,). |
IF EXISTS | Tidak | Jika ditentukan, tidak ada error yang dikembalikan ketika pemetaan tidak ada. Jika tidak ditentukan, error |
Contoh
DROP MAPPING TABLE IF EXISTS exampletable;Lihat detail tabel
Pernyataan DESCRIBE mengembalikan nama bidang, tipe data, nullability, dan penanda kunci primer dari tabel pemetaan.
Sintaksis
DESCRIBE table_name;Parameter
Parameter | Wajib | Deskripsi |
table_name | Ya | Nama tabel pemetaan. |
Contoh
Lihat detail tabel pemetaan exampletable:
DESCRIBE exampletable;Output berisi kolom-kolom berikut:
Kolom | Contoh | Deskripsi |
Field | pk1 | Nama bidang. |
Type | varchar(1024) | Tipe data SQL bidang tersebut. |
Null | NO | Apakah bidang tersebut mengizinkan nilai NULL. NO untuk kolom kunci primer. YES untuk kolom atribut. |
Key | PRI | Penanda kunci primer. PRI menunjukkan kolom kunci primer. Nilai kosong menunjukkan kolom atribut. |
Lihat detail indeks
Untuk melihat indeks yang terkait dengan tabel pemetaan, termasuk indeks kunci primer, indeks sekunder, dan indeks pencarian, gunakan pernyataan SHOW INDEX.
Sintaksis
SHOW INDEX {FROM | IN} table_name;Parameter
Parameter | Wajib | Deskripsi |
table_name | Ya | Nama tabel pemetaan. |
Contoh
Lihat indeks dari pemetaan tabel data (mengembalikan indeks kunci primer, sekunder, dan pencarian):
SHOW INDEX IN exampletable;Kolom Index_type menunjukkan jenis indeks: nilai kosong untuk indeks kunci primer, GlobalIndex untuk indeks sekunder, dan SearchIndex untuk indeks pencarian.
Lihat indeks dari pemetaan indeks pencarian:
SHOW INDEX IN search_exampletable1;Untuk tabel pemetaan indeks pencarian, SHOW INDEX mengembalikan _system_hidden_pk_field sebagai indeks kunci primer (kunci primer tersembunyi yang dihasilkan sistem). Setiap kolom juga menampilkan nilai Search_type seperti LONG, KEYWORD, atau TEXT.
Lihat tabel pemetaan
SHOW TABLES menampilkan semua tabel pemetaan dalam instans saat ini.
Sintaksis
SHOW TABLES;Contoh output:
+------------------------+
| Tables_in_myinstance |
+------------------------+
| exampletable |
+------------------------+
| search_exampletable1 |
+------------------------+Error umum
Mesin SQL mengembalikan error berikut ketika pernyataan DDL gagal. Gunakan pernyataan pemicu dan pesan untuk mengidentifikasi masalahnya.
Pesan error | Pernyataan | Penyebab dan solusi |
Table 'instance.table' doesn't exist |
| Tabel data tidak ada. |
Table 'instance.table' already exists |
| Pemetaan sudah ada. Untuk menekan error ini, gunakan |
Unknown mapping table 'instance.table' |
| Pemetaan tidak ada. Untuk menekan error ini, gunakan |
Unsupported alter non-mapping table |
| Tabel target bukan tabel pemetaan yang dibuat dengan |