0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLDWHでテーブル作成から統計情報更新まで

Posted at

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/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?