All Products
Search
Document Center

Lindorm:CREATE TABLE

Last Updated:Mar 29, 2026

Gunakan pernyataan CREATE TABLE untuk membuat tabel di LindormTable atau LindormTSDB. Pernyataan ini mendukung tipe data seperti VARCHAR, TIMESTAMP, dan BIGINT, serta properti tabel seperti time-to-live (TTL) dan algoritma kompresi.

Mesin dan versi

  • Pernyataan CREATE TABLE berlaku untuk LindormTable dan LindormTSDB.

  • LindormTSDB mendukung sintaks CREATE TABLE standar mulai dari versi 3.4.32. Untuk melihat atau melakukan upgrade versi mesin 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

Perbandingan mesin

Sintaks CREATE TABLE berbeda antara LindormTable dan LindormTSDB.

Elemen sintaksLindormTableLindormTSDB
Nama tabel (table_identifier)DidukungDidukung
Definisi kolom (column_definition)DidukungDidukung
Kunci primer (primary_key)DidukungDidukung
Ekspresi indeks (KEY|INDEX)DidukungTidak didukung
Partisi (partition_definition)Tidak didukungDidukung
Properti tabel (table_options)DidukungTidak didukung

Catatan penggunaan

Nama tabel

  • Karakter yang diizinkan: angka, huruf kapital, huruf kecil, titik (.), tanda hubung (-), dan garis bawah (_).

  • Tidak boleh dimulai dengan titik (.) atau tanda hubung (-).

  • Panjang: 1 hingga 255 karakter.

Definisi kolom

ElemenWajibCatatan
Nama kolomYaKarakter yang diizinkan: angka, huruf kapital/kecil, titik (.), tanda hubung (-), dan garis bawah (_). Tidak boleh menggunakan kata kunci yang dicadangkan. Panjang maksimum: 255 byte.
Tipe dataYaUntuk tipe data yang didukung, lihat Tipe data.
Kendala NULLTidakLihat catatan di bawah.

Tipe TIMESTAMP (khusus LindormTSDB):

  • Hanya satu kolom per tabel yang boleh bertipe TIMESTAMP.

  • LindormTSDB mengkodekan dan mengurai stempel waktu berdasarkan UTC+8.

  • Timestamp Unix 32-bit lama harus dikalikan dengan 1.000 sebelum ditulis ke LindormTSDB. Menulis timestamp Unix 32-bit secara langsung menyebabkan error interpretasi semantik. Misalnya, 1641009600 merepresentasikan 2022-01-01 12:00:00 di sistem warisan, tetapi diinterpretasikan sebagai 1970-01-20 07:50:09 (UTC+8) di LindormTSDB.

Perilaku kendala NULL:

Penting

Saat ini, Lindorm SQL tidak memvalidasi kendala NULL di lapisan SQL — validasi dilakukan oleh mesin penyimpanan, dan aturannya berbeda-beda tergantung mesinnya. Untuk memastikan penulisan data yang benar:

  • Tentukan NOT NULL untuk semua kolom kunci primer.

  • Jangan tentukan NOT NULL untuk kolom non-kunci primer.

Kunci primer

Kunci primer secara unik mengidentifikasi baris dalam tabel. Kunci ini terdiri dari satu atau beberapa kolom dan harus ditentukan saat membuat tabel.

Penting

Kunci primer tidak dapat diubah setelah dibuat. Rancang kunci primer Anda dengan cermat sebelum membuat tabel.

Batas kunci primer LindormTable:

ItemBatas
Panjang maksimum kolom kunci primer tunggal2 KB
Panjang total maksimum semua kolom kunci primer30 KB
Panjang maksimum kolom non-kunci primer tunggal2 MB

Struktur kunci primer LindormTSDB:

Dalam tabel deret waktu, kolom kunci primer memiliki dua peran berbeda:

  • Kolom tag: Kolom kunci primer bertipe VARCHAR. Mengidentifikasi sumber data — misalnya, ID perangkat dalam skenario Internet of Things (IoT), identifikasi kendaraan dalam skenario Internet of Vehicles (IoV), atau ID aplikasi atau ip:port dalam skenario pemantauan.

  • Kolom timestamp: Kolom kunci primer bertipe TIMESTAMP. Hanya satu kolom timestamp yang diizinkan per tabel.

Kunci primer dapat berisi satu atau beberapa kolom VARCHAR (tag), tetapi hanya satu kolom TIMESTAMP. Semua kolom kunci primer harus bertipe VARCHAR atau TIMESTAMP.

Untuk panduan merancang kunci primer untuk tabel deret waktu, lihat Praktik terbaik desain PRIMARY KEY.

Ekspresi indeks (KEY|INDEX)

Gunakan kata kunci KEY atau INDEX dalam pernyataan CREATE TABLE untuk membuat indeks saat pembuatan tabel. Dengan cara ini, Anda dapat membuat secondary indexes dan search indexes.

Penting

Ekspresi indeks hanya didukung di LindormTable 2.7.7 atau yang lebih baru dan Lindorm SQL 2.8.6.0 atau yang lebih baru. Untuk memeriksa versi Anda, lihat Panduan versi LindormTable dan Panduan versi SQL. Jika Anda tidak dapat melakukan upgrade di konsol, hubungi dukungan teknis Lindorm di DingTalk di s0s3eg3.

Pemberian nama indeks: Jika nama indeks tidak ditentukan, sistem akan menghasilkan nama dalam format table_name_idx_${auto_increment_id}.

Redundansi secondary index (ketika INCLUDE tidak ditentukan):

Versi Lindorm SQLPerilaku redundansi default
2.9.3.10 dan yang lebih baruKolom tidak disimpan secara redundan secara default
Lebih awal dari 2.9.3.10Semua kolom disimpan secara redundan secara default (setara dengan INDEX_COVERED_TYPE=COVERED_ALL_COLUMNS_IN_SCHEMA; untuk tabel dinamis, setara dengan COVERED_DYNAMIC_COLUMNS)

Properti tabel default saat menggunakan KEY/INDEX (jika MUTABILITY dan CONSISTENCY tidak ditentukan):

  • CONSISTENCY = 'strong'

  • MUTABILITY = 'MUTABLE_LATEST'

Status sisa saat kegagalan pembuatan indeks: Jika terjadi pengecualian selama pembuatan indeks, tabel dan indeks mungkin tetap dalam status sisa dan tidak dihapus secara otomatis. Mereka tetap terlihat melalui pernyataan SHOW dan DESCRIBE, tetapi penulisan dan kueri data mungkin gagal. Hapus secara manual tabel dan indeks sisa tersebut, lalu buat ulang.

Partisi

Partisi hanya didukung di LindormTSDB. Kolom yang digunakan dalam PARTITION BY harus merupakan kolom VARCHAR dalam kunci primer.

Sintaks: PARTITION BY HASH(column1, column2, ..., columnN)

Properti tabel

Hanya LindormTable yang mendukung properti tabel melalui kata kunci WITH.

OpsiTipeDefaultDeskripsi
COMPRESSIONSTRINGTidak ada (ZSTD mulai dari LindormTable 2.3.4)Algoritma kompresi. Nilai yang valid: SNAPPY, ZSTD, LZ4.
TTLINTKosong (tidak kedaluwarsa)Waktu hidup (TTL) data, dalam detik. Untuk menghapus TTL, atur ke string kosong. Lihat Contoh ALTER TABLE.
COMPACTION_MAJOR_PERIODLONGMath.Min(TTL, 1728000000) ms; jika tidak ada TTL: 20 hari (1.728.000.000 ms)Periode kompaksi mayor, dalam milidetik.
MUTABILITYSTRINGMUTABLE_LATESTMutabilitas tabel dasar, terkait perilaku indeks. Nilai yang valid: IMMUTABLE, IMMUTABLE_ROWS, MUTABLE_LATEST, MUTABLE_ALL, MUTABLE_UDT. Tidak dapat diubah setelah pembuatan indeks — hapus semua indeks sebelum mengubahnya. Lihat Secondary indexes native berkinerja tinggi.
CONSISTENCYSTRINGeventualTingkat konsistensi. Nilai yang valid: eventual, strong. Untuk instans multi-zona dengan operasi read-after-write (seperti increment, append, atau pembaruan indeks), atur ke strong.
NUMREGIONSINTJumlah region yang akan dibuat sebelumnya untuk tabel.
CHSINTBatas data panas/dingin, dalam detik. Memerlukan penyimpanan dingin diaktifkan. Harus digunakan bersama CHS_L2='storagetype=COLD'. Lihat Pemisahan data panas dan dingin.
STARTKEY dan ENDKEYTipe yang sama dengan kolom kunci primer pertamaKunci awal dan akhir untuk partisi region yang dibuat sebelumnya. Memerlukan NUMREGIONS. Tipe yang didukung: SMALLINT, INTEGER, BIGINT, CHAR, VARCHAR, FLOAT, DOUBLE.
SPLITKEYSTipe yang sama dengan kolom kunci primer pertamaKunci awal untuk semua partisi yang dibuat sebelumnya, dipisahkan koma. Didukung sejak LindormTable 2.5.4. Tidak dapat digunakan bersama NUMREGIONS, STARTKEY, atau ENDKEY. Koma di dalam tanda kutip ganda dianggap sebagai karakter biasa. Tipe yang didukung: sama seperti STARTKEY/ENDKEY.
SPLITALGOSTRINGAlgoritma pemisahan untuk partisi yang dibuat sebelumnya. Nilai yang valid: HexStringSplit (memisahkan berdasarkan byte heksadesimal), UniformSplit (pemisahan merata berdasarkan nilai byte asli).
DYNAMIC_COLUMNSSTRINGFalseMengaktifkan kolom dinamis. Nilai yang valid: True, False. Kolom dinamis hanya mendukung tipe Varbinary. Lihat Kolom dinamis.
VERSIONSSTRING1Jumlah versi yang disimpan per nilai kolom. Harus berupa bilangan bulat >= 1. Nilai besar memengaruhi kinerja kueri dan penyimpanan — pertahankan nilai ini pada 1 kecuali retensi multi-versi diperlukan. Lihat Manajemen data multi-versi.
BLOB_BUCKET_NAMESTRINGMembuat BUCKET untuk tabel dengan kolom BLOB. Didukung sejak LindormTable 2.6.4. Aturan nama BUCKET: huruf kecil, angka, titik (.), dan tanda hubung (-); 3–63 karakter; tidak boleh dimulai atau diakhiri dengan tanda hubung; tidak boleh ada titik berurutan.
Pada versi LindormTable sebelum 2.2.16, kata kunci WITH tidak didukung. Alih-alih itu, lampirkan kata kunci properti dalam tanda kutip tunggal. Untuk nilai string, lampirkan juga nilainya dalam tanda kutip tunggal. Contoh: CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';

Contoh

Buat tabel dasar

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)
);

Jalankan DESCRIBE table sensor; untuk memverifikasi bahwa tabel telah dibuat.

Buat tabel dengan secondary index

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)
);

Untuk memverifikasi:

  • Jalankan DESCRIBE table sensor; untuk memeriksa tabel.

  • Jalankan SHOW INDEX FROM sensor; untuk memeriksa secondary index.

Atur TTL dan algoritma kompresi

Atur TTL menjadi 30 hari (2.592.000 detik) dan kompresi ke 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');

Untuk memverifikasi:

  • Jalankan DESCRIBE table sensor; untuk memeriksa tabel.

  • Di sistem manajemen kluster, buka halaman Overview, klik nama tabel, lalu klik View Table Properties di area Current Details Table untuk mengonfirmasi nilai COMPRESSION dan TTL.

Atur periode kompaksi mayor

Atur periode kompaksi mayor 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');

Untuk memverifikasi: Jalankan DESCRIBE table sensor;, atau klik View Table Properties di area Current Details Table sistem manajemen kluster.

Aktifkan kolom dinamis

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');

Untuk memverifikasi: Jalankan DESCRIBE table sensor;, atau klik View Table Properties di area Current Details Table sistem manajemen kluster.

Atur batas data panas/dingin

Arsipkan data yang lebih tua dari 86.400 detik (1 hari) ke penyimpanan 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 (CHS = '86400', CHS_L2 = 'storagetype=COLD');
CHS memerlukan penyimpanan dingin diaktifkan dan harus digunakan bersama CHS_L2='storagetype=COLD'.

Untuk memverifikasi: Jalankan DESCRIBE table sensor;, atau klik View Table Properties di area Current Details Table sistem manajemen kluster untuk mengonfirmasi nilai CHS dan CHS_L2.

Gabungkan beberapa properti

Atur kompresi, TTL, dan batas data panas/dingin secara bersamaan.

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');

Untuk memverifikasi: Jalankan DESCRIBE table sensor;, atau klik View Table Properties di area Current Details Table sistem manajemen kluster untuk mengonfirmasi nilai COMPRESSION, CHS, CHS_L2, dan TTL.

Buat partisi sebelumnya dengan kunci awal dan akhir

Buat lima partisi sebelumnya dengan kunci awal 1.000 dan kunci akhir 9.000. STARTKEY dan ENDKEY memerlukan NUMREGIONS.

CREATE TABLE sensor (
  p1 INTEGER NOT NULL,
  c1 INTEGER,
  c2 VARCHAR,
  c3 VARCHAR,
  PRIMARY KEY(p1)
) WITH (NUMREGIONS='5', STARTKEY='1000', ENDKEY='9000');

Untuk memverifikasi: Jalankan DESCRIBE table sensor;, atau buka area Shard Details di sistem manajemen kluster untuk melihat nilai startKey dan endKey untuk setiap shard.

Buat partisi sebelumnya dengan kunci pemisah eksplisit

Tentukan lima kunci pemisah untuk membuat enam partisi sebelumnya. SPLITKEYS tidak dapat digunakan bersama NUMREGIONS, STARTKEY, atau ENDKEY.

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');

Untuk memverifikasi: Jalankan DESCRIBE table sensor;, atau lihat nilai startKey dan endKey di area Shard Details sistem manajemen kluster.

Tentukan kolom kunci partisi

Untuk kueri yang menargetkan data instan dari satu perangkat, tentukan device_id sebagai kunci partisi untuk mengontrol distribusi 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);

Jalankan DESCRIBE TABLE sensor; untuk memverifikasi hasil pembuatan tabel.

Buat tabel data spatio-temporal

Tipe spasial apa pun (GEOMETRY) — menerima tipe data spasial apa pun:

CREATE TABLE geoms(gid INT, g GEOMETRY, PRIMARY KEY(gid));

Tulis data tipe 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))'));

Hanya tipe titik:

CREATE TABLE pts(gid INT, g GEOMETRY(POINT), PRIMARY KEY(gid));
UPSERT INTO pts(gid, g) VALUES(0, ST_MakePoint(0,0)),(1, ST_MakePoint(1,1));

Hanya tipe Polygon:

CREATE TABLE polys(gid INT, g GEOMETRY(POLYGON), PRIMARY KEY(gid));
UPSERT INTO polys(gid,g) VALUES(0, ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))'));

Hanya tipe LineString:

CREATE TABLE lines(gid INT, g GEOMETRY(LINESTRING), PRIMARY KEY(gid));
UPSERT INTO lines(gid,g) VALUES(0, ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)'));

Hanya tipe MULTIPOINT:

CREATE TABLE multipoints(gid INT, g GEOMETRY(MULTIPOINT), PRIMARY KEY(gid));
UPSERT INTO multipoints(gid,g) VALUES(0, ST_GeomFromText('MULTIPOINT (10 40, 40 30, 20 20, 30 10)'));

Hanya tipe MULTILINESTRING:

CREATE TABLE multilines(gid INT, g GEOMETRY(MULTILINESTRING), PRIMARY KEY(gid));
UPSERT INTO multilines(gid,g) VALUES(0, ST_GeomFromText('MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))'));

Hanya tipe MULTIPOLYGON:

CREATE TABLE multipolys(gid INT, g GEOMETRY(MULTIPOLYGON), PRIMARY KEY(gid));
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)))'));

Hanya tipe GEOMETRYCOLLECTION:

CREATE TABLE collections(gid INT, g GEOMETRY(GEOMETRYCOLLECTION), PRIMARY KEY(gid));
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)))'));

Beberapa kolom spasial:

CREATE TABLE mix(gid INT, pt GEOMETRY(POINT), ply GEOMETRY(POLYGON), PRIMARY KEY(gid));