Skip to content

Instantly share code, notes, and snippets.

@muroon
Last active December 1, 2020 10:40
Show Gist options
  • Save muroon/ae5488398c4be5075e8e94060107934d to your computer and use it in GitHub Desktop.
Save muroon/ae5488398c4be5075e8e94060107934d to your computer and use it in GitHub Desktop.

go-athenaにResult Modeを設けたので記載します。

GetQueryResult APIアクセスはクエリ結果を全件取得するためには取得レコード件数によっては複数回アクセスする場合もありました。Athenaにはクエリ結果をファイルダウンロードする機能やCTASテーブルを作成・閲覧する機能があるのでそれらを使用してクエリの実行結果を取得するためにResultモードを設けました。

Resultモード

アプリケーションからAthenaにクエリを投げてクエリの結果を取得するのに大きく2種類のAPIコールが必要です。

  • クエリの実行
  • クエリの実行した結果(SELECT文のRows)を取得

Overview

Get Result部分は元々 go-athena ではアクセスのみでしたが、下記のようにDLモードとGZIP DLモードを設けました

  • APIモード(default)
  • DLモード
  • GZIP DLモード

ただし、DLモード、GZIP DLモードはSelect文でのみ使用可能です

APIモード

結果取得に GetQueryResults API にアクセスして結果を取得します。 このAPIアクセスはクエリ結果をAPIで返す場合はレスポンスで返せる件数に制限があります。クエリ結果が 最大件数(最大1000件) を超える場合は複数回のAPIアクセスにて全クエリ結果を取得します。

API Mode

DLモード

Athenaはクエリ結果の全件をcsvファイル保存しておりますので、それをダウンロード取得することが可能です。 csvファイルは無圧縮です。 ファイルダウンロードによりクエリ結果を件数に関係なく1APIアクセスで取得できます。

DL Mode

  • 注意
    • Select文でしか使用できません。

GZIP DLモード

DLモードのcsvファイルは無圧縮のファイルダウンロードでした。 CTASテーブルを使用する事によりダウンロードファイルをgzipに圧縮することが可能です。

  • クエリによるCTASテーブル作成(GZIP指定)
  • CTASテーブルデータのダウンロード・解凍
  • CTASテーブルを削除

GZIP DL Mode

  • 注意
    • Select文でしか使用できません。
    • カラムの型が他の2タイプと若干異なります。
Result Mode How to get column type Column Column Column
API, DL ResultSet.ResultSetMetadata.ColumnInfo.Type varchar integer demical
GZIP DL TableMetadata.Columns.Type string int demical(numner, numner)

各モードのレスポンス時間

クエリ実行から結果全件取得までかかった時間の比較です。

response_time


下記の傾向が言えるかと思います

  • 少量の件数ではDLモード、APIモードが有効
  • 大量の件数ではGZIP DLモードが非常に有効
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment