全部产品
Search
文档中心

:BUAT TABEL

更新时间:Jul 06, 2025

Topik ini menjelaskan sintaks untuk membuat tabel yang mendukung tipe data geometri.

Sintaks

create_table_statement ::=  CREATE TABLE [ IF NOT EXISTS ] nama_tabel
                            '('
                                definisi_kolom
                                ( ',' definisi_kolom )*
                                 ',' [kendala pk]  PRIMARY KEY '(' primary_key ')' 
                            ')' WITH [ opsi_tabel ]
definisi_kolom      ::=  nama_kolom lql_type 
primary_key            ::=  item_utama [ ',' item_utama ]
item_utama           ::=  nama_kolom (ASC|DESC)
                            | [z-order] '(' [ nama_kolom ( ',' nama_kolom )* ] ')'
Catatan

Sintaks ini mendukung IF NOT EXISTS. Anda dapat menentukan satu atau lebih kolom sebagai kunci utama.

Parameter

Nama tabel (table_identifier)

Nama tabel harus memenuhi persyaratan berikut:

  • Nama dapat berisi angka, huruf, koma (,), tanda hubung (-), dan garis bawah (_).

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

  • Nama harus memiliki panjang antara 1 hingga 255 karakter.

Definisi kolom (column_definition)

Opsi

Diperlukan

Deskripsi

Nama kolom (column_identifier)

Ya

  • Nama dapat berisi angka, huruf, koma (,), tanda hubung (-), dan garis bawah (_).

  • Nama kolom tidak boleh berisi kata kunci sistem yang dicadangkan.

  • Nama tidak boleh melebihi 255 karakter.

Tipe data (data type)

Ya

Untuk informasi lebih lanjut tentang tipe data yang didukung oleh sintaks ini, lihat Tipe data.

Penting

Jika Anda ingin menentukan tipe TIMESTAMP saat membuat tabel deret waktu, perhatikan hal-hal berikut:

  • Anda hanya dapat menentukan satu kolom dengan tipe data TIMESTAMP dalam tabel deret waktu.

  • LindormTSDB mengkodekan dan mengurai timestamp berdasarkan Waktu Beijing (GMT+8).

  • Timestamp UNIX dalam sistem lama masih diurai menjadi nilai 32-bit. Kami sarankan Anda mengalikan timestamp ini dengan 1000 sebelum menyisipkannya ke LindormTSDB. Jika Anda menyisipkan timestamp ke LindormTSDB tanpa mengonversi timestamp, LindormTSDB tidak akan dapat menguraikan timestamp sesuai harapan. Sebagai contoh, timestamp 1641009600 diurai sebagai 2022-01-01 12:00:00 dalam sistem lama. LindormTSDB menguraikan timestamp tersebut sebagai 1970-01-20 07:50:09(GMT+8).

Kendala NULL

Tidak

Menentukan apakah nilai dari opsi ini dapat bernilai NULL.

Penting

Lindorm SQL tidak memverifikasi nilai NULL dari opsi. Nilai-nilai ini diverifikasi oleh mesin.

Metode verifikasi nilai NULL bergantung pada aturan verifikasi mesin. Aturan verifikasi bervariasi tergantung pada mesin. Oleh karena itu, nilai NULL mungkin tetap ditulis ke tabel meskipun Anda mengatur opsi ini ke NOT NULL.

Untuk memastikan bahwa data dapat ditulis ke tabel, perhatikan persyaratan berikut:

  • Tentukan NOT NULL dalam definisi semua kolom kunci utama.

  • Kami sarankan Anda tidak menentukan NOT NULL dalam definisi kolom non-kunci utama.

Kunci utama (primary_key)

Kunci utama secara unik mengidentifikasi data dalam tabel. Kunci utama terdiri dari satu atau lebih kolom. Anda harus menentukan kunci utama saat membuat tabel.

Penting

Anda tidak dapat memodifikasi kunci utama. Pastikan Anda menentukan kunci utama yang sesuai saat membuat tabel.

Saat menggunakan sintaks CREATE TABLE untuk membuat tabel, perhatikan item yang dijelaskan dalam tabel berikut.

Mesin

Penggunaan kunci utama

LindormTable

  • Kolom kunci utama tunggal dapat memiliki panjang hingga 2 KB.

  • Total panjang semua kolom kunci utama tidak boleh melebihi 30 KB.

  • Kolom yang tidak termasuk dalam kunci utama dapat memiliki panjang hingga 2 MB.

LindormTSDB

  • Dalam kolom kunci utama tabel deret waktu, kolom dengan tipe data VARCHAR disebut kolom TAG. Kolom dengan tipe data TIMESTAMP disebut kolom timestamp.

  • Kunci utama hanya dapat berisi kolom dengan tipe VARCHAR atau TIMESTAMP.

  • Kunci utama dapat berisi satu atau lebih kolom dengan tipe VARCHAR tetapi hanya satu kolom dengan tipe TIMESTAMP.

  • Kami sarankan Anda menggunakan nilai yang dapat secara unik mengidentifikasi data dalam tabel deret waktu sebagai kunci utama tabel. Sebagai contoh, Anda dapat menggunakan ID perangkat sebagai kunci utama dalam skenario IoT, VIN kendaraan sebagai kunci utama dalam skenario IoV, dan ID aplikasi atau string ip:port sebagai kunci utama dalam skenario pemantauan. Untuk informasi lebih lanjut, lihat bagian Praktik terbaik untuk merancang kunci utama topik "Desain tabel deret waktu".

Ekspresi indeks (KEY|INDEX)

Untuk membuat tabel indeks menggunakan pernyataan CREATE TABLE, Anda dapat menggunakan kata kunci KEY atau INDEX untuk menentukan indeks yang ingin dibuat.

Penting

Ekspresi indeks (KEY|INDEX) hanya didukung oleh LindormTable versi 2.7.7 ke atas serta Lindorm SQL versi 2.8.6.0 ke atas. Untuk informasi lebih lanjut tentang cara melihat versi LindormTable dan Lindorm SQL, lihat Catatan Rilis LindormTable dan Versi SQL. Jika Anda tidak dapat memperbarui mesin Anda ke versi yang diperlukan di konsol, hubungi dukungan teknis Lindorm (ID DingTalk: s0s3eg3).

Saat menggunakan ekspresi indeks, perhatikan hal-hal berikut: Jika Anda tidak secara eksplisit menentukan nama indeks, sistem akan menghasilkan nama indeks. Format: <nama_tabel>_idx_${nomor_auto-increment}. Indeks Sekunder dan Indeks Pencarian hanya dapat dibuat menggunakan ekspresi indeks. Untuk informasi lebih lanjut tentang jenis indeks, lihat bagian BUAT INDEKS topik "BUAT INDEKS". Jika Anda membuat indeks sekunder dan tidak menentukan ekspresi INCLUDE, indeks yang dibuat mencakup semua kolom. Ini setara dengan mengatur atribut indeks INDEX_COVERED_TYPE ke COVERED_ALL_COLUMNS_IN_SCHEMA. Jika tabel yang dibuat adalah tabel dinamis, ini setara dengan mengatur atribut indeks INDEX_COVERED_TYPE ke COVERED_DYNAMIC_COLUMNS.

Catatan

Untuk informasi lebih lanjut tentang atribut INDEX_COVERED_TYPE, lihat bagian Atribut Indeks (index_options) topik "BUAT INDEKS".

Jika Anda menentukan klausa KEY atau INDEX tetapi tidak secara eksplisit menentukan atribut MUTABILITY dan CONSISTENCY, tabel memiliki dua atribut tabel: CONSISTENCY ='strong' dan MUTABILITY='MUTABLE_LATEST'.

Catatan

Untuk informasi lebih lanjut tentang atribut CONSISTENCY dan MUTABILITY, lihat bagian Atribut Tabel (table_options) topik "BUAT TABEL".

Jika ekspresi indeks termasuk dalam pernyataan CREATE TABLE, sistem pertama-tama membuat tabel lalu membuat indeks. Jika terjadi pengecualian saat membuat indeks, tabel dan indeks yang dibuat mungkin tetap ada di database dan tidak akan secara otomatis dibersihkan atau dihapus. Anda dapat melihat tabel dan indeks dengan mengeksekusi pernyataan seperti SHOW atau DESCRIBE, tetapi Anda mungkin tidak dapat menulis data ke atau menanyakan tabel atau indeks tersebut. Kami sarankan Anda membersihkan dan kemudian membuat ulang tabel dan indeks.

Partisi (partition_definition)

Partisi hanya didukung oleh LindormTSDB. Dalam tabel deret waktu, kolom kunci partisi yang ditentukan oleh klausa PARTITION BY harus merupakan kolom VARCHAR yang didefinisikan dalam kunci utama.

Saat membuat tabel, Anda dapat menggunakan klausa PARTITION BY HASH(column1, column2, ..., columnN) untuk menentukan kolom berdasarkan mana partisi hash dilakukan pada tabel. Contoh: PARTITION BY HASH(c1, p1).

Atribut tabel (table_options)

Parameter ini hanya didukung oleh LindormTable. Anda dapat menggunakan kata kunci WITH untuk menambahkan atribut yang dijelaskan dalam tabel berikut ke tabel yang ingin dibuat.

Atribut (option_identifer)

Tipe

Deskripsi

COMPRESSION

STRING

Algoritma yang digunakan untuk mengompresi data dalam tabel. Nilai valid:

  • SNAPPY

  • ZSTD

  • LZ4

Catatan

Dalam LindormTable versi lebih awal dari 2.3.4, algoritma kompresi apa pun tidak digunakan secara default. Dalam LindormTable 2.3.4 dan versi lebih baru, algoritma ZSTD digunakan secara default.

TTL

INT

Nilai TTL data dalam tabel. Unit: detik.

Catatan
  • Secara default, nilai atribut ini adalah null, yang menunjukkan bahwa data dalam tabel tidak kedaluwarsa.

  • Anda dapat mengonfigurasi atribut ini dalam format TTL=<Waktu yang Ditentukan> untuk menentukan TTL untuk tabel. Anda juga dapat mengatur atribut ini ke string kosong untuk membatalkan konfigurasi TTL. Untuk informasi lebih lanjut, lihat bagian Contoh topik "ALTER TABLE".

COMPACTION_MAJOR_PERIOD

LONG

Interval di mana operasi major compaction dilakukan. Unit: milidetik. Untuk informasi lebih lanjut, lihat bagian Tentukan interval di mana operasi major compaction dilakukan topik "ALTER TABLE".

Catatan

Interval default dihitung menggunakan rumus berikut: Math.Min(TTL,1728000000ms). Jika Anda tidak menentukan TTL, nilai atribut ini diatur ke 1728000000 ms (setara dengan 20 hari) secara default.

MUTABILITY

STRING

Atribut terkait indeks. Opsi ini menentukan mutabilitas tabel dasar. Nilai default: MUTABLE_LATEST.

Nilai valid:

  • IMMUTABLE

  • IMMUTABLE_ROWS

  • MUTABLE_LATEST

  • MUTABLE_ALL

  • MUTABLE_UDT

Untuk informasi lebih lanjut tentang nilai-nilai tersebut, lihat Indeks sekunder.

Penting

Nilai atribut MUTABILITY tidak dapat dimodifikasi setelah tabel indeks dibuat. Untuk menyesuaikan atribut ini, Anda harus menghapus semua tabel indeks terlebih dahulu. Kami sarankan Anda mencadangkan data Anda sebelum penyesuaian untuk menghindari kehilangan data.

CONSISTENCY

STRING

Tingkat konsistensi tabel. Nilai default: eventual. Untuk instance lintas zona, parameter ini menentukan konsistensi data antara tabel utama dan tabel sekunder. Nilai valid:

  • eventual: konsisten akhirnya

  • strong: sangat konsisten

Penting

Untuk instance lintas zona, jika data dibaca dan kemudian ditulis dalam operasi penambahan, penggabungan, dan pembaruan indeks, Anda harus mengatur parameter CONSISTENCY tabel utama ke strong untuk memastikan konsistensi data antara tabel utama dan sekunder.

NUMREGIONS

INT

Jumlah wilayah data dalam tabel yang ingin Anda buat.

CHS

INT

Periode waktu setelah data disimpan menggunakan penyimpanan dingin. Unit: detik.

Catatan
  • Untuk mengonfigurasi atribut ini, Anda harus mengaktifkan penyimpanan dingin untuk instance. Untuk informasi lebih lanjut tentang penyimpanan dingin, lihat Ikhtisar.

  • Saat mengonfigurasi atribut ini, Anda juga harus mengatur atribut CHS_L2 ke storagetype=COLD.

STARTKEY dan ENDKEY

Tipe data sama dengan kolom pertama dalam kunci utama yang ditentukan oleh PRIMARY KEY

Kunci awal dan kunci akhir setiap wilayah.

Catatan
  • Atribut STARTKEY dan ENDKEY harus ditentukan bersama dengan atribut NUMREGIONS. Jika atribut NUMREGIONS tidak ditentukan, atribut STARTKEY dan ENDKEY tidak berlaku.

  • Jika Anda menentukan nilai string untuk atribut STARTKEY dan ENDKEY, string tersebut secara implisit dikonversi ke nilai dengan tipe data yang sama dengan kolom pertama kunci utama. Hanya tipe data berikut yang didukung untuk atribut STARTKEY dan ENDKEY:

    • SMALLINT

    • INTEGER

    • BIGINT

    • CHAR

    • VARCHAR

    • FLOAT

    • DOUBLE

SPLITKEYS

Tipe data sama dengan kolom pertama dalam kunci utama yang ditentukan oleh PRIMARY KEY

Kunci awal semua wilayah pra-pemisah.

Catatan
  • Atribut ini didukung dalam LindormTable 2.5.4 dan versi lebih baru.

  • Nilai atribut ini adalah serangkaian string yang menentukan kunci awal setiap wilayah pra-pemisah. String-string tersebut dipisahkan oleh koma (,). Namun, koma (,) yang termasuk dalam pasangan tanda kutip ganda diidentifikasi sebagai karakter normal daripada pemisah kunci awal.

  • Atribut ini tidak dapat ditentukan bersama dengan atribut NUMREGIONS, STARTKEY, dan ENDKEY.

  • Jika Anda menentukan nilai string untuk SPLITKEYS, string tersebut secara implisit dikonversi ke nilai dengan tipe data yang sama dengan kolom pertama kunci utama. Hanya tipe data berikut yang didukung untuk atribut SPLITKEYS:

    • SMALLINT

    • INTEGER

    • BIGINT

    • CHAR

    • VARCHAR

    • FLOAT

    • DOUBLE

SPLITALGO

STRING

Algoritma pemisahan yang digunakan untuk pra-partisi. Dua algoritma berikut didukung:

  • HexStringSplit: membagi kunci utama berdasarkan byte heksadesimal.

  • UniformSplit: membagi kunci utama secara merata berdasarkan byte asli dalam kunci utama.

DYNAMIC_COLUMNS

STRING

Menentukan apakah akan mengaktifkan kolom dinamis. Nilai default: False. Nilai valid:

  • True: mengaktifkan kolom dinamis untuk tabel.

  • False: menonaktifkan kolom dinamis untuk tabel.

Catatan

Kolom dinamis hanya mendukung tipe data VARBINARY. Untuk informasi lebih lanjut tentang kolom dinamis, lihat Kolom dinamis.

VERSIONS

STRING

Jumlah versi yang disimpan untuk data kolom. Nilai parameter ini adalah bilangan bulat lebih besar dari atau sama dengan 1. Nilai default parameter ini adalah 1, yang menunjukkan bahwa hanya satu versi yang disimpan untuk data kolom. Lindorm memungkinkan Anda menyimpan beberapa versi data kolom. Untuk informasi lebih lanjut, lihat Gunakan petunjuk untuk mengimplementasikan versi data.

Penting

Jika Anda mengatur VERSIONS ke nilai besar, kinerja kueri dan penyimpanan tabel mungkin menurun. Kami sarankan Anda tidak mengatur atribut ini ke nilai besar. Nilai yang direkomendasikan: 1.

BLOB_BUCKET_NAME

STRING

Nama Bucket OSS yang dibuat untuk tabel yang berisi kolom BLOB.

Nama bucket harus memenuhi persyaratan berikut:

  • Nama hanya dapat berisi huruf kecil, angka, titik (.), dan tanda hubung (-).

  • Nama harus memiliki panjang 3 hingga 63 karakter.

  • Nama tidak boleh dimulai atau diakhiri dengan tanda hubung (-).

  • Nama tidak boleh berisi titik (.) berturut-turut.

Catatan
  • Atribut ini didukung oleh LindormTable 2.6.4 dan versi lebih baru.

  • Jika Anda tidak menentukan kolom BLOB saat membuat tabel tetapi mengonfigurasi atribut BLOB_BUCKET_NAME, Lindorm tidak memeriksavaliditas nama bucket yang ditentukan.

Catatan

LindormTable versi sebelum 2.2.16 tidak mendukung kata kunci WITH. Dalam hal ini, Anda harus mengapit nama atribut dengan sepasang tanda kutip (''). Nilai atribut dapat dikonfigurasi berdasarkan tipe data atribut tersebut. Jika nilai atribut adalah string, Anda harus mengapit string tersebut dengan sepasang tanda kutip (''). Contoh: CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';.

Contoh

  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang mendukung semua tipe data geometri:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis berbagai jenis data geometri ke tabel:

    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))'));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang hanya mendukung objek titik:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis objek titik ke tabel:

    UPSERT INTO pts(gid, g) VALUES(0, ST_MakePoint(0,0)),(1, ST_MakePoint(1,1));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang hanya mendukung objek poligon:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis objek poligon ke tabel:

    UPSERT INTO polys(gid,g) VALUES(0,ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))'));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang hanya mendukung objek LineString:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis objek LineString ke tabel:

    UPSERT INTO lines(gid,g) VALUES(0, ST_GeomFromText('LINESTRING(-12.2 4.3, -10.2 4.3)'));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang hanya mendukung objek MultiPoint:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis objek MultiPoint ke tabel:

    UPSERT INTO multipoints(gid,g) VALUES(0, ST_GeomFromText('MULTIPOINT (10 40, 40 30, 20 20, 30 10)'));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang hanya mendukung objek MultiLineString:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis objek MultiLineString ke tabel:

    UPSERT INTO multilines(gid,g) VALUES(0, ST_GeomFromText('MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))'));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang hanya mendukung objek MultiPolygon:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis objek MultiPolygon ke tabel:

    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)))'));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang hanya mendukung objek GeometryCollection:

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

    Anda dapat mengeksekusi pernyataan berikut untuk menulis objek GeometryCollection ke tabel:

    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)))'));
  • Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel yang berisi beberapa kolom dengan data geometri yang berbeda:

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