DWH InfiniDB community edition の制約事項
前回、InfiniDBでフリー版にもかかわらず、制限事項が少なくてうれしいとか書いちゃいましたが、制限事項は一応あります。そんなものをメモがてらに纏めてみました。
・ not null は使えません not null制約をDDLに含めることはできません [sql] mysql> create table t1 (id int,detail char(10) not null) engine=infinidb; ERROR 138 (HY000): Constraint is not supported by InfiniDB.
だめだと思ってたけど、null 状態から、alter table でカラム属性変えようとしても
mysql> create table t1 (id int,detail char(10)) engine=infinidb; Query OK, 0 rows affected (1.11 sec)
mysql> ALTER TABLE t1 MODIFY COLUMN id int NOT NULL; ERROR 138 (HY000): The syntax or the data type(s) is not supported by InfiniDB. Please check the InfiniDB syntax guide for supported syntax or data types. [/sql]
・キーおよび、インデクスは生成できません。 Infinidb自体、『列指向』のデータベースのため、インデクスを張るということ自体意味がないものなので指定するとエラーがでます。
[sql] mysql> create index idx_id on t1(id); ERROR 1121 (42000): Table handler doesn't support NULL in given index. Please change column 'id' to be NOT NULL or use another handler
なんかできるっぽいメッセージがでるのですが、そもそもCREATE INDEX自体無理
もちろん、primary key 指定も無理
mysql> create table t1 (id int PRIMARY KEY,detail char(10)) engine=infinidb; ERROR 138 (HY000): Constraint is not supported by InfiniDB. [/sql]
・デフォルト値は生成できません まあ、DWHなのにデフォルトとかねーだろ。といわれればその通りなんでがエラーが出ます。 [sql] mysql> create table t4 (id int,detail char(10) default 'test') engine=infinidb; ERROR 138 (HY000): Constraint is not supported by InfiniDB. [/sql]
・オートインクリメント列は生成できません これは・・・微妙なのですが、enterprise editionではできるという話もある。でもcommunity editionはできないです。
[sql]
mysql> CREATE TABLE t1
(
-> id
bigint(20) unsigned AUTO_INCREMENT,
-> detail
varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
-> PRIMARY KEY (id
)
-> ) ENGINE=infinidb AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
ERROR 138 (HY000): Use of the MySQL auto_increment syntax is not supported in InfiniDB. If you wish to create an auto increment column in InfiniDB, please consult the InfiniDB SQL Syntax Guide for the correct usage.
[/sql]
・timestamp型は未サポート timestamp 型は無理だけど、datetime型は大丈夫です [sql] mysql> create table t1 (id int,detail char(10),created timestamp) engine=infinidb; ERROR 138 (HY000): The syntax or the data type(s) is not supported by InfiniDB. Please check the InfiniDB syntax guide for supported syntax or data types.
DATETIME 型は大丈夫
mysql> create table t1 (id int,detail char(10),created datetime) engine=infinidb; Query OK, 0 rows affected (1.02 sec) [/sql]
・truncare はできません(じゃなかったです・・・) 前回 http://www.s-quad.com/wordpress/?p=691 にて、TRUNCATEはできないなんて書いちゃいましたが・・できました。すみません(もしかして、VER 2.2.2でできるようになった?) [sql] mysql> create table t1 (id int,detail char(10),created datetime) engine=infinidb; Query OK, 0 rows affected (1.02 sec) mysql> insert into t1 values(1,'test',current_timestamp); Query OK, 1 row affected (1.01 sec) mysql> truncate table t1; Query OK, 0 rows affected (0.86 sec) [/sql]
あとは、なんとか普通にできそうです。MySQLとInfiniDBとのデータ連携などでつまづきそうな部分かと思いますので、上記はInfiniDBではできないんだということを念頭において設計するのがベストかと思います。
でわでわ