OSSなDWH InfiniDB の話 ② ~データベース構築
今回は、mydbidbというデータベースを作成し、郵便番号テーブルを生成するところを説明いたします。
尚、認証の設定につきましては、MySQLと同様の設定になりますので、ここでは割愛させていただきます。
以下に手順を記載します。
- データベースを作成する mysql> create database mydbidb; Query OK, 1 row affected (0.00 sec)
- UTF-8で生成されたか確認する。 mysql> show create database mydbidb;
| Database | Create Database |
+ -+ +
| mydbidb | CREATE DATABASE mydbidb
/!40100 DEFAULT CHARACTER SET utf8 / |
+ -+ +
1 row in set (0.00 sec)
3. 作成したデータベースに、ユーザーのアクセス権を与える
mysql> grant all privileges on mydbidb. to dbuser@localhost identified by 'dbpassword';
mysql> grant all privileges on mydbidb. to root@localhost identified by dbpassword';
4. 郵便番号データを生成する
以下のDDLを作成(エンジン名を省略しますと、MyISAMになってしまいますのでご注意を)
create table zip (
PSJSX401
char(8),
PSYUBOLD
varchar(8),
PSYUBNEW
varchar(11),
PSTDHKKN
varchar(15),
PSADR1KN
varchar(150),
PSADR2KN
varchar(150),
PSTDHKKJ
varchar(45),
PSADR1KJ
varchar(120),
PSADR2KJ
varchar(120),
PSKBN001
char(1),
PSKBN002
char(1),
PSKBN003
char(1),
PSKBN004
char(1),
PSKBN005
char(1),
PSKBN006
char(3)
) ENGINE=InfiniDB DEFAULT CHARSET=utf8;
以上でテーブルは正常に生成できたかと思います
CREATE TABLEをする上での注意事項 一般的にDWHは、KEYというものは生成できません。また、製品によって、DEFAULT指定ができなかったり、NOT NULL等の カラム制約がかけれない場合はありますので、エラーメッセージがでて、CREATE TABLEできないときに、一体何がいけないの? とか私のようにあせらぬようお願いします。DDL/DMLの制約につきましては、CalpontInfiniDBSyntaxGuide_20-1.pdfに掲載されておりますので そちらをご参照ください
以下、つまづきそうな部分だけ抜粋します
- NOT NULLは使えません mysql> create table t1 (id int,detail char(10) not null) engine=infinidb; ERROR 138 (HY000): Constraint is not supported by InfiniDB.
- DEFAULTは使えません mysql> create table t1 (id int,detail char(10) default '1') engine=infinidb; ERROR 138 (HY000): Constraint is not supported by InfiniDB.
- PRIMARY KEYは使えません mysql> create table t1 (id int PRIMARY KEY,detail char(10)) engine=infinidb; ERROR 1070 (42000): Too many key parts specified; max 0 parts allowed
- TRUNCATEができません mysql> truncate table zip; ERROR 122 (HY000): CAL0001: Truncate table is not implemented
次回は、上記にて生成したテーブルにデータをロードする手順を説明します。