このトピックでは、ジオメトリデータ型をサポートするテーブルを作成するために使用される構文について説明します。
構文
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) | はい |
|
データ型(data type) | はい | この構文でサポートされているデータ型の詳細については、「データ型」をご参照ください。 重要 時系列テーブルを作成するときに TIMESTAMP 型を指定する場合は、次の点に注意してください。
|
NULL 制約 | いいえ | このオプションの値を NULL にできるかどうかを指定します。 重要 Lindorm SQL は、オプションの NULL 値を検証しません。これらの値はエンジンによって検証されます。 NULL 値の検証方法は、エンジンの検証ルールによって異なります。検証ルールはエンジンによって異なります。したがって、このオプションを NOT NULL に設定しても、NULL 値がテーブルに書き込まれる可能性があります。 データがテーブルに書き込まれるようにするには、次の要件に注意してください。
|
プライマリキー(primary_key)
テーブルのプライマリキーは、テーブル内のデータを一意に識別します。プライマリキーは、1 つ以上の列で構成されます。テーブルを作成するときは、プライマリキーを指定する必要があります。
CREATE TABLE 構文を使用してテーブルを作成する場合は、次の表に記載されている項目に注意してください。
エンジン | プライマリキーの使用法 |
LindormTable |
|
LindormTSDB |
|
インデックス式(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_TYPE を COVERED_ALL_COLUMNS_IN_SCHEMA に設定することと同じです。作成されたテーブルが動的テーブルの場合、インデックス属性 INDEX_COVERED_TYPE を COVERED_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 ステートメントにインデックス式が含まれている場合、システムは最初にテーブルを作成し、次にインデックスを作成します。インデックスの作成中に例外が発生した場合、作成されたテーブルとインデックスはデータベースに残る可能性があり、自動的にクリアまたは削除されません。SHOW や DESCRIBE などのステートメントを実行することで、テーブルとインデックスを表示できますが、テーブルまたはインデックスにデータを書き込んだり、クエリを実行したりできない場合があります。テーブルとインデックスをクリアしてから再作成することをお勧めします。
パーティショニング(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 | テーブル内のデータを圧縮するために使用されるアルゴリズム。有効な値:
説明 バージョン 2.3.4 より前の LindormTable では、デフォルトでは圧縮アルゴリズムは使用されません。LindormTable 2.3.4 以降では、デフォルトで ZSTD アルゴリズムが使用されます。 |
TTL | INT | テーブル内のデータの TTL 値。単位:秒。 説明
|
COMPACTION_MAJOR_PERIOD | LONG |
説明 デフォルトの間隔は、次の式を使用して計算されます。Math.Min(TTL,1728000000ms)。TTL を指定しない場合、この属性の値はデフォルトで 1728000000 ミリ秒(20 日に相当)に設定されます。 |
MUTABILITY | STRING | インデックスに関連する属性。このオプションは、ベーステーブルの変更可能性を指定します。デフォルト値:MUTABLE_LATEST。 有効な値:
値の詳細については、「セカンダリインデックス」をご参照ください。 重要 MUTABILITY 属性の値は、インデックステーブルを作成した後は変更できません。 |
CONSISTENCY | STRING | テーブルの整合性レベル。デフォルト値:eventual。クロスゾーンインスタンスの場合、このパラメーターはプライマリテーブルとセカンダリテーブル間のデータ整合性を指定します。有効な値:
重要 クロスゾーンインスタンスの場合、増加、追加、およびインデックス更新操作でデータを読み取ってから書き込む場合、プライマリテーブルとセカンダリテーブル間のデータ整合性を確保するために、プライマリテーブルの CONSISTENCY パラメーターを |
NUMREGIONS | INT | 作成するテーブルのデータリージョンの数。 |
CHS | INT | コールドストレージを使用してデータが保存されるまでの時間。単位:秒。 説明
|
STARTKEY および ENDKEY | PRIMARY KEY で指定されたプライマリキーの最初の列と同じデータ型 | 各リージョンの開始キーと終了キー。 説明
|
SPLITKEYS | PRIMARY KEY で指定されたプライマリキーの最初の列と同じデータ型 | 事前に分割されたすべてのリージョンの開始キー。 説明
|
SPLITALGO | STRING | 事前パーティショニングに使用される分割アルゴリズム。次の 2 つのアルゴリズムがサポートされています。
|
DYNAMIC_COLUMNS | STRING | 動的列を有効にするかどうかを指定します。デフォルト値:False。有効な値:
説明 動的列は、VARBINARY データ型のみをサポートします。動的列の詳細については、「動的列」をご参照ください。 |
VERSIONS | STRING | 列データに保持されるバージョンの数。このパラメーターの値は、1 以上の整数です。このパラメーターのデフォルト値は 1 であり、これは列データに 1 つのバージョンのみが保持されることを示します。Lindorm では、列データの複数のバージョンを保持できます。詳細については、「ヒントを使用してデータバージョニングを実装する」をご参照ください。 重要 VERSIONS を大きな値に設定すると、テーブルのクエリとストレージのパフォーマンスが低下する可能性があります。この属性を大きな値に設定しないことをお勧めします。推奨値:1。 |
BLOB_BUCKET_NAME | STRING | BLOB 列を含むテーブル用に作成される OSS バケットの名前。 バケット名は、次の要件を満たしている必要があります。
説明
|
バージョン 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));