SQLDWHでテーブルを作成し、ハッシュ分散させる方法
テーブルの作成
まずは下記コードを書く
CREATE TABLE TEST_SCHEME.TEST_TABLE
(
ID VARCHAR(10) NOT NULL,
FLG VARCHAR(1) NOT NULL
)
WITH
(
DISTRIBUTION=HASH(ID),
CLUSTERED COLUMNSTORE INDEX
)
最初のカッコはテーブルのカラムを定義する。
順にカラム名、データ型、NULL制約(NULLを許可するか否か)
WITH句以降はSQLDWHにて分散処理するための構文。
HASHの中に分散キーを指定する。
テーブルへデータを挿入する
続いて、作成したテーブルにデータを挿入する。
①SELECT文を使った挿入
INSERT INTO TEST_SCHEME.TEST_TABLE
SELECT
COL_1,
COL_2
FROM ...
②値を入力する挿入
INSERT INTO TEST_SCHEME.TEST_TABLE
--ここにカラム名を書くのが正式。全入力の場合は面倒なので省略。ただし順番は間違えないこと
(COL1_VAL, COL2_VAL, COL3_VAL, ...)
③CSVで入力する方法
コマンドプロンプトを起動し、下記を入力
bcp dbname.TEST_SCHEME.TEST_TABLE in test_data.csv -e error_test_data.log -S SERVER_NAME -q -U USER_NAME -P PASSWORD -t , -c -C 932
/*
注意事項
・ファイルはカンマ区切り(タブ区切りの場合 -t , を削除)
・ファイルの文字コード:shift-jis (UTF-8の場合 -c -C 6500 に変更)
・引用符なし(引用符ありで実行すると引用符も文字列として取り込まれます)
・ヘッダーなし
*/
統計情報の作成と更新&カラム圧縮
テーブル作成後に統計情報を作成する
初めてテーブルを作った時は下記コードで統計情報を作成&カラム圧縮
/* データ追加後テーブルの統計情報取得とカラム圧縮*/
--統計情報取得(初回:統計情報未取得の場合)
CREATE STATISTICS STAT_TEST_SCHEME_TEST_ID ON TEST_SCHEME.TEST_TABLE(ID)
CREATE STATISTICS STAT_TEST_SCHEME_TEST_FLG ON TEST_SCHEME.TEST_TABLE(FLG)
--カラム圧縮
ALTER INDEX ALL ON TEST_SCHEME.TEST_TABLE REBUILD
統計情報の更新は下記コードで
--統計情報取得(統計情報取得済の場合)
UPDATE STATISTICS TEST_SCHEME.TEST_TABLE
(参考)ハッシュ分散以外の分散方式
ハッシュ分散以外に下記の分散方式がある
ラウンドロビン分散
CREATE TABLE TEST_SCHEME.TEST_TABLE
(
ID VARCHAR(10) NOT NULL,
FLG VARCHAR(1) NOT NULL
)
WITH
(
DISTRIBUTION=ROUND_ROBIN,
)
分散方式に関しては下記参照
https://blog.engineer-memo.com/2015/09/27/sql-data-warehouse-を使ってみる-その-3/