Anda dapat menggunakan pernyataan CREATE TABLE untuk membuat tabel di LindormTable atau LindormTSDB. Pernyataan ini mendukung berbagai tipe data, seperti VARCHAR, TIMESTAMP, dan BIGINT, serta berbagai properti tabel, seperti time-to-live (TTL) dan algoritma COMPRESSION. Kombinasikan properti 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 versi 3.4.32 dan yang lebih baru. Untuk melihat atau melakukan upgrade versi mesin database Anda, lihat Panduan versi LindormTSDB dan Pembaruan 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 ]
[ ZORDER BY zorder_column_list ]
[ 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 )* ')'
zorder_column_list ::= 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 |
0 | ✔ | |
0 | ✔ | |
0 | 0 | |
0 | ✖️ | |
✖️ | 0 | |
0 | ✖️ |
Catatan penggunaan
Nama tabel (table_identifier)
Perhatikan hal-hal berikut saat menentukan nama tabel:
Nama dapat berisi angka, huruf besar, huruf kecil, titik (.), tanda hubung (-), dan garis bawah (_).
Nama tidak boleh diawali dengan titik (.) atau tanda hubung (-).
Panjang nama harus antara 1 hingga 255 karakter.
Definisi kolom (column_definition)
Elemen sintaks | Wajib | Catatan penggunaan |
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 berikut jika Anda menggunakan tipe data TIMESTAMP:
|
Kendala NULL | Tidak | Menentukan apakah nilai kolom dapat bernilai NULL. Penting Saat ini, Lindorm SQL tidak memvalidasi batasan NULL. Mesin penyimpanan yang melakukan validasi ini. Metode validasi batasan NULL bergantung pada aturan mesin penyimpanan. Mesin penyimpanan yang berbeda memiliki aturan yang berbeda. Oleh karena itu, Anda mungkin tetap dapat menulis nilai NULL meskipun telah menentukan NOT NULL. Untuk memastikan data dapat 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.
Anda tidak dapat mengubah kunci primer setelah dibuat. Rancang kunci primer Anda dengan hati-hati.
Saat menggunakan pernyataan CREATE TABLE untuk membuat tabel, perhatikan hal-hal berikut:
Jenis mesin | 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 pada LindormTable 2.7.7 atau yang lebih baru dan Lindorm SQL 2.8.6.0 atau yang lebih baru.
Untuk melihat versi LindormTable dan Lindorm SQL Anda, lihat Panduan versi LindormTable dan Panduan versi SQL. Jika Anda tidak dapat melakukan upgrade ke versi tersebut melalui Konsol, hubungi dukungan teknis Lindorm di DingTalk melalui s0s3eg3.
Catatan penggunaan
Jika Anda tidak secara eksplisit menentukan nama indeks, sistem akan menghasilkan nama secara default. Format nama indeks yang dihasilkan adalah
table_name_idx_${auto_increment_id}.Saat ini, Anda hanya dapat membuat secondary indexes dan search indexes menggunakan ekspresi indeks.
Redundansi Secondary index:
Lindorm SQL 2.9.3.10 dan versi selanjutnya
Jika Anda tidak menentukan klausa
INCLUDEsaat membuat secondary index, semua kolom tidak disimpan secara redundan secara default.Lindorm SQL versi sebelum 2.9.3.10
Jika Anda tidak menentukan klausa
INCLUDEsaat membuat secondary index, semua kolom disimpan secara redundan secara default.CatatanEfek redundansi ini sama dengan mengatur properti indeks INDEX_COVERED_TYPE menjadi
COVERED_ALL_COLUMNS_IN_SCHEMA. Jika tabel yang dibuat di sini merupakan tabel dinamis, efeknya sama dengan mengatur properti tersebut menjadiCOVERED_DYNAMIC_COLUMNS.Jika Anda menentukan klausa
KEYatauINDEXsaat membuat tabel dan tidak secara eksplisit menentukan properti MUTABILITY dan CONSISTENCY, tabel tersebut memiliki properti berikut secara default:CONSISTENCY = 'strong',MUTABILITY='MUTABLE_LATEST'.Jika pernyataan
CREATE TABLEmencakup ekspresi indeks, sistem pertama-tama akan membuat tabel lalu membuat indeks. Jika terjadi pengecualian selama pembuatan indeks, tabel dan indeks mungkin tetap dalam keadaan sisa dan tidak dihapus secara otomatis. Anda dapat melihatnya menggunakan pernyataan sepertiSHOWdanDESCRIBE, tetapi Anda mungkin tidak dapat menulis data atau melakukan kueri. Kami menyarankan agar Anda menghapus tabel dan indeks sisa tersebut lalu membuatnya kembali.
Partisi (partition_definition)
Partisi 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 guna melakukan partisi hash pada tabel. Contohnya: PARTITION BY HASH(c1, p1).
Properti tabel (table_options)
Hanya mesin tabel lebar yang mendukung properti tabel (table_options). Anda dapat menggunakan kata kunci WITH untuk menambahkan properti tabel berikut:
Opsi (option_identifer) | Tipe | Deskripsi |
COMPRESSION | STRING | Algoritma kompresi untuk tabel. Algoritma kompresi opsional adalah:
Catatan Untuk versi LindormTable sebelum 2.3.4, tidak ada algoritma kompresi yang ditentukan secara default. Untuk LindormTable 2.3.4 dan yang lebih baru, algoritma kompresi default adalah ZSTD. |
TTL | INT | Waktu hidup (TTL) data, dalam satuan detik (s). Catatan
|
COMPACTION_MAJOR_PERIOD | LONG | Periode sistem untuk menjalankan 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 | Atribut terkait indeks yang menentukan mutabilitas tabel dasar. 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 Setelah membuat tabel indeks, Anda tidak dapat mengubah nilai parameter MUTABILITY. Untuk menyesuaikan parameter ini, Anda harus terlebih dahulu menghapus semua tabel indeks. Cadangkan data Anda sebelum operasi untuk mencegah kehilangan data. |
CONSISTENCY | STRING | Properti konsistensi tabel. Untuk instans multi-zona, parameter ini menunjukkan konsistensi data antara data primer dan standby. Terdapat dua tingkat berikut:
Penting Untuk instans multi-zona, jika data Anda melibatkan operasi read-after-write, seperti increase, append, atau pembaruan indeks, Anda harus mengatur parameter CONSISTENCY pada tabel primer ke |
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 | Sama dengan tipe data kolom pertama dalam PRIMARY KEY | Kunci awal dan kunci akhir untuk membuat partisi region sebelumnya untuk tabel. Catatan
|
SPLITKEYS | Sama dengan tipe data kolom pertama dalam PRIMARY KEY | Kunci awal untuk semua partisi yang dibuat sebelumnya untuk tabel. Catatan
|
SPLITALGO | STRING | Menentukan algoritma pemisahan untuk partisi yang dibuat sebelumnya. 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. Untuk informasi selengkapnya tentang kolom dinamis, lihat Kolom dinamis. |
VERSIONS | STRING | Jumlah versi yang disimpan untuk nilai kolom. Nilainya harus berupa bilangan bulat yang lebih besar atau sama dengan 1. Nilai default adalah 1, artinya satu versi disimpan. Lindorm mendukung penyimpanan beberapa versi nilai kolom. Untuk informasi selengkapnya 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. Tetapkan VERSIONS ke 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
|
Pada versi LindormTable sebelum 2.2.16, kata kunci WITH tidak didukung saat menetapkan properti tabel. Anda harus membungkus kata kunci properti tabel dalam tanda kutip tunggal ('). Anda dapat menetapkan nilai properti berdasarkan tipe datanya. Jika nilai properti berupa string (STRING), Anda juga harus membungkus string tersebut dalam 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
Anda dapat menjalankan DESCRIBE table sensor; untuk memeriksa apakah tabel 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
Anda dapat menjalankan DESCRIBE table sensor; untuk memeriksa apakah tabel berhasil dibuat, dan menjalankan SHOW INDEX FROM sensor; untuk memeriksa apakah secondary index berhasil dibuat.
Tentukan TTL dan algoritma kompresi
Saat membuat tabel lebar, atur TTL menjadi 30 hari (2.592.000 detik) dan 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
Anda dapat menjalankan
DESCRIBE table sensor;untuk memeriksa apakah tabel berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel target di bawah database target. Di area Current Details Table, klik View Table Properties untuk melihat nilai parameter COMPRESSION dan TTL.
Tentukan periode Major Compaction
Saat membuat tabel lebar, 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
Anda dapat menjalankan
DESCRIBE table sensor;untuk memeriksa apakah tabel berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel target di bawah database target. Di area Current Details Table, klik View Table Properties untuk melihat nilai parameter COMPACTION_MAJOR_PERIOD.
Aktifkan fitur kolom dinamis
Setelah menetapkan parameter DYNAMIC_COLUMNS ke TRUE saat membuat tabel lebar, Anda dapat menulis data kolom dinamis ke tabel tersebut.
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
Anda dapat menjalankan
DESCRIBE table sensor;untuk memeriksa apakah tabel berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel target di bawah database target. Di area Current Details Table, klik View Table Properties untuk melihat nilai parameter DYNAMIC_COLUMNS.
Tentukan batas data panas dan dingin
Saat membuat tabel lebar, atur batas 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
Anda dapat menjalankan
DESCRIBE table sensor;untuk memeriksa apakah tabel berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel target di bawah database target. Di area Current Details Table, klik View Table Properties untuk melihat nilai parameter CHS dan CHS_L2.
Tentukan beberapa properti sekaligus
Saat membuat tabel lebar, tentukan algoritma kompresi, TTL, dan batas 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
Anda dapat menjalankan
DESCRIBE table sensor;untuk memeriksa apakah tabel berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel target di database target. Di area Current Details Table, klik View Table Properties untuk melihat nilai parameter COMPRESSION, CHS, CHS_L2, dan TTL.
Atur partisi
Saat membuat tabel lebar, Anda dapat menentukan lima partisi sebelumnya. Kunci awal untuk partisi-partisi ini adalah 1.000 dan kunci akhirnya adalah 9.000.
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
Anda dapat menjalankan
DESCRIBE table sensor;untuk memeriksa apakah tabel berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel target di bawah database target. Di area Shard Details, lihat nilai parameter startKey dan endKey untuk setiap shard.
Tentukan kunci awal untuk beberapa partisi
Saat membuat tabel lebar, Anda dapat menentukan lima kunci awal sebelumnya. Tabel tersebut kemudian akan dibuat dengan enam partisi 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
Anda dapat menjalankan
DESCRIBE table sensor;untuk memverifikasi bahwa tabel berhasil dibuat.Pada halaman Overview sistem manajemen kluster, klik nama tabel target di database target. Di area Shard Details, lihat nilai parameter startKey dan endKey untuk setiap shard.
Tentukan secara eksplisit kolom kunci partisi
Sebagian besar skenario kueri melibatkan kueri data instan dari satu perangkat. Untuk skenario ini, Anda dapat menentukan secara eksplisit 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
Anda dapat menjalankan pernyataan DESCRIBE TABLE sensor; untuk memverifikasi hasil pembuatan tabel.
Buat tabel data spatio-temporal
Buat tabel yang mendukung tipe data spasial apa pun (Geometry). Anda dapat menulis data dengan tipe data spasial apa pun ke tabel tersebut.
CREATE TABLE geoms(gid INT, g GEOMETRY, PRIMARY KEY(gid));Tulis data dengan tipe data spasial apa pun.
UPSERT INTO geoms(gid, g) VALUES(0,ST_GeomFromText('POINT(-10.1 3.3)')),(1,ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)')),(2,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))'));Buat tabel yang mendukung tipe Point. Anda hanya dapat menulis data titik ke tabel tersebut.
CREATE TABLE pts(gid INT, g GEOMETRY(POINT), PRIMARY KEY(gid));Tulis data titik.
UPSERT INTO pts(gid, g) VALUES(0, ST_MakePoint(0,0)),(1, ST_MakePoint(1,1));Buat tabel yang mendukung tipe Polygon. Anda hanya dapat menulis data poligon ke tabel tersebut.
CREATE TABLE polys(gid INT, g GEOMETRY(POLYGON), PRIMARY KEY(gid));Tulis data poligon.
UPSERT INTO polys(gid,g) VALUES(0,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))'));Buat tabel yang mendukung tipe LineString. Anda hanya dapat menulis data garis ke tabel tersebut.
CREATE TABLE lines(gid INT, g GEOMETRY(LINESTRING), PRIMARY KEY(gid));Tulis data garis.
UPSERT INTO lines(gid,g) VALUES(0, ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)'));Buat tabel yang mendukung tipe MULTIPOINT. Anda hanya dapat menulis data multipoint ke tabel tersebut.
CREATE TABLE multipoints(gid INT, g GEOMETRY(MULTIPOINT), PRIMARY KEY(gid));Tulis data multipoint.
UPSERT INTO multipoints(gid,g) VALUES(0, ST_GeomFromText('MULTIPOINT (10 40, 40 30, 20 20, 30 10)'));Buat tabel yang mendukung tipe MULTILINESTRING. Anda hanya dapat menulis data multilinestring ke tabel tersebut.
CREATE TABLE multilines(gid INT, g GEOMETRY(MULTILINESTRING), PRIMARY KEY(gid));Tulis data multilinestring.
UPSERT INTO multilines(gid,g) VALUES(0, ST_GeomFromText('MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))'));Buat tabel yang mendukung tipe MULTIPOLYGON. Anda hanya dapat menulis data multipolygon ke tabel tersebut.
CREATE TABLE multipolys(gid INT, g GEOMETRY(MULTIPOLYGON), PRIMARY KEY(gid));Tulis data multipolygon.
UPSERT INTO multipolys(gid,g) VALUES(0, ST_GeomFromText('MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))'));Buat tabel yang mendukung tipe GEOMETRYCOLLECTION. Anda hanya dapat menulis data koleksi geometri ke tabel tersebut.
CREATE TABLE collections(gid INT, g GEOMETRY(GEOMETRYCOLLECTION), PRIMARY KEY(gid));Tulis data koleksi geometri.
UPSERT INTO collections(gid,g) VALUES(0, ST_GeomFromText('GEOMETRYCOLLECTION (POINT (40 10), LINESTRING (10 10, 20 20, 10 40), POLYGON ((40 40, 20 45, 45 30, 40 40)))'));Buat tabel yang terdiri dari beberapa kolom dengan tipe data spasial (Geometry).
CREATE TABLE mix(gid INT, pt GEOMETRY(POINT), ply GEOMETRY(POLYGON), PRIMARY KEY(gid));