DWHサーバ上のデータベースにデータをインポートする方法を説明します。
注意
データのインポートは、DWHサーバ管理者ユーザーで実行してください。
テーブルへのデータのインポート
テーブルへデータをインポートする場合は、COPY FROMコマンドを実行します。
参照
COPY FROMコマンドに指定できる引数の詳細は、“PostgreSQL文書”の“リファレンス”を参照してください。
カラムナテーブルへのデータのインポート
カラムナテーブルへデータをインポートする場合は、pgxa_import_to_tableシステム関数を実行します。
以下にサーバ上からの操作例を示します。
psqlコマンドを使用して、データベースpostgresに接続します。
“psql postgres”と実行します。
> psql postgres psql (x.y.z) Type "help" for help.
x.y.z:PostgreSQLのバージョンが表示されます。
カラムナテーブルへデータをインポートします。
カラムナテーブルへデータをインポートするために、pgxa_import_to_tableシステム関数を実行します。
Windowsの場合
postgres=# SELECT pgxa_import_to_table('scm.tbl1', 'd:\data\input.csv', true, ',', 'CRLF' ); pgxa_import_to_table ------------------------ t (1 row)
Linuxの場合
postgres=# SELECT pgxa_import_to_table('scm.tbl1', '/data/input.csv', true, ',', 'LF' ); pgxa_import_to_table ------------------------ t (1 row)
データベースpostgresと切断します。
psqlコマンドを終了するために、“\q”を実行します。
postgres=# \q
参照
pgxa_import_to_tableシステム関数の詳細は、“リファレンス”の“pgxa_import_to_table”を参照してください。
psqlコマンドの詳細は、“PostgreSQL文書”の“psql”を参照してください。
蓄積テーブルからカラムナテーブルへインポートする方法について説明します。
ポイント
本操作は、カラムナテーブルおよびシステム関数pgxa_import_table_dataのtablenameに更新権のあるデータベースユーザーで行ってください。また、以下のシステム関数へのアクセス権も必要です。
pgxa_import_table_data
pgxa_import_to_table
システム関数の権限の確認方法の詳細は、“リファレンス”の“システム関数の権限の確認方法”を参照してください。
蓄積テーブルとカラムナテーブルのカラム構成が同一の場合、pgxa_import_table_dataシステム関数を使用します。
例)
postgres=# SELECT pgxa_import_table_data('coltbl','odstbl','','C:\tmp\workdir');
postgres=# SELECT pgxa_import_table_data('coltbl','odstbl','','/tmp/workdir');
参考
fluentdを利用したデータ連携によりODSにデータを蓄積する場合
fluentdを利用したデータ連携によりODSにデータを蓄積する場合、カラムナテーブルへデータをインポートしたあとにもODSにデータが蓄積されていきます。
以下のようなバッチファイルを一定間隔で実行することにより、ODSのデータをカラムナテーブルへ一定間隔で連携できます。
@echo off setlocal set LAST_DATETIME_FILE=c:\home\symfoas\work\lastdatetime.txt if not exist %LAST_DATETIME_FILE% ( set LAST_FLUENTD_ID_TIME=''0000-00-00 00:00:00'' ) else ( for /F "delims=\n" %%i in ('type c:\lastdatetime.txt ') do set LAST_FLUENTD_ID_TIME=''%%i'' ) set SQL= "SELECT pgxa_import_table_data('coltbl','odstbl','WHERE fluentd_time>=to_timestamp(%LAST_FLUENTD_ID_TIME%, ''YYYY-MM-DD HH24:MI:SS'')','c:\tmp\workdir')" psql -d postgres -c %SQL% for /F "delims=\n" %%i in ('psql -t -d postgres -c "SELECT max(fluentd_id_time) FROM coltbl" ') do set "TMP_VALUE1=%%i" echo %TMP_VALUE1% > %LAST_DATETIME_FILE%
以下のようなシェルを一定間隔で実行することにより、ODSのデータをカラムナテーブルへ一定間隔で連携できます。
#!/bin/sh if [ -e /home/symfoas/work/lastdatetime.txt ]; then . /home/symfoas/work/lastdatetime.txt elif LAST_FLUENTD_ID_TIME="0000-00-00 00:00:00" fi psql postgres -c "SELECT pgxa_import_from_table('coltbl', 'odstbl', 'WHERE fluentd_id_time > to_timestamp(''${LAST_FLUENTD_ID_TIME}'', ''YYYY-MM-DD HH24:MI:SS'')', '/tmp/workdir')" TMP_VALUE1=`psql postgres -c 'SELECT max(fluentd_id_time) FROM coltbl'` TMP_VALUE2=`echo ${TMP_VALUE1} | cut -d ' ' -f3-4` echo "LAST_FLUENTD_ID_TIME='${TMP_VALUE2}'" > /home/symfoas/work/lastdatetime.txt
参照
蓄積テーブルとカラムナテーブルのカラム構成が異なる場合
蓄積テーブルとカラムナテーブルのカラム構成が異なる場合、蓄積テーブルのデータをカラムナテーブルのカラム構成に合わせて加工したうえでインポートする必要があります。
COPY文によりCSVファイルを作成したあと、pgxa_import_to_tableシステム関数を利用してそのデータをカラムナテーブルに格納してください。
COPY文の詳細は“PostgreSQL文書”の“COPY”を参照してください。
pgxa_import_to_tableおよびpgxa_import_sqlシステム関数の詳細は、“リファレンス”の“システム関数”を参照してください。