[レポート] (ANT307) Athena deep dive #reinvent2019

こんにちは!DA事業本部の石川です!

本記事はAWS re:Invent 2019のセッション「(ANT307) Athena deep dive」のレポートです。Amazon Athenaの最新機能の紹介になります。

セッション概要

Amazon Athena is an interactive query service that makes it easy to analyze data in Amazon S3 using standard SQL. Athena is serverless, so there is no infrastructure to manage, and you pay only for the queries that you run. Learn how customers are using Athena to query their data lakes, enable self-service for analysts and developers, and build applications. We dive deep into the latest improvements and show demos. New Athena users gain an understanding of service capabilities and customer architecture patterns. Existing Athena users gain understanding of recent improvements, including concurrency, performance, and security.

Amazon Athenaは、標準SQLを使用してAmazon S3のデータを簡単に分析できるインタラクティブなクエリサービスです。 Athenaはサーバーレスであるため、管理するインフラストラクチャはなく、実行するクエリに対してのみ料金がかかります。 お客様がAthenaを使用してデータレイクをクエリし、アナリストと開発者のセルフサービスを有効にし、アプリケーションを構築する方法を学習します。最新の改善点に深く入り込み、デモを解説します。 新しいAthenaユーザーは、サービス機能と顧客アーキテクチャパターンの理解を深めます。 既存のAthenaユーザーは、並行性、パフォーマンス、セキュリティなどの最近の改善点を理解できます。

スピーカー

動画

Athena deep dive

Amazon Athena とは

Amazon Athenaは、標準SQLを使用してAmazon S3のデータを簡単に分析できるインタラクティブなクエリサービスです。 Athenaはサーバーレスであるため、管理するインフラストラクチャはなく、実行するクエリに対してのみ料金がかかります。

  • Amazon S3ベースデータレイクに対してデータをクエリします
  • インフラ、オペレーション、アプリケーションなどのログを分析する
  • 一般的なBIツールを用いてインタラクティブに分析します
  • データサイエンス用途のセルフサービスデータを探索します
  • アプリケーションに分析能力を付け加えます

Athenaのユースケース

1: アドホック ユースケース

様々なデータソースをGlueデータカタログに登録して、ETLジョブした結果をBIツールを通してAthenaにアドホッククエリーを実行します。

2: SaaS ユースケース

API Gatewayに入ったアプリケーションリクエストのうち、HotデータはAurora、WarmやColdデータはデータカタログに登録してAthenaでS3のデータをクエリします。

3: ETLとクエリ ユースケース

AWSサービスのログ、アプリケーションログ、外部ベンダーからのRAWデータに対して、AthenaのCTASやINSERT INTOを用いてETLして、Transformedデータとして保存する。Athenaからこのデータをクエリする。

組織の中でのキーパーソン

電子商取引会社のアーキテクチャ

  • エンドユーザーは、Amazon Auroraの商品カタログを参照
  • 支払いサービスは、EMRのHBaseで管理
  • 注文の受付は、Redisで管理
  • 顧客満足度の管理で扱う個人情報などは、DocumentDBで管理
  • インフラのログは、CloudwatchLogsで管理
  • BIやデータサイエンティストは、Redshiftで管理した情報をQuickSightを通して利用する
  • 配送状況は、DynamoDBで管理

典型的な組織の中のキーパーソン/キーパーソンのユースケース/課題はペルソナによって異なる

  • Ana - アナリスト
    • データ分析基盤の利用者
  • Carlos - 管理者
    • データレイクとセキュリティとコストの管理
    • データシステムの稼働状況とパフォーマンスの管理
  • Richard - エンジニア
    • Athena APIを用いてSaaSアプリケーションを開発
  • Maria - サイエンティスト
    • モデルのビルドとトレーニング
    • 機械学習を用いてアナリストを助ける

Athenaのフェデレーテッドクエリ(Preview)

  • フェデレーテッドクエリとは
    • 構造化、非構造化のオブジェクトもしくはカスタムデータに対してクエリを実行する
    • オンプレミス、クラウドデータソース問わずクエリを実行する
    • アドホックな調査、複雑なパイプライン、アプリケーション問わず利用される

フェデレーテッドクエリの構造

Athenaからリクエストは、データソースケースコネクタベースのAWSLambdaからフェデレーテッドデータソースにアクセスします。

フェデレーテッドクエリを簡単に作成

  • データソースコネクタのデプロイ
  • データソースコネクタの登録
    • カタログ名の定義
  • SQLクエリを書く
    • .Database.Table

データソースコネクタのデプロイ方法

  • AthenaはAWS Lambdaベースのデータソースコネクタを用います
  • 2つの方法
    • AWS Serverless Application Repositoryを用いたワンクリックデプロイする方法
    • デプロイして、登録して、使うのみ
    • Lambdaのコネクタコードをデプロイする方法
    • Lambda APIやUIを用いてAWS Lambdaのこのネクタをアップロードする

コネクタの登録にAthenaコンソールを用いる

存在するデータソースコネクタを使う

登録不要のフェデレーテッドクエリ

  • 素速くプロトタイピングするのに使いやすい
  • プリフィックスにカタログ名として"lambda:<function_name>"をつける
  • 例:SELECT * FROM "lambda:cmdb".e2.ec2_instanceEc2インスタンスの一覧をクエリするためのフェデレーテッドクエリを実行する

現在利用可能なデータソースコネクタ

  • Hbase
  • DocumentDB
  • DynamoDB
  • JDBC
  • Redis
  • CloudWatchLogs
  • CloudWatch Metrics
  • TPDS Data GEnerator

あなた自身のデータソースコネクタの登録

  • 機能
    • S3 spill
    • パーティションプルーニング
    • 並列スキャン
    • ポータブルなカラムナメモリ形式(Apache Arrow)
    • 認可
    • 輻輳制御/回避

フェデレーテッドクエリを用いたセルフサービスETL

  1. 1つのSQLクエリは複数のソースからデータを読み込む
  2. テーブルを作成や最適化したフォーマットに変換するためのCTASやINSERT INTO
  3. Lambdaを使ったスケジュール又はアプリケーションのビルド

Hive メタストアのためのAthenaのサポート(Preview)

  • Glueカタログではなく、カスタムメタストアをAthennaで使える
  • Hiveメタストア提供のリファレンス実装
  • Hiveメタストア、Glueカタログ、他のフェデレーテッドデータソースによってデータをスキャンしてクエリを実行する

HiveメタストアにAthenaから接続

Athenaのユーザー定義関数(UDFs)(Preview)

UDFなしの課題は何か?

  • UDFなしでデータを前処理、後処理するのは難しい
  • カラムのアクセス制御のために生データの重複が生じる
  • カスタムコードを呼び出し、分析にSQLクエリを使用するための複数のアプリケーションを学習する

Athena クエリーで関数を実行する

  • AWS LambdaによるUDF
  • ネットワーク呼び出しをサポートする
  • SELECTやFILTERでUDFを実行する
  • Athenaはパフォーマンスを最適化し、処理ロジックに専念できる

Athena上のUDF

  • 作成は一度
  • デプロイも一度
  • クエリで必要な時に何度も実行できる

サンプルコード

  • 作成、デプロイ、実行が簡単
  • スカラ関数
  • AWS Lambdaによる実行

AthenaのML機能(Preview)

なぜAthenaのML機能が必要か?

SQLを使える人は、MLやPythonやJAVAを使える人より多く、SQLクエリで推論できることは利点である。

SQLクエリの推論のためにMLモデルを呼び出す

  • Amazon SageMaker出いちどだけMLモデルをデプロイして、何度も使う
  • どんなデータでも推論できる
  • 推論を有効にするためにアプリケーションのビルドは不要
  • 追加のセットアップは不要

MLモデルのトレーニングにAthenaを使用する

  • 任意のデータソースからデータをSELECTするフェデレーテッドAthenaクエリ
  • AthenaのUDFを使ってデータを変換する
  • Amazon SageMakerでモデルのトレーニングとデプロイする

MLモデルを用いて推論するのにAthenaを使用する

  • SageMaker でMLモデルをデプロイする
  • 前処理、後処理のためのUDFを書く
  • 組織の誰もが任意のデータソースからデータの推論を実行できる

MLユースケースの例

  • アプリケーションログで疑わしいアクティビティに関連付けられたIPアドレスを見つける
  • 収益に異常がある製品を見つける(+/-)
  • 取引記録で詐欺の疑いを見つける
  • 提案された新しいビデオゲームがヒットするかどうかを予測する

サンプルコード:

USING FUNCTION predict(platform int, genre int, critic_score int, user_score int, rating int) returns DOUBLE type SAGEMAKER_INVOKE_ENDPOINT
WITH (sagemaker_endpoint='xgboost-2019-11-22-00-52-22-742'),

FUNCTION normalize_genre(value VARCHAR) RETURNS int TYPE LAMBDA_INVOKE
WITH (lambda_name='VideoNormalization'),

FUNCTION normalize_platform(value VARCHAR) RETURNS int TYPE LAMBDA_INVOKE
WITH (lambda_name='VideoNormalization'),

FUNCTION normalize_rating(value VARCHAR) RETURNS int TYPE LAMBDA_INVOKE
WITH (lambda_name='VideoNormalization')

SELECT predict(platform,
         genre,
         critic_score,
         user_score,
         rating),
         name
FROM 
    (SELECT name,
         normalize_platform(platform) AS platform, 
         normalize_genre(genre) AS genre, 
         critic_score, 
         user_score, 
         normalize_rating(rating) AS rating
FROM video_game_data.video_games);

AWS Lake FormationとAthenaの統合

典型的なデータレイク設定のステップ

  1. ストレージのセットアップ
  2. データの移動
  3. クレンジング、前処理、データをカタログに登録
  4. 設定、セキュリティ、コンプライアンスポリシ
  5. 分析用途にデータを使えるようにする

AthenaのLake Formation統合はどの様に役立つ

  • Lake Formationの権限ポリシーの方針
  • ファイングレインドアクセスコントロール
    • カラムレベルパーミッションコントロールサポート
  • リアルタイム監査とモニタリング
    • Lake Formation APIの利用や簡単な監査コンソール

Athenaのユーザリクエストワークフロー

  1. Lake Formationのユーザーアクセスをセットアップする
  2. ユーザーはサービスの一つを経由してデータにアクセスにトライする
  3. サービスはユーザークレデンシャルをLake Formationに送る
  4. Lake Formationはデータアクセスを許可した一時クレデンシャルを返す

Lake Formationのテーブルデータにデータアクセスを付与してクエリする

  • Ana - 全てのカラムにアクセスを許可する
  • Maria - jurisdictionカラムのみアクセス許可する

クエリを実行すると、Anaは全てのカラムが表示するが、Mariaはjurisdictionカラムのみ表示する

その他の新機能

多くの機能追加

  • 高度な地理空間機能(オンボードでプレビュー)
  • Athena workgroups
  • INSERT INTO
  • Okta IDP サポート
  • JDBC/ODBC サポートのアップデート

  • Preview featuresについてを参照

Athenaを使用するメリット

  • 目的に合ったデータベース戦略を選択できる
  • Athenaはプロプライエタリなフォーマットだけに縛られない
    • メタデータストア、データストア、データフォーマット、IDP
  • Athenaを用いてデータをクエリすることで分析とETL速度を向上する

デモ

フェデレーテッドクエリのデモ(作成済みのコネクタ)

Athenaのフェデレーテッドクエリ簡単に始めるには、最初にすぐに使える作成済みのコネクタをデプロイして使うことです。作成済みのコネクタを、Athenaチームが作成したServerlessリポジトリに公開したものです。2つめは、UDFとセットでプロプライエタリファイルフォーマットなカスタムデータソース用に新たなコネクターを作成します。awslabs/aws-athena-query-federationサンプルフォルダには手順が書かれたチュートリアルがあります。

Serverless Application RepositoryでPublic applicationsをクリックし、Amazon Athena federationでフィルタして,Show apps that create custom IAM roles or resource policiesをチェックすると登録済みのコネクターを参照できます。例えば、AthenaCloudwatchConnectorを選択します。AWS Lambda のFunctuionsでSpillBucketとカタログ名を指定してデプロイします。

最後にAthenaでクエリしますが、プレビュ中はAmazonAthenaPreviewFunctionalityという特別なworkgroupを作成して、このworkgroupに切り替えてクエリを実行しなければなりません。Prestoのクエリプランナは、LambdaFunctionをログストリーム毎に呼び出します。

フェデレーテッドクエリのデモ(スクラッチのコネクタ)

また、カスタムコネクタを作成できます。カスタムコネクタはawslabs/aws-athena-query-federationからコードをチェックアウトして、必要に応じて変更を加えることもできます。TODOコメントの中に追加すべきコードのサンプルがあります。

コードの変更が終わったら、Serverless Application Repositoryにパブリッシュするため、../tools/publish.sh S3_BUCKET_NAME athena-example AWS_REGIONを実行します。

Serverless Application Repositoryで、Private applicationsをクリックし、Show apps that create custom IAM roles or resource policiesをチェックすると参照できます。次にコネクタを検証するため、../tools/validate_connector.sh --lambda-func <function_name> --schema schema1 --table table1 --constraints year=2017,month=11,day=1を実行します。Successfully Passed Validation!が出ると成功です。

最後にAthenaでクエリします。クエリグループはAmazonAthenaPreviewFunctionalityという特別なworkgroupに切り替えてクエリを実行してください。

まとめ

レポートで紹介した内容は殆どがre:Invent2019開催直前に発表されたサービス、いわゆる予選落ちサービスですが、新しいものばかりでしたので大変勉強になりました。

フェデレーテッドクエリは、Lambda FunctionをAWS Serverless Application Repositoryに登録してAthenaから呼び出すことでS3データレイク以外のデータをデータソースに指定できる画期的なサービスです。実はワークショップでスクラッチのコネクタを作成したので、後日ご紹介します。

AthenaのML機能は、SageMakerで作成したモデルをデプロイすると、Athenaから推論ができるようになるというサービスです。SQLから簡単に呼び出せるようになると、BIツールからも簡単に推論を実行できるようになるはずです。

プレビューサービスについて、GAの際には作成やデプロイ方法が変わる可能性がありますのでご了承ください。