CSV ファイルの PostgreSQL へのインポートと SQL 問い合わせ
【概要】
CSVファイルを PostgreSQL データベースへインポートする方法を説明する。1つのCSVファイルを1つのテーブルとしてインポートする手順を示す。使用するCSVファイルは、先頭行に各列の属性名が記述されている必要がある。テーブル定義のSQLは csvkit(CSVを扱うコマンド行ツール群)の csvsql で生成する。
【目次】
【サイト内の関連ページ】
前準備
準備として、CSVファイルを用意する。ここでは、csvkit に同梱されているデータファイル ks_1033_data.csv を、次のURLからダウンロードして使用する。
https://github.com/wireservice/csvkit/tree/master/examples/realdata
他のCSVファイルを使う場合の注意点として、CSVファイルの先頭行に、各列の属性名が記述されている必要がある。
csvkit のインストール
csvkit は Python のパッケージである。PostgreSQL へ接続するためのドライバ psycopg2 とあわせてインストールする。Python 3.12 環境を対象とする。
pip install -U --no-user csvkit psycopg2-binary
PostgreSQL のインストール
PostgreSQL の利用方法: 別ページ »にまとめている。
PostgreSQL へのインポート
ここでは、あらかじめデータベース testdb を作成してあるものとする。
- テーブル定義SQLを生成する
csvkit の
csvsqlで、CSVファイルからテーブル定義のSQLを生成する。csvsql ks_1033_data.csv > ks_1033_data.sql - テーブルを定義し、CSVをインポートする
生成したテーブル定義SQLを実行してテーブルを作成し、psql の
\copyでCSVを読み込む。\copyは psql クライアント側でファイルを読むため、クライアントから見たパスを指定する。cat ks_1033_data.sql | sudo -u postgres psql -U postgres -d testdb echo "\copy \"ks_1033_data\" from 'ks_1033_data.csv' with (format csv, header);" | sudo -u postgres psql -U postgres -d testdb