すべてのプロダクト
Search
ドキュメントセンター

Lindorm:CREATE TABLE

最終更新日:Mar 29, 2026

CREATE TABLE 文を使用して、LindormTable または LindormTSDB にテーブルを作成します。この文は、VARCHAR、TIMESTAMP、BIGINT などのデータの型や、生存時間 (TTL)、圧縮アルゴリズムなどのテーブルプロパティをサポートしています。

対応エンジンとバージョン

  • CREATE TABLE は LindormTable および LindormTSDB に適用されます。

  • LindormTSDB はバージョン 3.4.32 以降で標準的な CREATE TABLE 構文をサポートしています。エンジンバージョンの確認またはスペックアップ方法については、「LindormTSDB バージョンガイド」および「マイナーバージョンの更新」をご参照ください。

構文

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

エンジン間の比較

CREATE TABLE の構文は、LindormTable と LindormTSDB で異なります。

構文要素LindormTableLindormTSDB
テーブル名 (table_identifier)サポートサポート
カラム定義 (column_definition)サポートサポート
プライマリキー (primary_key)サポートサポート
インデックス式 (KEY|INDEX)サポート未サポート
パーティション (partition_definition)未サポートサポート
テーブルプロパティ (table_options)サポート未サポート

注意事項

テーブル名

  • 使用可能な文字:数字、大文字、小文字、ピリオド (.)、ハイフン (-)、アンダースコア (_)

  • ピリオド (.) またはハイフン (-) で開始することはできません。

  • 長さ:1~255 文字

カラム定義

要素必須備考
カラム名はい使用可能な文字:数字、大文字/小文字、ピリオド (.)、ハイフン (-)、アンダースコア (_)。予約キーワードは使用できません。最大長:255 バイト。
データの型はいサポートされているデータの型については、「データの型」をご参照ください。
NULL 制約いいえ以下の注記をご確認ください。

TIMESTAMP 型 (LindormTSDB のみ):

  • テーブルごとに TIMESTAMP 型のカラムは 1 つのみ許可されます。

  • LindormTSDB はタイムスタンプを UTC + 08:00 に基づいてエンコードおよび解析します。

  • レガシーシステムの 32 ビット UNIX タイムスタンプは、LindormTSDB に書き込む前に 1000 倍する必要があります。32 ビット UNIX タイムスタンプをそのまま書き込むと、意味解釈エラーが発生します。たとえば、1641009600 はレガシーシステムでは 2022-01-01 12:00:00 を表しますが、LindormTSDB では 1970-01-20 07:50:09 (UTC + 08:00) と解釈されます。

NULL 制約の動作:

重要

現在、Lindorm SQL は SQL レイヤーで NULL 制約を検証しません。検証はストレージエンジンが実施し、エンジンごとにルールが異なります。データの書き込みを確実に成功させるには、次の操作を行ってください。

  • すべてのプライマリキー列に NOT NULL を指定します。

  • プライマリキー以外のカラムには NOT NULL を指定しないでください。

プライマリキー

プライマリキーはテーブル内の行を一意に識別します。1 つ以上のカラムで構成され、テーブル作成時に必ず指定する必要があります。

重要

プライマリキーは作成後に変更できません。テーブル作成前に慎重に設計してください。

LindormTable のプライマリキー制限:

項目制限
単一のプライマリキー列の最大長2 KB
すべてのプライマリキー列の合計最大長30 KB
単一の非プライマリキー列の最大長2 MB

LindormTSDB のプライマリキー構造:

時系列テーブルでは、プライマリキー列は次の 2 つの異なるロールを果たします。

  • タグ列:VARCHAR 型のプライマリキー列。データソースを識別します。たとえば、IoT シナリオではデバイス ID、IoV シナリオでは車両識別子、モニタリングシナリオではアプリケーション ID または ip:port などです。

  • タイムスタンプ列:TIMESTAMP 型のプライマリキー列。テーブルごとに 1 つのみ許可されます。

プライマリキーには 1 つ以上の VARCHAR (タグ) 列を含めることができますが、TIMESTAMP 列は 1 つのみです。すべてのプライマリキー列は VARCHAR または TIMESTAMP 型である必要があります。

時系列テーブルのプライマリキー設計に関するガイダンスについては、「プライマリキー設計のベストプラクティス」をご参照ください。

インデックス式 (KEY|INDEX)

KEY または INDEX キーワードを CREATE TABLE 文内で使用すると、テーブル作成時にインデックスを作成できます。これにより、セカンダリインデックスおよび検索インデックスを作成できます。

重要

インデックス式は LindormTable 2.7.7 以降および Lindorm SQL 2.8.6.0 以降でのみサポートされています。バージョンの確認方法については、「LindormTable バージョンガイド」および「SQL バージョンガイド」をご参照ください。コンソールからスペックアップできない場合は、DingTalk の Lindorm テクニカルサポート (s0s3eg3) までご連絡ください。

インデックス命名: インデックス名を指定しない場合、システムは table_name_idx_${auto_increment_id} の形式で自動生成します。

セカンダリインデックスの冗長性 (INCLUDE を指定しない場合):

Lindorm SQL バージョンデフォルトの冗長性動作
2.9.3.10 以降カラムはデフォルトで冗長に格納されません
2.9.3.10 より前すべてのカラムがデフォルトで冗長に格納されます (INDEX_COVERED_TYPE=COVERED_ALL_COLUMNS_IN_SCHEMA に相当。動的テーブルの場合は COVERED_DYNAMIC_COLUMNS に相当)

KEY/INDEX 使用時のデフォルトテーブルプロパティ (MUTABILITY および CONSISTENCY を指定しない場合):

  • CONSISTENCY = 'strong'

  • MUTABILITY = 'MUTABLE_LATEST'

インデックス作成失敗時の残留状態: インデックス作成中に例外が発生した場合、テーブルおよびインデックスが残留状態のままとなり、自動的にクリアされません。SHOW 文および DESCRIBE 文では引き続き表示されますが、データの書き込みおよびクエリが失敗する可能性があります。手動で残留テーブルおよびインデックスを削除し、再度作成してください。

パーティション

パーティションは LindormTSDB のみでサポートされています。PARTITION BY で使用するカラムは、プライマリキー内の VARCHAR カラムである必要があります。

構文:PARTITION BY HASH(column1, column2, ..., columnN)

テーブルプロパティ

テーブルプロパティは、WITH キーワードを介して LindormTable のみがサポートしています。

オプションデフォルト説明
COMPRESSIONSTRINGなし (LindormTable 2.3.4 以降は ZSTD)圧縮アルゴリズム。有効な値:SNAPPYZSTDLZ4
TTLINT空 (期限なし)データの生存時間 (秒単位)。TTL を削除するには、空文字列を設定します。「ALTER TABLE の例」をご参照ください。
COMPACTION_MAJOR_PERIODLONGMath.Min(TTL, 1728000000) ms。TTL がない場合は 20 日 (1,728,000,000 ms)メジャーコンパクションの期間 (ミリ秒単位)。
MUTABILITYSTRINGMUTABLE_LATESTベーステーブルのミュータビリティ。インデックス動作に関連します。有効な値:IMMUTABLEIMMUTABLE_ROWSMUTABLE_LATESTMUTABLE_ALLMUTABLE_UDT。インデックス作成後は変更できません。変更する前にすべてのインデックスを削除してください。「高性能ネイティブセカンダリインデックス」をご参照ください。
CONSISTENCYSTRINGeventual整合性レベル。有効な値:eventualstrong。書き込み後の読み取り操作 (増分、追加、インデックス更新など) を伴うマルチゾーンインスタンスでは、strong に設定してください。
NUMREGIONSINTテーブルの事前作成リージョン数。
CHSINTホット/コールドデータ境界 (秒単位)。コールドストレージを有効にする必要があります。CHS_L2='storagetype=COLD' と併用する必要があります。「ホットデータとコールドデータの分離」をご参照ください。
STARTKEY および ENDKEY最初のプライマリキー列と同じ型事前作成リージョンパーティションの開始キーおよび終了キー。NUMREGIONS が必要です。サポートされる型:SMALLINTINTEGERBIGINTCHARVARCHARFLOATDOUBLE
SPLITKEYS最初のプライマリキー列と同じ型事前作成パーティションすべての開始キー (カンマ区切り)。LindormTable 2.5.4 以降でサポートされています。NUMREGIONSSTARTKEYENDKEY とは併用できません。二重引用符内のカンマは通常の文字として扱われます。サポートされる型:STARTKEY/ENDKEY と同じです。
SPLITALGOSTRING事前作成パーティションの分割アルゴリズム。有効な値:HexStringSplit (16 進数バイトで分割)、UniformSplit (元のバイト値で均等分割)。
DYNAMIC_COLUMNSSTRINGFalse動的カラムを有効にします。有効な値:TrueFalse。動的カラムは Varbinary 型のみをサポートします。「動的カラム」をご参照ください。
VERSIONSSTRING1カラム値ごとに保持するバージョン数。1 以上の整数である必要があります。大きな値はクエリおよびストレージパフォーマンスに影響するため、マルチバージョン保持が必要でない限り、1 のままにしてください。「マルチバージョンデータ管理」をご参照ください。
BLOB_BUCKET_NAMESTRINGBLOB カラムを持つテーブルの BUCKET を作成します。LindormTable 2.6.4 以降でサポートされています。BUCKET 名のルール:小文字、数字、ピリオド (.)、ハイフン (-)。長さ:3~63 文字。ハイフンで開始または終了してはいけません。ピリオドを連続させてはいけません。
LindormTable 2.2.16 より前のバージョンでは、WITH キーワードはサポートされていません。代わりに、プロパティキーワードを一重引用符で囲んでください。文字列値の場合は、値も一重引用符で囲んでください。例:CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';

使用例

基本テーブルの作成

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

DESCRIBE table sensor; を実行して、テーブルが作成されたことを確認します。

セカンダリインデックス付きテーブルの作成

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

確認方法:

  • DESCRIBE table sensor; を実行してテーブルを確認します。

  • SHOW INDEX FROM sensor; を実行してセカンダリインデックスを確認します。

TTL および圧縮アルゴリズムの設定

TTL を 30 日 (2,592,000 秒)、圧縮を 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');

確認方法:

  • DESCRIBE table sensor; を実行してテーブルを確認します。

  • クラスター管理システム概要 ページに移動し、テーブル名をクリックして、現在の詳細テーブル エリアの [テーブルプロパティの表示] をクリックし、COMPRESSION および TTL の値を確認します。

メジャーコンパクション期間の設定

メジャーコンパクション期間を 10 日 (864,000,000 ミリ秒) に設定します。

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

確認方法:DESCRIBE table sensor; を実行するか、クラスター管理システムの 現在の詳細テーブル エリアで [テーブルプロパティの表示] をクリックします。

動的カラムの有効化

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

確認方法:DESCRIBE table sensor; を実行するか、クラスター管理システムの 現在の詳細テーブル エリアで [テーブルプロパティの表示] をクリックします。

ホット/コールドデータ境界の設定

86,400 秒 (1 日) より古いデータをコールドストレージにアーカイブします。

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 はコールドストレージを有効にする必要があり、CHS_L2='storagetype=COLD' と併用する必要があります。

確認方法:DESCRIBE table sensor; を実行するか、クラスター管理システムの 現在の詳細テーブル エリアで [テーブルプロパティの表示] をクリックし、CHS および CHS_L2 の値を確認します。

複数プロパティの組み合わせ

圧縮、TTL、ホット/コールドデータ境界を同時に設定します。

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

確認方法:DESCRIBE table sensor; を実行するか、クラスター管理システムの 現在の詳細テーブル エリアで [テーブルプロパティの表示] をクリックし、COMPRESSIONCHSCHS_L2、および TTL の値を確認します。

開始キーおよび終了キーによるパーティションの事前作成

開始キー 1000、終了キー 9000 で 5 つのパーティションを事前作成します。STARTKEY および ENDKEY には NUMREGIONS が必要です。

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

確認方法:DESCRIBE table sensor; を実行するか、クラスター管理システムの シャード詳細 エリアに移動して、各シャードの startKey および endKey の値を確認します。

明示的な分割キーによるパーティションの事前作成

5 つの分割キーを指定して 6 つのパーティションを事前作成します。SPLITKEYSNUMREGIONSSTARTKEY、または 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');

確認方法:DESCRIBE table sensor; を実行するか、クラスター管理システムの シャード詳細 エリアで startKey および endKey の値を確認します。

パーティションキー列の指定

単一デバイスの瞬間データを対象とするクエリの場合、device_id をパーティションキー列として指定してデータ分散を制御します。

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

DESCRIBE TABLE sensor; を実行してテーブル作成結果を確認します。

時空間データテーブルの作成

任意の空間型 (GEOMETRY) — 任意の空間データ型を受け入れます:

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

任意の空間型のデータを書き込みます:

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

ポイント型のみ:

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

ポリゴン型のみ:

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

ラインストリング型のみ:

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

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

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

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

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

複数の空間カラム:

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