SQLではじめるデータ分析』のサポートサイトです。
本書は「SQL for Data Analysis」の翻訳です。本書に掲載されているSQLは、PostgreSQLで動作するように書かれています。ここではDockerを使用し、PostgreSQLの動作環境の構築および、データの投入方法の例を紹介します。なおローカルのDocker環境は整備済みであることが前提です。
dockerコマンドを使用しDocker Hubからイメージを取得します。
docker run
コマンドを用いてPostgreSQLのコンテナをバックグラウンドで実行します。
PostgreSQLへ接続するには、PostgreSQL用のクライアントが必要です。先程、起動したコンテナ内にはクライアントであるpsqlも梱包されています。ここでは docker exec
でコンテナ内に入り、コンテナ内のpsqlコマンドを使用してPostgreSQLへ接続します。
接続するとSQLを実行できます。
exit
を入力することで、psqlを終了できます。psqlの終了と同時にコンテナからも脱出します。psqlを終了しても、コンテナはバックグラウンドで起動し続けます。
また今回はコンテナはホスト側の 5432
ポートを開くように起動しました。別の接続方法として、ローカルから 127.0.0.1:5432
にアクセスしPostgreSQLに接続することもできます。
原著者は、書籍で使ったデータとSQLをGitHub上で公開しています。まず、それらを取得するために、git cloneします。
コンテナを起動した状態でサンプルコードとデータをコンテナ内にコピーします。まずサンプルコードとデータを格納するディレクトリ /localpath
を作成します。
docker exec postgres mkdir /localpath
docker cp
コマンドを使用し、サンプルコードとデータをコンテナ内の /localpath
にコピーします。
docker cp "./sql_book/Chapter 2: Preparing Data for Analysis/create_date_dimension.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 3: Time Series Analysis/create_retail_sales_table.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 3: Time Series Analysis/us_retail_sales.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 4: Cohorts/create_legislators_table.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 4: Cohorts/create_legislators_terms.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 4: Cohorts/legislators.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 4: Cohorts/legislators_terms.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 5: Text Analysis/create_stop_words.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 5: Text Analysis/create_ufo.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 5: Text Analysis/ufo1.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 5: Text Analysis/ufo2.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 5: Text Analysis/ufo3.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 5: Text Analysis/ufo4.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 5: Text Analysis/ufo5.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/anomaly_detection_queries.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/create_earthquakes_table.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes1.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes10.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes11.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes12.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes13.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes14.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes15.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes2.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes3.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes4.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes5.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes6.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes7.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes8.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 6: Anomaly Detection/earthquakes9.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 7: Experiment Analysis/create_exp_tables.mysql.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 7: Experiment Analysis/create_exp_tables.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 7: Experiment Analysis/exp_assignment.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 7: Experiment Analysis/experiment_queries.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 7: Experiment Analysis/game_actions.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 7: Experiment Analysis/game_purchases.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 7: Experiment Analysis/game_users.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 8: Creating Complex Data Sets/complex_dataset_queries.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 8: Creating Complex Data Sets/create_videogame_sales.sql" postgres:/localpath/
docker cp "./sql_book/Chapter 8: Creating Complex Data Sets/videogame_sales.csv" postgres:/localpath/
docker cp "./sql_book/Chapter 9: Conclusion/code.sql" postgres:/localpath/
起動したコンテナで動作しているPostgreSQLに接続します。ここではdocker execを使用してコンテナ内にあるpsqlコマンドを利用しサーバに接続します。
docker cp
でコピーしたデータをPostgreSQL内に投入します。psqlのプロンプトで、データ投入用のSQLを読み込みます。
\i /localpath/create_date_dimension.sql
\i /localpath/create_retail_sales_table.sql
\i /localpath/create_legislators_table.sql
\i /localpath/create_legislators_terms.sql
\i /localpath/create_stop_words.sql
\i /localpath/create_ufo.sql
\i /localpath/create_earthquakes_table.sql
\i /localpath/create_exp_tables.sql
\i /localpath/create_videogame_sales.sql
2章及び3章のデータは原著のリポジトリには無いため、必要に応じて手動で作成します。psqlのプロンプトで、以下のSQLを実行します。
現在までのところ、正誤表に掲載する項目はありません。誤植や間違いなどを見つけた場合、japan@oreilly.co.jpまでお知らせください。
本書のコードは、このページで説明しているAlpineベースのPostgreSQLのDocker Imageを使用し、すべて動作していることを確認しておりますが、環境やバージョンの違いなどにより、希望通りに動作されない場合の原因解明などや個人レッスンに相当するご要望にはご対応できかねますので、ご了承いただければ幸いです。