たそらぼ

日頃思ったこととかメモとか。

(小ネタ)別ファイルにしたSQLをAthenaで投げたい

Athenaに投げるSQLを別ファイルにしておきたい。
こうしておくと、管理もしやすくなり、SQLFluffでCIしたりできるようになる。

ディレクトリ構造

同じ階層にathena.pyという名前でpythonスニペットと、sample.sqlという名前のDMLを置いておくとする。

C:.
    athena.py
    sample.sql

PythonからのSQLの読み出し方

DMLをopenしてread()で読み出し、そのままstart_query_executionのQueryString引数に渡せばよいことが分かった。

import boto3

athena = boto3.client('athena', region_name='ap-northeast-1')

DATABASE_NAME = ""
S3BUCKET_NAME = ""

with open("./sample.sql", 'r') as sql_f:
    sql =sql_f.read()


result = athena.start_query_execution(
    QueryString = sql,
    QueryExecutionContext = {
        'Database': DATABASE_NAME
    },
    ResultConfiguration = {
        'OutputLocation': 's3://' + S3BUCKET_NAME,
    }
)

DML

SELECT * 
  FROM "sample_db"."sample_table" 
 limit 10;