はじめに
筆者について
私は、下記の記事をもとにSQLを1か月前ほどから勉強し始めたガチ初心者です。
https://qiita.com/Ryo-Nakano/items/8961c956babaf0976b4a
この記事で書くこと
データサイエンス100本ノック挑戦にあたっての環境構築に関して書きます。
特に躓いた「テーブルにデータがありません(~~~ does not exist)という旨のエラー」時の対応について書きます。
この記事で書かないこと
データサイエンティスト100本ノックの解き方
環境構築に必要なソフトウェア(Docker等のインストール方法)
*既に巷で書き尽くされているので。
躓いたこと(本題)
発生したエラーの概要
ガイドに沿ってDockerやSQLのインストールは完了し、
早速一問目から始めようとしたところ、「receipt」なんてテーブル(リレーション)は無いと返され、
悪銭苦闘しました。
エラー発生時の状況詳細
・Dockerはインストール完了。
・「dss-postgres」と「dss-notebook」はそれぞれRUNNINGと表示されている状況。
・Jupyter-Labは問題無く起動し、SQLのコード自体は使える状況。
・何故かテーブル「Customer」だけは認識されており、SQLで操作可能な状況。
・qsqlでテーブル一覧を確認すると「Customer」だけが表示される。
・スキーマは「public」だけが表示されている。
解決方法(結論)
「~100knocks-preprocess\docker\db\init」にある、
「2_create_table.sh」と「3_load.sql」に記載のコードをそれぞれjupter-lab上で実行し、
テーブルを読み込み。
実行時の詳細な手順は以下の通り
- 「2_create_table.sh」をメモ帳で開き、テーブルを作成(create)するコードを実行
- 「3_load.sql」を同じくメモ帳で開き、1で作成したテーブルに対応するcsv読み込みのコードを実行
- これをcustomer、category、receipt、product、store、geocodeとそれぞれcreate&loadを実行
読み込んだ際のコードイメージはこちら(例:categoryを読み込んだ時のもの)
テーブル読み込み完了後、無事にテーブルを操作できるようになり、第1問の回答をできるようになりました。
めでたしめでたし。
恐らくこれは正攻法じゃないでしょうが、「SQLを操作できればそれでいい」と私は思い込むことにしました。
参考にしたURL
https://www.cresco.co.jp/blog/entry/14446/
「(後述)「はじめに」のセル実行したときにエラーが出た・・・」の部分 大変助かりました。
ただ素人の私には「CLIコンソール上でpsqlを使い直接実行します。」の意味を理解できず、Jupyter上で実行する苦肉の策でいきました・・・
http://peiyorin.cocolog-nifty.com/blog/2011/04/postgresql-a4b6.html
https://kumachan.biz/2017/01/27_1927/4668/
上記2つは類似の記事で、恐らく今回自分がひっかかったエラーの原因はここで記載されたものだと思います。
あたりをつけるのに大変助かりました。ただ、結局スキーマが何なのか未だにピンとは来てませんが・・・・