- Postgresqlから抽出してGCS(Google Cloud Strage)へぶん投げる
- サンプル
必要な物
- embulk plugin
- embulk gem install embulk-output-command
- embulk gem install embulk-output-gcs
- embulk gem install embulk-input-postgresql
- ファイル拡張子に.liquidとつける
- liquid〜Embulkに備わっているテンプレートエンジン
- 同じ設定を記載し続けて肥大化を避けるため
- _env.yml.liquid
- env設定ファイル
_env.yml.liquid
{% assign env_postgresql = 'postgresql' %}
{% assign env_host = '{host_name}' %}
{% assign env_user = '{user_name}' %}
{% assign env_password = '"{user_password}"' %}
{% assign env_database = '{database_name}' %}
_env.yml.liquidに設定なくてもenvに設定しguess.yml.liquidのなかで{env.{変数}}で同じことはできます
- guess.yml.liquid
- 汎用設定が書かれたテンプレートファイル
# guess.yml.liquid
{% include 'env' %} # 今回_env.yml.liquid使うため必須
exec:
max_threads: 1 # 最大並列数
min_output_tasks: 1 # OutPutタスク数制御(1にしないとOutPutファイルが複数分割される)
in:
type: {{ env_postgresql }}
host: {{ env_host }}
user: {{ env_user }}
password: {{ env_password }}
database: {{ env_database }}
query: |
SELECT
*
FROM
{Table Name}
;
out:
type: gcs
bucket: {{ env_gcp_bucket }} # Bucket名
path_prefix: logs/{{ env_path_prefix }} # ファイル名
file_ext: .tsv # ファイル名の末尾の文字列
sequence_format: "" # 出力するファイル名につけるシーケンス OFF
auth_method: json_key # GCSへの接続キー
json_keyfile: {file名}.json
formatter:
type: csv
delimiter: "\t" # データ区切り文字
charset: UTF-8 # ファイルのエンコーディング
quote: '' # データを囲む文字(TSVのためなし)
quote_policy: MINIMAL # データをquoteで囲むルール MINIMAL:データに区切り文字や囲む文字や改行が含まれているとき
escape: '\' # quoteで囲むときに使われるエスケープ文字
header_line : false # ヘッダー名を出力するかしないか
newline: LF # 改行コード
実行するときに留意点
- json_keyfileはGCP IAMからサービスアカウントを発行
- GCSに権限設定を追加(ストレージ管理者系)
の設定を行なった後json_keyfileのキーを使い実行してください。
実行ファイル生成
$ embulk guess ./postgres-guess.yml.liquid -o postgres-config.yml
実行
# dry-run
embulk preview postgres-config.yml
# 実行
embulk run postgres-config.yml