Athena


JDBC経由でRDS等をデータソースとして登録してAthenaで検索


terraformで管理する

記事:


INSERT INTO: 結果を別s3 bucketに出力

記事:


パフォーマンスチューニング

記事:


クエリサンプル

記事:


$path: 検索対象のs3 objectを表示する

記事:


S3上にパーティション無しで配置したobjectにパーティションを付ける

  1. 検索対象のs3 objectを並べた「symlink.txt」を用意する
  2. symlink.txtをs3 bucketにアップロード。データがあるs3 bucketとは別で良い
  3. create tableで、symlinkを読むオプションを指定
    STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
  4. tableにロードする
    msck repair TABLE <db>.<table>;
  5. queryを実行

Athena engine v2


Apache Parquet型式: 列指向、バイナリフォーマット


SendGridのActivityを検索


データ型とクエリ

UNDO: 任意のs3 bucketと形式で出力

workgroupで設定した出力s3 bucketの形式はCSV固定。
任意のs3 bucketや指定形式で出力したい場合。


VALUES: インラインテーブル


パーティション指定


ALB/ELBログの分析


日付と時刻


Partition Projection: パーティション管理の自動化


injected型

記事:


HIVE形式のパスに projection type dateを設定するとエラー

HIVE形式で「s3://bucket/year=${year}/month=${month}/day=${day}」とパーティションを分けているとする。
2019〜YYYYまでをパーティションとして認識させたい。


Unknown pattern letter


Column repeated in partitioning columns


Workgroup: クエリのスキャン量上限設定、コスト管理、ユーザ権限管理


athenacli: athenaの利用に特化したCLI


awscliからの利用

実行順序:

  1. start-query-execution: クエリの実行。DDL(CREATE/ALTER TABLE)もSQLもこれ。非同期なのですぐ完了する。idが出る
  2. get-query-execution: 指定idのステータス確認。定期的に実行して完了/エラーまで待つ
  3. get-query-results: 指定idが完了していれば、S3に結果のファイルが出ている
  4. aws s3 cp 等でlocalに結果のcsv等をダウンロード

SQL実行順序:

  1. CREATE TABLE table_name
  2. MSCK REPAIR TABLE table_name
    • これを実行しないと、selectしても結果は空になる。
  3. SELECT ... from table_name

ベストプラクティス


パーティション分割

Athenaは1TBのスキャンあたり、1回$5かかる。スキャンデータを減らす工夫をしないと、コストが非常に増えるまた遅い。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-06-02 (金) 18:53:45