【AWS】Glue から Redshift/PostgreSQL に接続する ~ Python shell編 ~

■ はじめに

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
PythonPostgreSQL を使う ~ 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 S3Python 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