share facebook facebook twitter menu hatena pocket slack

2017.02.15 WED

RDS for PostgreSQLへ CF/ELB/ALB/S3のアクセスログをそのままインポート(したかった)

WRITTEN BY 大住 孝之

S3に出力された CloudFront/ELB/ALB/S3 アクセスログを特に加工せずにRDS PostgreSQLへインポート。。。したかったのですができませんでした。 (極力簡単にインポートし、整形・集計はDB側に任せようと思いました。)
PostgreSQL ベースである Redshift と RDS(PostgreSQL) の違いを確認しました。

\copy コマンドでインポート

\copy コマンドを使用して PostgreSQL DB インスタンス上のテーブルにデータをインポートする

ローカルの実行環境にtsvファイル(未圧縮・要変換)を置いた状態で、psqlから “\copy” を実行します。

# CloudFront
\copy cf_log FROM '〜.tsv'
# ELB
\copy elb_log FROM '〜.tsv'
# ALB
\copy alb_log FROM '〜.tsv'
# S3
\copy s3_log FROM '〜.tsv'
# シェル上から実行する場合
psql -h  -p  -U  -d  -c "\copy ..."

Redshift での \copy

syntax errorとなり実行できませんでした。

# \copy cf_log from '〜.tsv'
ERROR:  syntax error at or near "STDIN"
行 1: COPY  cf_log FROM STDIN

Redshift で S3以外からの COPY

マニフェストファイル作成等の事前準備をした上で、S3以外のファイルを対象に COPY が行えるようです。

COPYコマンド

COPYコマンドでS3からのインポートは不可です。そもそもCOPYコマンド自体実行できません。 (\copy を使いなさいとヒントをくれます)

ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

COPYはサーバ側、\copyはクライアント側依存になるので RDS では使えないということですね。

Redshift の COPY コマンドはAWS向けに拡張されていますが、RDSでも同様に使えるようになると混乱せずに済むのかなと思いました。

元記事はこちら

RDS for PostgreSQLへ CF/ELB/ALB/S3のアクセスログをそのままインポート(したかった)

大住 孝之

構築運用担当。 個性的な面々の中で無個性という個性を打ち出していこうと画策中。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。