■ はじめに
AWS Glue の Job(Python) から、Redshiftに接続することをやったのだが 色々と考えることがあったので、まとめておく。 また、Redshiftは、PostgreSQLから派生したものなので、 PostgreSQLでも使える。
今回、やりたいこと
AWS Glue の Job (後述するが今回は「Python shell」)内で、 Redshiftに接続し、クエリー(とりあえずSELECT文)を実行する
結論
* 後述の方針で、一応、上記「今回、やりたいこと」は達成できた * 今回は、サンプルは載せていないが、各章に張り付けてある関連記事にある サンプルコードを組み合わせて、修正すれば実装できる
目次
【1】AWS Glue の Jobタイプ 【2】Redshiftへの接続ライブラリ 【3】Redshift の接続情報取得 【おまけ】S3上の外部ファイルを実行する
【1】AWS Glue の Jobタイプ
Jobの種類によって、接続するライブラリが異なってくる
https://dk521123.hatenablog.com/entry/2019/11/17/231505
より抜粋 ~~~~~ 1)Spark 2)Python shell 3)Spark Streaming ~~~~~ 今回は、簡易的にものでよかったので、 「2)Python shell」をチョイスした
【2】Redshiftへの接続ライブラリ
結論から言うと、「2)Python shell」の場合、 以下の対応しているライブラリ一覧にある「PyGreSQL」を使う
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-job-python.html#python-shell-supported-library
=> PyGreSQL のサンプルは、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2019/11/27/000316
補足1:ちょい、はまってしまった話
* 「Python Redshift」で調べたら、大体は「psycopg2」がでてきたので 以下のサイトからWheelファイルをダウンロードしてきて、試したのだが例外でうまくいかなかった
https://pypi.org/project/psycopg2/#files
補足2:「1)Spark」の場合
* 以下のサイトのようにPySparkを使えば実現できそう *「3)Spark Streaming」は調べてない。。。
https://www.cdata.com/jp/kb/tech/redshift-jdbc-aws-glue.rst
【3】Redshift の接続情報取得
* (色々な方があると思うが、今回は)Glue Connection に保存しておき、 boto3 の get_connection() を使って、接続情報を取得する => get_connection() のサンプルは、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2020/01/29/224525
【おまけ】S3上の外部ファイルを実行する
* boto3 の get_object() を使えば、ファイルの内容を取得できるので、 それを PyGreSQL の API で実行する => get_object() のサンプルは、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2019/10/21/230004
* 外部ファイルからPyGreSQLを使って、 クエリーを実行するサンプルについては、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2019/11/27/000316
関連記事
Glue から Redshift/PostgreSQL に接続する ~ Python shell編 ~
https://dk521123.hatenablog.com/entry/2020/08/26/193237
Glue から Redshift/PostgreSQL に接続する ~ PySpark編 ~
https://dk521123.hatenablog.com/entry/2020/09/23/111741
PySpark ~ PySpark経由でDBに接続する ~
https://dk521123.hatenablog.com/entry/2020/07/02/000000
Python で PostgreSQL を使う ~ PyGreSQL編 ~
https://dk521123.hatenablog.com/entry/2019/11/27/000316
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
Glue/Spark から Redshift にデータ追加することを考える
https://dk521123.hatenablog.com/entry/2020/09/23/111741
AWS Glue ~ 基本編 / ジョブ ~
https://dk521123.hatenablog.com/entry/2019/11/17/231505
AWS Glue ~ Glue connection / Boto3 ~
https://dk521123.hatenablog.com/entry/2020/01/29/224525
Amazon S3 ~ Python boto3でS3を操作する ~
https://dk521123.hatenablog.com/entry/2019/10/21/230004
Amazon Redshift ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/22/002139
Amazon Redshift ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/04/07/124519