PyAthenaお試しメモ

Athenaのwrapper PyAthenaを試したメモ。10ヶ月前に下書きして放置していたので記憶はもうない SQLAlchemyはノータッチ

インスコ

pip install PyAthena

defaultのdbに対象テーブルが存在する場合

from pyathena import connect

cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',
                 aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',
                 s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',
                 region_name='ap-northeast-1').cursor()
sql = "SELECT * FROM test"
cursor.execute(sql)
<pyathena.cursor.Cursor object at 0x10e5f6cc0>
>>> print(cursor.description)
[('hoge', 'varchar', None, None, 2147483647, 0, 'UNKNOWN'), ('fuga', 'varchar', None, None, 2147483647, 0, 'UNKNOWN')]
>>> print(cursor.fetchall())
[('piyo', 'piyopiyo'), ('bar', 'barbar')]
  • discriptionでカラムの情報が分かる
  • AthenaのHistoryにクエリ結果は当然残る
  • pd.read_csv(io.BytesIO(response['Body'].read()), ...) していて結果ファイルのごみは残らない

任意のdbを作成、そこに存在するテーブルを指定した場合

sql = "SELECT * FROM test2"
>>> cursor.execute(sql)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/a999-373/.pyenv/versions/3.7.1/lib/python3.7/site-packages/pyathena/util.py", line 185, in _wrapper
    return wrapped(*args, **kwargs)
  File "/Users/a999-373/.pyenv/versions/3.7.1/lib/python3.7/site-packages/pyathena/cursor.py", line 57, in execute
    raise OperationalError(query_execution.state_change_reason)
pyathena.error.OperationalError: SYNTAX_ERROR: line 2:12: Table awsdatacatalog.default.test2 does not exist