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

:CREATE TABLE

最終更新日:Jan 14, 2025

このトピックでは、ジオメトリデータ型をサポートするテーブルを作成するために使用される構文について説明します。

構文

create_table_statement ::=  CREATE TABLE [ IF NOT EXISTS ] table_name
                            '('
                                column_definition
                                ( ',' column_definition )*
                                 ',' [constraint pk]  PRIMARY KEY '(' primary_key ')' 
                            ')' WITH [ table_options ]
column_definition      ::=  column_name lql_type 
primary_key            ::=  primary_item [ ',' primary_item ]
primary_item           ::=  column_name (ASC|DESC)
                            | [z-order] '(' [ column_name ( ',' column_name )* ] ')'
説明

この構文は IF NOT EXISTS をサポートしています。1 つ以上の列をプライマリキーとして指定できます。

パラメーター

テーブル名(table_identifier)

テーブル名は、次の要件を満たしている必要があります。

  • 名前には、数字、文字、カンマ( , )、ハイフン( - )、アンダースコア( _ )を含めることができます。

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

  • 名前は 1 ~ 255 文字の長さでなければなりません。

列定義(column_definition

オプション

必須

説明

列名(column_identifier)

はい

  • 名前には、数字、文字、カンマ( , )、ハイフン( - )、アンダースコア( _ )を含めることができます。

  • 列名には、システム予約キーワードを含めることはできません。

  • 名前は 255 文字を超えることはできません。

データ型(data type)

はい

この構文でサポートされているデータ型の詳細については、「データ型」をご参照ください。

重要

時系列テーブルを作成するときに TIMESTAMP 型を指定する場合は、次の点に注意してください。

  • 時系列テーブルでは、TIMESTAMP データ型の列を 1 つだけ指定できます。

  • LindormTSDB は、北京時間(GMT+8)に基づいてタイムスタンプをエンコードおよび解析します。

  • 古いシステムの UNIX タイムスタンプは、引き続き 32 ビット値に解析されます。これらのタイムスタンプを LindormTSDB に挿入する前に、タイムスタンプに 1000 を乗算することをお勧めします。タイムスタンプを変換せずに LindormTSDB に挿入すると、LindormTSDB はタイムスタンプを期待どおりに解析できません。たとえば、1641009600 タイムスタンプは、古いシステムでは 2022-01-01 12:00:00 として解析されます。LindormTSDB は、タイムスタンプを 1970-01-20 07:50:09(GMT+8) として解析します。

NULL 制約

いいえ

このオプションの値を NULL にできるかどうかを指定します。

重要

Lindorm SQL は、オプションの NULL 値を検証しません。これらの値はエンジンによって検証されます。

NULL 値の検証方法は、エンジンの検証ルールによって異なります。検証ルールはエンジンによって異なります。したがって、このオプションを NOT NULL に設定しても、NULL 値がテーブルに書き込まれる可能性があります。

データがテーブルに書き込まれるようにするには、次の要件に注意してください。

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

  • プライマリキー以外の列の定義では NOT NULL を指定しないことをお勧めします。

プライマリキー(primary_key)

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

CREATE TABLE 構文を使用してテーブルを作成する場合は、次の表に記載されている項目に注意してください。

エンジン

プライマリキーの使用法

LindormTable

  • 単一のプライマリキー列の長さは最大 2 KB です。

  • すべてのプライマリキー列の合計の長さは 30 KB を超えることはできません。

  • プライマリキーに含まれていない列の長さは最大 2 MB です。

LindormTSDB

  • 時系列テーブルのプライマリキー列では、VARCHAR データ型の列はTAG 列と呼ばれます。TIMESTAMP データ型の列は、タイムスタンプ列と呼ばれます。

  • プライマリキーには、VARCHAR 型または TIMESTAMP 型の列のみを含めることができます。

  • プライマリキーには、VARCHAR 型の列を 1 つ以上含めることができますが、TIMESTAMP 型の列は 1 つだけ含めることができます。

  • 時系列テーブルのデータを一意に識別できる値をテーブルのプライマリキーとして使用することをお勧めします。たとえば、IoT シナリオではデバイス ID をプライマリキーとして使用し、IoV シナリオでは車両 VIN をプライマリキーとして使用し、監視シナリオではアプリケーション ID または ip:port 文字列をプライマリキーとして使用できます。詳細については、「時系列テーブルの設計」トピックの「プライマリキーを設計するためのベストプラクティス」セクションをご参照ください。

インデックス式(KEY|INDEX

CREATE TABLE ステートメントを使用してインデックステーブルを作成するには、KEY または INDEX キーワードを使用して、作成するインデックスを指定できます。

重要

インデックス式(KEY|INDEX)は、LindormTable 2.7.7 以降および Lindorm SQL 2.8.6.0 以降でのみサポートされています。 LindormTable と Lindorm SQL のバージョンの確認方法の詳細については、「LindormTable のリリースノート」および「SQL のバージョン」をご参照ください。 コンソールでエンジンを必要なバージョンに更新できない場合は、Lindorm テクニカルサポート(DingTalk ID:s0s3eg3)にお問い合わせください。

インデックス式を使用する場合は、次の項目に注意してください。 インデックス名を明示的に指定しない場合、システムはインデックス名を生成します。形式:<table_name>_idx_${auto-increment number}セカンダリインデックス検索インデックスは、インデックス式を使用してのみ作成できます。インデックスタイプの詳細については、「CREATE INDEX」トピックの「インデックスタイプ(index_method_definition)」セクションをご参照ください。 セカンダリインデックスを作成し、INCLUDE 式を指定しない場合、作成されたインデックスにはすべての列が含まれます。これは、インデックス属性 INDEX_COVERED_TYPECOVERED_ALL_COLUMNS_IN_SCHEMA に設定することと同じです。作成されたテーブルが動的テーブルの場合、インデックス属性 INDEX_COVERED_TYPECOVERED_DYNAMIC_COLUMNS に設定することと同じです。

説明

INDEX_COVERED_TYPE 属性の詳細については、「CREATE INDEX」トピックの「インデックス属性(index_options)」セクションをご参照ください。

KEY または INDEX 句を指定しても、MUTABILITY および CONSISTENCY 属性を明示的に指定しない場合、テーブルには CONSISTENCY ='strong' および MUTABILITY='MUTABLE_LATEST' の 2 つのテーブル属性があります。

説明

CONSISTENCY および MUTABILITY 属性の詳細については、「CREATE TABLE」トピックの「テーブル属性(table_options)」セクションをご参照ください。

CREATE TABLE ステートメントにインデックス式が含まれている場合、システムは最初にテーブルを作成し、次にインデックスを作成します。インデックスの作成中に例外が発生した場合、作成されたテーブルとインデックスはデータベースに残る可能性があり、自動的にクリアまたは削除されません。SHOWDESCRIBE などのステートメントを実行することで、テーブルとインデックスを表示できますが、テーブルまたはインデックスにデータを書き込んだり、クエリを実行したりできない場合があります。テーブルとインデックスをクリアしてから再作成することをお勧めします。

パーティショニング(partition_definition

パーティショニングは、LindormTSDB でのみサポートされています。時系列テーブルでは、PARTITION BY 句で指定されたパーティションキー列は、プライマリキーで定義された VARCHAR 列である必要があります。

テーブルを作成するときに、PARTITION BY HASH(column1, column2, ..., columnN) 句を使用して、テーブルでハッシュパーティショニングを実行する列を指定できます。例:PARTITION BY HASH(c1, p1)

テーブル属性(table_options)

このパラメーターは、LindormTable でのみサポートされています。WITH キーワードを使用して、次の表に記載されている属性を作成するテーブルに追加できます。

属性(option_identifer

タイプ

説明

COMPRESSION

STRING

テーブル内のデータを圧縮するために使用されるアルゴリズム。有効な値:

  • SNAPPY

  • ZSTD

  • LZ4

説明

バージョン 2.3.4 より前の LindormTable では、デフォルトでは圧縮アルゴリズムは使用されません。LindormTable 2.3.4 以降では、デフォルトで ZSTD アルゴリズムが使用されます。

TTL

INT

テーブル内のデータの TTL 値。単位:秒。

説明
  • デフォルトでは、この属性の値は null であり、これはテーブル内のデータが期限切れにならないことを示します。

  • この属性を TTL=<指定時間> 形式で構成して、テーブルの TTL を指定できます。また、この属性をヌル文字列に設定して、構成済みの TTL をキャンセルすることもできます。詳細については、「ALTER TABLE」トピックの「」セクションをご参照ください。

COMPACTION_MAJOR_PERIOD

LONG

major compaction 操作が実行される間隔。単位:ミリ秒。詳細については、「ALTER TABLE」トピックの「major compaction 操作が実行される間隔を指定する」セクションをご参照ください。

説明

デフォルトの間隔は、次の式を使用して計算されます。Math.Min(TTL,1728000000ms)。TTL を指定しない場合、この属性の値はデフォルトで 1728000000 ミリ秒(20 日に相当)に設定されます。

MUTABILITY

STRING

インデックスに関連する属性。このオプションは、ベーステーブルの変更可能性を指定します。デフォルト値:MUTABLE_LATEST。

有効な値:

  • IMMUTABLE

  • IMMUTABLE_ROWS

  • MUTABLE_LATEST

  • MUTABLE_ALL

値の詳細については、「セカンダリインデックス」をご参照ください。

重要

MUTABILITY 属性の値は、インデックステーブルを作成した後は変更できません。

CONSISTENCY

STRING

テーブルの整合性レベル。デフォルト値:eventual。クロスゾーンインスタンスの場合、このパラメーターはプライマリテーブルとセカンダリテーブル間のデータ整合性を指定します。有効な値:

  • eventual:最終的に整合性があります

  • strong:整合性が強いです

重要

クロスゾーンインスタンスの場合、増加、追加、およびインデックス更新操作でデータを読み取ってから書き込む場合、プライマリテーブルとセカンダリテーブル間のデータ整合性を確保するために、プライマリテーブルの CONSISTENCY パラメーターを strong に設定する必要があります。

NUMREGIONS

INT

作成するテーブルのデータリージョンの数。

CHS

INT

コールドストレージを使用してデータが保存されるまでの時間。単位:秒。

説明
  • この属性を構成するには、インスタンスのコールドストレージを有効にする必要があります。コールドストレージの詳細については、「概要」をご参照ください。

  • この属性を構成する場合は、CHS_L2 属性も storagetype=COLD に設定する必要があります。

STARTKEY および ENDKEY

PRIMARY KEY で指定されたプライマリキーの最初の列と同じデータ型

各リージョンの開始キーと終了キー。

説明
  • STARTKEY および ENDKEY 属性は、NUMREGIONS 属性と一緒に指定する必要があります。NUMREGIONS 属性が指定されていない場合、STARTKEY および ENDKEY 属性は有効になりません。

  • STARTKEY および ENDKEY 属性に文字列値を指定する場合、文字列はプライマリキーの最初の列と同じデータ型の値に暗黙的に変換されます。STARTKEY および ENDKEY 属性では、次のデータ型のみがサポートされています。

    • SMALLINT

    • INTEGER

    • BIGINT

    • CHAR

    • VARCHAR

    • FLOAT

    • DOUBLE

SPLITKEYS

PRIMARY KEY で指定されたプライマリキーの最初の列と同じデータ型

事前に分割されたすべてのリージョンの開始キー。

説明
  • この属性は、LindormTable 2.5.4 以降のバージョンでサポートされています。

  • この属性の値は、事前に分割された各リージョンの開始キーを指定する一連の文字列です。文字列はカンマ( , )で区切られます。ただし、二重引用符で囲まれたカンマ( , )は、開始キーの区切り文字ではなく、通常の文字として識別されます。

  • この属性は、NUMREGIONS、STARTKEY、および ENDKEY 属性と一緒に指定することはできません。

  • SPLITKEYS に文字列値を指定する場合、文字列はプライマリキーの最初の列と同じデータ型の値に暗黙的に変換されます。SPLITKEYS 属性では、次のデータ型のみがサポートされています。

    • SMALLINT

    • INTEGER

    • BIGINT

    • CHAR

    • VARCHAR

    • FLOAT

    • DOUBLE

SPLITALGO

STRING

事前パーティショニングに使用される分割アルゴリズム。次の 2 つのアルゴリズムがサポートされています。

  • HexStringSplit:16 進バイトに基づいてプライマリキーを分割します。

  • UniformSplit:プライマリキーの元のバイトに基づいてプライマリキーを均等に分割します。

DYNAMIC_COLUMNS

STRING

動的列を有効にするかどうかを指定します。デフォルト値:False。有効な値:

  • True:テーブルの動的列を有効にします。

  • False:テーブルの動的列を無効にします。

説明

動的列は、VARBINARY データ型のみをサポートします。動的列の詳細については、「動的列」をご参照ください。

VERSIONS

STRING

列データに保持されるバージョンの数。このパラメーターの値は、1 以上の整数です。このパラメーターのデフォルト値は 1 であり、これは列データに 1 つのバージョンのみが保持されることを示します。Lindorm では、列データの複数のバージョンを保持できます。詳細については、「ヒントを使用してデータバージョニングを実装する」をご参照ください。

重要

VERSIONS を大きな値に設定すると、テーブルのクエリとストレージのパフォーマンスが低下する可能性があります。この属性を大きな値に設定しないことをお勧めします。推奨値:1。

BLOB_BUCKET_NAME

STRING

BLOB 列を含むテーブル用に作成される OSS バケットの名前。

バケット名は、次の要件を満たしている必要があります。

  • 名前には、小文字、数字、ピリオド( . )、ハイフン( - )のみを含めることができます。

  • 名前は 3 ~ 63 文字の長さでなければなりません。

  • 名前はハイフン( - )で始めることも終わることもできません。

  • 名前に連続したピリオド( .. )を含めることはできません。

説明
  • この属性は、LindormTable 2.6.4 以降でサポートされています。

  • テーブルを作成するときに BLOB 列を指定せずに BLOB_BUCKET_NAME 属性を構成した場合、Lindorm は指定されたバケット名の有効性をチェックしません。

説明

バージョン 2.2.16 より前の LindormTable は、WITH キーワードをサポートしていません。この場合、属性名を一対の引用符( ' )で囲む必要があります。属性値は、属性のデータ型に基づいて構成できます。属性値が文字列の場合、文字列を一対の引用符( ' )で囲む必要があります。例:CREATE TABLE IF NOT EXISTS t1(c1 varchar, c2 bigint, c3 int, c4 int, PRIMARY KEY(c1,c2)) 'CONSISTENCY'='strong';

  • 次のステートメントを実行して、すべてのジオメトリデータ型をサポートするテーブルを作成できます。

    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))'));
  • 次のステートメントを実行して、LineString オブジェクトのみをサポートするテーブルを作成できます。

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

    次のステートメントを実行して、LineString オブジェクトをテーブルに書き込むことができます。

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

    次のステートメントを実行して、MultiPoint オブジェクトをテーブルに書き込むことができます。

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

    次のステートメントを実行して、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))'));
  • 次のステートメントを実行して、MultiPolygon オブジェクトのみをサポートするテーブルを作成できます。

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

    次のステートメントを実行して、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)))'));
  • 次のステートメントを実行して、GeometryCollection オブジェクトのみをサポートするテーブルを作成できます。

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

    次のステートメントを実行して、GeometryCollection オブジェクトをテーブルに書き込むことができます。

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