Pernyataan CREATE TABLE digunakan untuk membuat tabel di LindormTable atau LindormTSDB. Pernyataan ini mendukung berbagai tipe data, seperti VARCHAR, TIMESTAMP, dan BIGINT, serta berbagai atribut tabel, seperti Waktu Hidup (TTL) data dan algoritma kompresi. Anda dapat menggabungkan atribut dan tipe data tersebut untuk merancang tabel yang paling sesuai dengan skenario bisnis Anda.
Mesin dan versi
CREATE TABLE berlaku untuk LindormTable dan LindormTSDB.
LindormTSDB mendukung sintaks CREATE TABLE standar mulai dari versi 3.4.32. Untuk melihat atau meningkatkan versi LindormTSDB, lihat Riwayat versi LindormTSDB dan Peningkatan versi minor.
Sintaks
create_table_statement ::= CREATE TABLE [ IF NOT EXISTS ] table_identifier
'('
column_definition
( ',' column_definition )*
',' PRIMARY KEY '(' primary_key ')'
( ',' {KEY|INDEX} [index_identifier]
[ USING index_method_definition ]
[ INCLUDE column_identifier ( ',' column_identifier )* ]
[ WITH index_options ]
)*
')'
[ PARTITION BY partition_definition ]
[ WITH table_options ]
column_definition ::= column_identifier data_type [ NOT NULL ]
primary_key ::= column_identifier [ ',' column_identifier (ASC|DESC)]
index_method_definition ::= { KV | SEARCH }
index_options ::= '('
option_definition (',' option_definition )*
')'
partition_definition ::= HASH '(' column_identifier (',' column_identifier )* ')'
table_options ::= '(' option_definition (',' option_definition )* ')'
option_definition ::= option_identifer '=' string_literal Perbedaan
Sintaks CREATE TABLE sangat berbeda antara LindormTable dan LindormTSDB. Tabel berikut membandingkan perbedaan tersebut.
Elemen sintaks | LindormTable | LindormTSDB |
〇 | 〇 | |
〇 | 〇 | |
〇 | 〇 | |
〇 | ✖️ | |
✖️ | 〇 | |
〇 | ✖️ |
Catatan penggunaan
Nama tabel (table_identifier)
Perhatikan persyaratan berikut untuk nama tabel:
Dapat berisi angka, huruf kapital, huruf kecil, titik (.), tanda hubung (-), dan garis bawah (_).
Tidak boleh diawali dengan titik (.) atau tanda hubung (-).
Harus terdiri dari 1 hingga 255 karakter.
Definisi kolom (column_definition)
Elemen sintaks | Wajib | Deskripsi |
Nama kolom (column_identifier) | Ya |
|
Tipe data (data_type) | Ya | Untuk informasi tentang tipe data yang didukung, lihat Tipe data. Penting Saat membuat tabel deret waktu, perhatikan hal-hal berikut jika Anda menggunakan tipe data TIMESTAMP:
|
Kendala NULL | Tidak | Menentukan apakah nilai kolom dapat bernilai NULL. Penting Lindorm SQL tidak memeriksa batasan NULL. Pemeriksaan ini dilakukan oleh mesin penyimpanan. Metode pemeriksaan batasan NULL bergantung pada aturan validasi mesin penyimpanan. Aturan ini berbeda-beda untuk mesin penyimpanan yang berbeda. Oleh karena itu, Anda mungkin tetap dapat menulis nilai NULL meskipun telah menentukan NOT NULL. Untuk memastikan data ditulis dengan benar, ikuti persyaratan berikut:
|
Kunci utama (primary_key)
Kunci primer adalah pengidentifikasi unik untuk data dalam sebuah tabel. Kunci primer terdiri dari satu atau beberapa kolom. Anda harus menentukan kunci primer (PRIMARY KEY) saat membuat tabel.
Kunci primer tidak dapat diubah setelah dibuat. Rancang kunci primer Anda dengan hati-hati.
Saat menggunakan pernyataan CREATE TABLE untuk membuat tabel, perhatikan hal-hal berikut:
Jenis mesin | Catatan penggunaan kunci primer |
LindormTable |
|
LindormTSDB |
|
Ekspresi indeks (KEY|INDEX)
Saat menggunakan pernyataan CREATE TABLE untuk membuat tabel indeks, Anda dapat menggunakan kata kunci KEY atau INDEX guna menentukan indeks yang akan dibuat.
Ekspresi indeks (KEY|INDEX) hanya didukung oleh LindormTable 2.7.7 dan versi selanjutnya serta Lindorm SQL 2.8.6.0 dan versi selanjutnya.
Untuk informasi tentang versi LindormTable dan Lindorm SQL, lihat Riwayat versi LindormTable dan Riwayat versi SQL. Jika Anda tidak dapat meningkatkan ke versi yang diperlukan melalui konsol, hubungi dukungan teknis Lindorm di DingTalk melalui s0s3eg3.
Catatan penggunaan
Jika Anda tidak secara eksplisit menentukan nama indeks, sistem akan menghasilkan nama default dengan format
NamaTabel_idx_${Nomor_Inkremen_Auto}.Saat ini, Anda hanya dapat membuat indeks sekunder dan indeks pencarian menggunakan ekspresi indeks.
Redundansi indeks sekunder:
Lindorm SQL 2.9.3.10 dan versi selanjutnya
Jika Anda membuat indeks sekunder tanpa menentukan
INCLUDE, semua kolom tidak disertakan secara default.Lindorm SQL versi sebelum 2.9.3.10
Jika Anda membuat indeks sekunder tanpa menentukan
INCLUDE, semua kolom disertakan secara default.CatatanHal ini setara dengan mengatur atribut indeks INDEX_COVERED_TYPE menjadi
COVERED_ALL_COLUMNS_IN_SCHEMA. Jika tabel merupakan tabel dinamis, hal ini setara denganCOVERED_DYNAMIC_COLUMNS.Jika Anda menentukan klausa
KEYatauINDEXsaat membuat tabel tetapi tidak secara eksplisit menentukan atribut MUTABILITY dan CONSISTENCY, tabel akan menggunakan dua nilai default berikut:CONSISTENCY = 'strong'danMUTABILITY='MUTABLE_LATEST'.Jika pernyataan CREATE TABLE mencakup ekspresi indeks, sistem akan terlebih dahulu membuat tabel, lalu membuat indeks. Jika terjadi pengecualian selama pembuatan indeks, tabel dan indeks yang telah dibuat mungkin tetap ada dan tidak dihapus atau dibersihkan secara otomatis. Anda dapat melihatnya menggunakan pernyataan seperti
SHOWdanDESCRIBE. Namun, Anda mungkin tidak dapat menulis data atau menjalankan kueri. Kami menyarankan agar Anda membersihkan tabel dan indeks yang tersisa, lalu membuatnya kembali.
Partisi (partition_definition)
Pemartisian hanya didukung oleh LindormTSDB. Pada tabel deret waktu, kolom yang digunakan untuk PARTITION BY harus berupa kolom VARCHAR dalam definisi kunci primer.
Saat membuat tabel, Anda dapat menggunakan pernyataan PARTITION BY HASH(column1, column2, ..., columnN) untuk secara eksplisit menentukan satu atau beberapa kolom sebagai dasar partisi hash. Contohnya: PARTITION BY HASH(c1, p1).
Atribut tabel (table_options)
Atribut tabel (table_options) hanya didukung oleh LindormTable. Anda dapat menggunakan kata kunci WITH untuk menambahkan atribut tabel berikut:
Opsi (option_identifer) | Tipe | Deskripsi |
COMPRESSION | STRING | Algoritma kompresi untuk tabel. Nilai yang valid adalah:
Catatan Pada versi LindormTable sebelum 2.3.4, tidak ada algoritma kompresi yang ditentukan secara default. Pada LindormTable 2.3.4 dan versi selanjutnya, algoritma ZSTD digunakan secara default. |
TTL | INT | Waktu hidup (TTL) data, dalam satuan detik (s). Catatan
|
COMPACTION_MAJOR_PERIOD | LONG | Periode sistem untuk melakukan Catatan Nilai default: Math.Min(TTL, 1728000000 ms). Jika Anda tidak mengatur TTL, nilai default parameter ini adalah 20 hari (20 × 24 × 60 × 60 × 1000 ms = 1728000000 ms). |
MUTABILITY | STRING | Berkaitan dengan indeks. Parameter ini mengklasifikasikan pola penulisan untuk tabel utama. Nilai default adalah Semua nilai yang valid tercantum di bawah ini:
Untuk informasi lebih lanjut tentang nilai-nilai tersebut, lihat Indeks sekunder asli berkinerja tinggi. Penting Nilai parameter MUTABILITY tidak dapat diubah setelah tabel indeks dibuat. Untuk menyesuaikan parameter ini, Anda harus terlebih dahulu menghapus semua tabel indeks. Kami menyarankan Anda mencadangkan data sebelum melakukan operasi ini untuk mencegah kehilangan data. |
CONSISTENCY | STRING | Atribut konsistensi tabel. Untuk instans multi-zona, parameter ini menentukan konsistensi data antara data primer dan replika. Terdapat dua tingkat berikut:
Penting Untuk instans multi-zona, jika data dibaca sebelum ditulis, seperti pada operasi peningkatan, penambahan, atau pembaruan indeks, Anda harus mengatur parameter CONSISTENCY tabel utama menjadi |
NUMREGIONS | INT | Jumlah region yang akan dibuat sebelumnya untuk tabel. |
CHS | INT | Batas pemisahan data panas dan dingin, dalam satuan detik. Catatan
|
STARTKEY dan ENDKEY | Tipe data yang sama dengan kolom pertama dalam PRIMARY KEY | Kunci awal dan akhir untuk partisi region yang dibuat sebelumnya. Catatan
|
SPLITKEYS | Tipe data yang sama dengan kolom pertama dalam PRIMARY KEY | Kunci awal untuk semua partisi yang dibagi sebelumnya pada tabel. Catatan
|
SPLITALGO | STRING | Menentukan algoritma pemisahan untuk pra-partisi. Saat ini, hanya algoritma pemisahan berikut yang didukung:
|
DYNAMIC_COLUMNS | STRING | Menentukan apakah kolom dinamis diaktifkan. Nilai yang valid:
Catatan Kolom dinamis hanya mendukung tipe Varbinary. |
VERSIONS | STRING | Jumlah versi yang disimpan untuk nilai kolom. Nilainya harus berupa bilangan bulat yang lebih besar dari atau sama dengan 1. Nilai default adalah 1, yang berarti satu versi disimpan. Lindorm mendukung penyimpanan beberapa versi nilai kolom. Untuk informasi lebih lanjut tentang manajemen data multi-versi, lihat Manajemen data multi-versi. Penting Nilai VERSIONS yang besar dapat memengaruhi kinerja kueri dan penyimpanan data. Hindari menetapkan nilai yang terlalu besar. Kami menyarankan Anda menetapkan VERSIONS menjadi 1. |
BLOB_BUCKET_NAME | STRING | Membuat bucket untuk tabel yang berisi kolom BLOB. Nilainya adalah nama bucket kustom. Nama bucket harus mengikuti aturan berikut:
Catatan
|
Versi LindormTable sebelum 2.2.16 tidak mendukung kata kunci WITH untuk mengatur atribut tabel. Anda harus membungkus nama atribut tabel dengan tanda kutip tunggal ('). Nilai atribut ditentukan berdasarkan tipenya; jika berupa string, nilai tersebut juga harus dibungkus dengan tanda kutip tunggal ('). Contohnya: CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';.
Contoh
Buat tabel
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);Verifikasi hasil
Jalankan pernyataan DESCRIBE table sensor; untuk memverifikasi bahwa tabel telah berhasil dibuat.
Buat indeks saat membuat tabel
Buat indeks sekunder saat membuat tabel.
CREATE TABLE IF NOT EXISTS sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time),
KEY (temperature, time)
);Verifikasi hasil
Jalankan pernyataan DESCRIBE table sensor; untuk memverifikasi bahwa tabel telah berhasil dibuat, lalu jalankan SHOW INDEX FROM sensor; untuk memverifikasi pembuatan indeks sekunder.
Tentukan TTL data dan algoritma kompresi
Buat tabel lebar, atur TTL data menjadi 30 hari (2.592.000 detik), dan atur algoritma kompresi menjadi ZSTD.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (COMPRESSION='ZSTD', TTL='2592000');Verifikasi hasil
Jalankan pernyataan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel telah berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel tujuan di database tujuan. Di area Current Table Details, klik View Table Properties untuk melihat nilai parameter COMPRESSION dan TTL.
Tentukan periode major compaction
Buat tabel lebar dan atur periode major compaction menjadi 10 hari (864.000.000 milidetik).
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (COMPACTION_MAJOR_PERIOD='864000000');Verifikasi hasil
Jalankan pernyataan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel telah berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel tujuan di database tujuan. Di area Current Table Details, klik View Table Properties untuk melihat nilai parameter COMPACTION_MAJOR_PERIOD.
Aktifkan kolom dinamis
Buat tabel lebar dan atur parameter DYNAMIC_COLUMNS ke TRUE untuk mendukung penulisan data kolom dinamis ke dalam tabel.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (DYNAMIC_COLUMNS='TRUE');Verifikasi hasil
Jalankan pernyataan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel telah berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel tujuan di database tujuan. Di area Current Table Details, klik View Table Properties untuk melihat nilai parameter DYNAMIC_COLUMNS.
Tentukan batas pemisahan data panas dan dingin
Buat tabel lebar dan atur batas pemisahan data panas dan dingin. Sistem akan mengarsipkan data berdasarkan batas ini.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (CHS = '86400', CHS_L2 = 'storagetype=COLD');Verifikasi hasil
Jalankan pernyataan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel telah berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel tujuan di database tujuan. Di area Current Table Details, klik View Table Properties untuk melihat nilai parameter CHS dan CHS_L2.
Atur beberapa atribut sekaligus
Buat tabel lebar dan tentukan algoritma kompresi, TTL data, serta batas pemisahan data panas dan dingin.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) WITH (
COMPRESSION='ZSTD',
CHS = '86400',
CHS_L2 = 'storagetype=COLD',
TTL = '2592000');Verifikasi hasil
Jalankan pernyataan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel telah berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel tujuan di database tujuan. Di area Current Table Details, klik View Table Properties untuk melihat nilai parameter COMPRESSION, CHS, CHS_L2, dan TTL.
Atur partisi
Buat tabel lebar dengan lima partisi yang telah ditentukan sebelumnya. Kunci awal partisi adalah 1000 dan kunci akhir adalah 9000.
CREATE TABLE sensor (
p1 INTEGER NOT NULL,
c1 INTEGER,
c2 VARCHAR,
c3 VARCHAR,
PRIMARY KEY(p1)
) WITH (NUMREGIONS='5', STARTKEY='1000', ENDKEY='9000');Verifikasi hasil
Jalankan pernyataan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel telah berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel tujuan di database tujuan. Di area Shard Details, Anda dapat melihat nilai parameter startKey dan endKey untuk setiap shard.
Tentukan kunci awal beberapa partisi
Buat tabel lebar dan tentukan sebelumnya kunci awal untuk lima partisi. Setelah tabel dibuat, tabel tersebut akan berisi enam partisi yang telah dibagi sebelumnya secara default.
CREATE TABLE sensor (
p1 INT NOT NULL,
p2 INT NOT NULL,
c1 VARCHAR,
c2 BIGINT,
PRIMARY KEY(p1, p2)
) WITH (SPLITKEYS = '100000,300000,500000,700000,900000');Verifikasi hasil
Jalankan pernyataan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel telah berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel tujuan di database tujuan. Di area Shard Details, Anda dapat melihat nilai parameter startKey dan endKey untuk setiap shard.
Tentukan kolom kunci partisi secara eksplisit
Sebagian besar skenario kueri melibatkan pengambilan data instan dari satu perangkat. Oleh karena itu, Anda dapat secara eksplisit menentukan device_id sebagai kolom kunci partisi untuk pemartisian data.
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time TIMESTAMP NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
) PARTITION BY HASH(device_id);Verifikasi hasil
Jalankan pernyataan DESCRIBE TABLE sensor; untuk memverifikasi hasilnya.