蓄積テーブルからカラムナテーブルへロードする方法について説明します。
ポイント
本操作は、カラムナテーブルおよびシステム関数pgxa_import_table_dataのtablenameに更新権のあるデータベースユーザーで行ってください。また、以下のシステム関数へのアクセス権も必要です。
pgxa_import_table_data
pgxa_import_to_table
システム関数の権限の確認方法の詳細は、“J.5.28 システム関数の権限の確認方法”を参照してください。
蓄積テーブルとカラムナテーブルのカラム構成が同一の場合、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システム関数の詳細は、“J.5 システム関数”を参照してください。