Redshift Data APIを使う上での注意点まとめ
はじめに
Redshiftを使用するにあたって、Redshiftの周辺には様々なツールが整備されている
Redshiftのストレージを意識しなくても済むような Redshift Spectrum
や最近出た(プレビューだが) Redshift Serverless
がある
今回はその中でもRedshift Data APIについて検討する機会があったのでそれについてまとめる
Redshift Data APIとは
(引用) 組み込みの Amazon Redshift データ API を使用して、Amazon Redshift データベースにアクセスできます。この API を使用すると、AWS Lambda、Amazon SageMaker ノートブック、AWS Cloud9 などのウェブサービスベースのアプリケーションで Amazon Redshift データにアクセスできます。
準備
Amazon Redshift データ API を呼び出すときの認証情報の選択
Redshiftへの認証とData APIの認証を行うことでRedshift Data APIを利用することができる
Redshiftの認証だけでは足りない
ということに注意してほしい
認証方法には2種類があり、どちらかを用いてData APIを認証し利用する
- AWS Secrets Manager
- 一時認証
メリット
接続の管理が不要
Amazon Redshift Data API の使用 にも記載されているが
(引用) 接続を管理せずに SQL ステートメントを実行することができます
接続を管理しなくても済むことがメリットになる
複数クエリも大丈夫
Amazon Redshift Data API で、マルチステートメントクエリの実行とパラメータのサポートを開始にあるように同一トランザクション内でクエリを実行できるようになった
注意点
結論から言うと、1つの処理で複数クエリ扱いたい場合のクエリ管理に工夫が必要
boto3を用いてRedshift Data APIに複数クエリを投げる場合はbatch_execute_statementを用いる
# ドキュメントと同じもの
response = client.batch_execute_statement(
ClusterIdentifier='string',
Database='string',
DbUser='string',
SecretArn='string',
Sqls=[
'string',
],
StatementName='string',
WithEvent=True|False
)
Sqls
がlistになっており、ここに必要な複数クエリを記述する
実際にはここにクエリをベタ書きすることは無いはずで、用意されたSQLファイルを読み込み Sqls
に展開したいはず
そうなると Sqls
の引数ごとにSQLファイルを用意するかパーサーを使ってSQLステートメントをバラす必要がある
参考: sqlparse
具体的には Sqls
に対して以下のようにしてあげると、複数クエリを扱えるようにできる
# 複数クエリが書いてあるhoge.sqlを読み込む
with open("hoge.sql", 'r') as f:
sql = f.read()
# ステートメントごとにパースするライブラリを読み込む
import sqlparse
statements = sqlparse.split(sql)
# batch_execute_statementのSqlsに渡す値を作成
sqls = list()
for s in statements:
sqls.append(s)
最後に
Redshift Data APIのメリットは 接続の管理をしなくても済む
である
Redshift Data APIではトランザクション管理を利用者側で制御できないので、 Rollbackをしたい
という際は利用することは難しい
またpsycopg2では単一のSQLステートメントしか実行できないので、複数のSQLステートメントを実行する際はパース処理を入れるなど工夫が必要
Discussion