コンテンツにスキップ

DDL

DDL(Data Definition Language)は、テーブル、インデックス、ビュー、ROLLUPなどのデータベースオブジェクトを作成・変更・削除する構文です。

権限: 一般ユーザーがアクティブなデータベースでDDLを実行するには、GRANT DDL ON DATABASE database_name TO user_name;またはGRANT CREATE ON DATABASE database_name TO user_name;が必要です。詳細はGRANT/REVOKEを参照してください。

CREATE TABLE

create_table_stmt ::=
    'CREATE' table_type? 'TABLE' ['IF NOT EXISTS'] table_name
    '(' column_def ( ',' column_def )* ')'
    [ 'METADATA' '(' column_def ( ',' column_def )* ')' ]
    [ table_property_list ]
    [ 'TABLESPACE' tablespace_name ]
    [ 'WITH ROLLUP' rollup_interval_spec ]

table_type ::= 'LOG' | 'TAG' | 'VOLATILE' | 'LOOKUP' | 'TRANSACTION' | 'TXN'
-- table_typeを省略するとTRANSACTIONテーブルが作成されます。

column_def ::= column_name column_type
               [ 'PRIMARY KEY' ]
               [ 'NOT NULL' ]
               [ column_axis ]
               [ 'SUMMARIZED' ]
               [ 'DEFAULT' value ]
               [ 'PROPERTY' '(' column_property_list ')' ]

decimal_type ::= ( 'DECIMAL' | 'NUMERIC' | 'DEC' | 'FIXED' | 'NUMBER' )
                 [ '(' precision [ ',' scale ] ')' ]

array_type ::= ( 'SHORT' | 'INT16' | 'USHORT' | 'UINT16'
               | 'INTEGER' | 'INT' | 'INT32' | 'UINTEGER' | 'UINT32'
               | 'LONG' | 'INT64' | 'ULONG' | 'UINT64'
               | 'FLOAT' | 'DOUBLE' | decimal_type )
             '[' cardinality ']'

column_axis ::= 'BASETIME' | 'BASE TIME' | 'BASE DISTANCE' | 'BASEDISTANCE'

column_property_list ::=
    ( 'MINMAX_CACHE_SIZE' '=' number
    | 'PART_PAGE_COUNT'   '=' number
    | 'PAGE_VALUE_COUNT'  '=' number
    | 'MAX_CACHE_PART_COUNT' '=' number
    | 'SEQUENCE' '=' number )
    ( ',' column_property_list )*

table_property_list ::=
    ( 'TAG_PARTITION_COUNT'           '=' number
    | 'TAG_DATA_PART_SIZE'            '=' number
    | 'TAG_STAT_ENABLE'               '=' ( '0' | '1' )
    | 'TAG_DUPLICATE_CHECK_DURATION'  '=' number
    | 'VARCHAR_FIXED_LENGTH_MAX'      '=' number )
    ( ',' table_property_list )*

テーブルタイプ

キーワード説明
(なし)TRANSACTIONテーブル - リレーショナルデータとトランザクションに対応
LOGLOGテーブル - 時系列ログデータ。追加(INSERT)中心で、一般的なUPDATEは不可
TAGTAGテーブル - タグ名・時刻・値の構造の時系列データ。BASETIME列が必須
LOOKUPLOOKUPテーブル - メモリ常駐。PRIMARY KEYが必須。DML全体に対応
VOLATILEVOLATILEテーブル - メモリ常駐。サーバー再起動時にデータが消失。PRIMARY KEYは任意
TRANSACTION, TXNTRANSACTIONテーブル - 正式名と短縮形は同じテーブルを作成

タイプ指定のないCREATE TABLECREATE TRANSACTION TABLECREATE TXN TABLEは、すべてTRANSACTIONテーブルを作成します。 LOGテーブルの作成にはCREATE LOG TABLEを使用します。 以前の公開名称RDBTRXは、テーブルタイプの別名としてサポートしていません。 TRANSACTIONはStandard Edition専用のため、Cluster Editionでは3つの作成構文がすべて拒否されます。

DECIMALはすべてのテーブルタイプで使用できます。精度は1~65、小数桁数は0~30で、小数桁数は精度を超えられません。 詳細はDECIMALとNUMERIC固定小数点型を参照してください。

Machbase DBMS 8.7.0のARRAYは、数値要素型の後に1..1024範囲の要素数を指定します。 サポート型とテーブル別の制約は、数値ARRAY型を参照してください。

-- LOGテーブルの作成: LOGキーワードを明示します。
CREATE LOG TABLE sensor_log (
    id      INTEGER,
    name    VARCHAR(64),
    value   DOUBLE,
    status  VARCHAR(20)
);

-- TAGテーブルの作成(BASETIME必須。SUMMARIZEDはROLLUP対象列に指定)
CREATE TAG TABLE tag (
    name  VARCHAR(40) PRIMARY KEY,
    time  DATETIME BASETIME,
    value DOUBLE SUMMARIZED
);

-- TAGテーブル + メタデータ + プロパティ
CREATE TAG TABLE sensors (
    name     VARCHAR(40) PRIMARY KEY,
    time     DATETIME BASETIME,
    value    DOUBLE SUMMARIZED
) METADATA (
    location VARCHAR(100),
    unit     VARCHAR(20)
) TAG_PARTITION_COUNT = 4;

-- LOOKUPテーブル(PRIMARY KEY必須)
CREATE LOOKUP TABLE devices (
    device_id  VARCHAR(40) PRIMARY KEY,
    ip         IPV4,
    status     VARCHAR(20)
);

-- VOLATILEテーブル
CREATE VOLATILE TABLE cache_data (
    id    INTEGER PRIMARY KEY,
    value DOUBLE
);

-- TRANSACTIONテーブルの正確な固定小数点列
CREATE TRANSACTION TABLE invoice (
    id      LONG PRIMARY KEY,
    amount  DECIMAL(18,2),
    tax     NUMERIC(18,4)
);

-- IF NOT EXISTSの使用
CREATE TAG TABLE IF NOT EXISTS tag (
    name  VARCHAR(40) PRIMARY KEY,
    time  DATETIME BASETIME,
    value DOUBLE SUMMARIZED
);

-- NOT NULL制約
CREATE TABLE t1 (
    c1 INTEGER NOT NULL,
    c2 VARCHAR(200)
);

定義済みシステム列

次のシステム列が提供されます。

説明
_ARRIVAL_TIMEDATETIMELOGテーブルだけで提供。レコードの挿入時刻で、DURATIONクエリの基準
_RIDLONGLOGテーブルとTAGテーブルの内部データテーブルで提供。レコードの一意識別子で、ユーザーによる直接指定は不可

DROP TABLE

drop_table_stmt ::= 'DROP TABLE' table_name

指定テーブルと、そのすべてのデータ・インデックスを削除します。 他のセッションがそのテーブルを検索中の場合はエラーになります。

DROP TABLE sensor_log;

ALTER TABLE

ALTER TABLEはテーブルのスキーマを変更します。使用可能なサブ構文はテーブルタイプによって異なります。 TRANSACTIONはADD COLUMNDROP COLUMNRENAME COLUMNRENAME TOに対応します。 TAGのメタデータ列には、METADATA ADD COLUMNMETADATA DROP COLUMNを使用します。

ADD COLUMN

alter_table_add_stmt ::=
    'ALTER TABLE' table_name [ 'METADATA' ] 'ADD COLUMN'
    '(' column_name column_type [ 'DEFAULT' value ] ')'
-- 列の追加
ALTER TABLE sensor_log ADD COLUMN (quality FLOAT);

-- TRANSACTION列の追加
ALTER TABLE product_master ADD COLUMN (stock_qty INTEGER DEFAULT 0);

-- デフォルト値とともに追加
ALTER TABLE sensor_log ADD COLUMN (flag INTEGER DEFAULT 0);
ALTER TABLE sensor_log ADD COLUMN (tag_ip IPV4 DEFAULT '192.168.0.1');

-- ARRAY列とDEFAULTの追加
ALTER TABLE sensor_log
    ADD COLUMN (channels INT32[3] DEFAULT [1, NULL, 3]);

-- TAG METADATA ARRAY列の追加
ALTER TABLE sensor_tag METADATA
    ADD COLUMN (limits DECIMAL(12,4)[2] DEFAULT [0.0000, NULL]);

DECIMAL(p)[n]のARRAYで小数桁数を省略すると、0として処理します。 ARRAY DEFAULTの要素数は、宣言した要素数と正確に一致する必要があります。 不正な要素型、要素数、精度、小数桁数、ネスト・多次元宣言、長さの異なるDEFAULTでは、列を部分的に作成せず文全体が失敗します。

ARRAY ADD COLUMNのサポート範囲

Editionテーブルまたは列領域対応既存行の明示的DEFAULT
StandardLOGO適用
StandardVOLATILEO適用せず、列全体のNULLを保持
StandardLOOKUPO適用
StandardTRANSACTIONO適用
StandardTAG METADATAO適用
StandardTAG DATAの一般列X-
ClusterLOGO適用
Clusterその他のテーブルまたはTAG METADATAX-

DEFAULTがなければ、対応するすべてのテーブルで、ALTER前から存在する行の新しいARRAY列は列全体がNULLになります。 TAG DATAの一般ARRAY列はCREATE TABLEで宣言できますが、ALTERで追加できません。 型とNULLの仕様は、数値ARRAY型を参照してください。

DROP COLUMN

alter_table_drop_stmt ::=
    'ALTER TABLE' table_name [ 'METADATA' ]
    'DROP COLUMN' '(' column_name ')'
ALTER TABLE sensor_log DROP COLUMN (quality);
ALTER TABLE product_master DROP COLUMN (stock_qty);
ALTER TABLE sensor_log DROP COLUMN (channels);
ALTER TABLE sensor_tag METADATA DROP COLUMN (limits);

RENAME COLUMN

alter_table_column_rename_stmt ::=
    'ALTER TABLE' table_name 'RENAME COLUMN' old_column_name 'TO' new_column_name
ALTER TABLE sensor_log RENAME COLUMN status TO device_status;
ALTER TABLE product_master RENAME COLUMN name TO product_name;

MODIFY COLUMN

alter_table_modify_stmt ::=
    'ALTER TABLE' table_name 'MODIFY COLUMN'
    ( '(' column_name 'VARCHAR' '(' new_size ')' ')'
    | column_name ( 'NOT NULL' [ 'NOCHECK' ] | 'NULL'
                  | 'SET' 'MINMAX_CACHE_SIZE' '=' value ) )

次の長さ拡張とMINMAXの例は、LOGテーブルを対象にします。 既存VARCHARの長さは拡張できますが、縮小や他の型からVARCHARへの変換はできません。 LOGの新しい長さは最大32,767バイトです。 MINMAX_CACHE_SIZEは、LOGのサポートされる固定長列に適用し、VARCHAR・TEXTなどの可変長列には適用できません。

LOGでオプションなしのNOT NULLは既存行も検査します。 NOCHECKはその検査を省略するだけで、既存NULLを埋めるオプションではありません。 NULLはその制約を解除します。 TAGにはこの範囲を一括で適用せず、TAG列の変更の別の制約を確認してください。 TRANSACTIONテーブルはMODIFY COLUMNをサポートしていません。

-- VARCHARの長さ拡張(縮小は不可)
ALTER TABLE sensor_log MODIFY COLUMN (name VARCHAR(128));

-- NOT NULLの追加
ALTER TABLE sensor_log MODIFY COLUMN id NOT NULL;

-- NOT NULLの解除
ALTER TABLE sensor_log MODIFY COLUMN id NULL;

-- MINMAX_CACHE_SIZEの変更
ALTER TABLE sensor_log MODIFY COLUMN id SET MINMAX_CACHE_SIZE = 10240;

RENAME TO

alter_table_rename_stmt ::=
    'ALTER TABLE' table_name 'RENAME TO' new_name
-- TRANSACTIONテーブルでサポート
ALTER TABLE product_master RENAME TO product_catalog;

ADD / DROP RETENTION

Retentionの適用・解除構文は、RETENTION構文を参照してください。


TRUNCATE TABLE

truncate_table_stmt ::= 'TRUNCATE TABLE' table_name

テーブルの全データを削除します。他のセッションがそのテーブルを検索中の場合はエラーになります。

TRUNCATE TABLE sensor_log;

CREATE INDEX

インデックスタイプ、テーブル別のサポート範囲、JSONパス、属性は、INDEX構文を参照してください。


DROP INDEX

削除構文と制約は、INDEX構文を参照してください。


CREATE TABLESPACE

create_tablespace_stmt ::=
    'CREATE TABLESPACE' tablespace_name 'DATADISK' datadisk_list

datadisk_list ::= data_disk ( ',' data_disk )*

data_disk ::= disk_name
    '(' 'DISK_PATH' '=' '"' path '"'
        [ ',' 'PARALLEL_IO' '=' number ]
    ')'
-- 単一ディスクのテーブルスペース
CREATE TABLESPACE tbs1 DATADISK disk1 (DISK_PATH="tbs1_disk1");

-- 並列I/O設定
CREATE TABLESPACE tbs2 DATADISK disk1 (DISK_PATH="tbs2_disk1", PARALLEL_IO = 5);

-- 複数ディスク
CREATE TABLESPACE tbs3
  DATADISK disk1 (DISK_PATH="tbs3_d1", PARALLEL_IO = 10),
           disk2 (DISK_PATH="tbs3_d2"),
           disk3 (DISK_PATH="tbs3_d3");

DROP TABLESPACE

drop_tablespace_stmt ::= 'DROP TABLESPACE' tablespace_name
DROP TABLESPACE tbs1;

テーブルスペースに作成されたオブジェクトがある場合は、削除できません。


CREATE ROLLUP

基本・条件付き・Custom ROLLUPの構文は、ROLLUP構文を参照してください。


DROP ROLLUP

削除構文は、ROLLUP構文を参照してください。


ALTER ROLLUP

開始・停止・強制実行・周期変更は、ROLLUP構文を参照してください。


CREATE RETENTION

作成構文とテーブルへの適用は、RETENTION構文を参照してください。


DROP RETENTION

削除構文と解除順序は、RETENTION構文を参照してください。


DDLの同時実行性とロック

Machbase 8.7.0 Standard Editionは、独立したオブジェクトのDDLをオブジェクト単位で調整します。 したがって、同じデータベースで異なる名前のLOG、TAG、VOLATILE、LOOKUP、TRANSACTIONテーブルを作成・変更するDDLは、同時に進行できます。

Edition独立オブジェクトのDDL競合範囲競合時の待機設定
Standard同時に進行可能同じオブジェクトと直接関連するオブジェクトDDL_LOCK_TIMEOUT
Cluster既存ポリシーに従って直列化カタログ範囲DDL_LOCK_TIMEOUTは提供しない

独立したオブジェクトのDDLが同時に開始しても、メタデータ処理やストレージI/Oなどの共通処理を共有する場合があります。 そのため、クライアント数に比例したスループット向上や、すべてのDDLの同時完了は保証しません。

競合するオブジェクト

同時実行の状況動作
名前が異なる独立テーブルテーブルタイプに関係なく同時に進行可能
同じオブジェクト、または同名オブジェクト1つのDDLだけが進み、他は待機またはエラー
テーブルの変更・削除DDLと、そのテーブルのインデックスDDL関連するオブジェクトとして処理
ビューDDLと、ビューが参照するテーブルの変更・削除DDL関連するオブジェクトとして処理
TAGテーブルの変更・削除DDLと、そのROLLUPまたはRetentionのDDL関連するオブジェクトとして処理
DROP VIEWCREATE OR REPLACE VIEW、システム範囲のDDLより広い範囲で直列化される場合がある

テーブルタイプが異なっても、同じテーブル名は1つの名前空間を使用します。 例えば、同名のLOGとTAGテーブルを同時に作成すると、どちらか1つだけが作成されます。

DDLロックの待機時間

Standard Editionでは、DDL_LOCK_TIMEOUTで競合するDDLロックの待機時間を秒単位で設定します。

動作
0待機せず直ちにERR-02031: Resource busy (<object>)を返す
正数指定時間まで待機し、ロックを取得できなければERR-02031を返す

エラーメッセージの括弧内には、代表的な競合オブジェクトが表示されます。 広い範囲で競合したDDLは、オブジェクト名の代わりにDDLと表示される場合があります。

デフォルトは0、設定範囲は01000000です。 現在のセッションの値を変更するには、次の文を実行します。

ALTER SESSION SET DDL_LOCK_TIMEOUT = 10;

1つのDDLが複数のロック段階を経ても、待機時間は段階ごとに再開始されません。 ロック取得後にオブジェクトと依存関係を再確認するため、先行DDLの結果に応じて、 already existstable not foundなどの一般的なSQLエラーが返される場合があります。

DDL_LOCK_TIMEOUTはDDLロックの待機時間だけを制限し、SQL全体の実行時間は制限しません。 実行中のDDLは開始時点の値を継続して使用し、ALTER SESSIONで変更した値は次のDDLから適用されます。 DDLのコミットと復旧動作は以前のバージョンと同じで、新たな暗黙的コミットは行いません。

設定単位制限対象
DDL_LOCK_TIMEOUTStandard EditionのDDLロック待機
SESSION_QUERY_TIMEOUT_SEC / QUERY_TIMEOUTクエリ実行と応答待機
TRANSACTION_BUSY_TIMEOUT_MSミリ秒TRANSACTIONテーブルの同時書き込み競合待機

関連文書

最終更新日