Database JUNKY

MySQL,MariaDBを中心としたブログです

OSSなDWH InfiniDB の話 ② ~データベース構築

今回は、mydbidbというデータベースを作成し、郵便番号テーブルを生成するところを説明いたします。

尚、認証の設定につきましては、MySQLと同様の設定になりますので、ここでは割愛させていただきます。

以下に手順を記載します。

  1. データベースを作成する mysql> create database mydbidb; Query OK, 1 row affected (0.00 sec)
  2. 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

次回は、上記にて生成したテーブルにデータをロードする手順を説明します。