498
Amazon Athena ユーザーガイド Amazon Athena: ユーザーガイド Copyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athenaユーザーガイド

Amazon Athena: ユーザーガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Page 2: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

Table of ContentsAmazon Athena とは何ですか? ............................................................................................................ 1

Athena が適している用途 ............................................................................................................ 1Athena へのアクセス .................................................................................................................. 1テーブル、データベース、およびデータカタログの理解 ................................................................... 2AWS のサービスの Athena との統合 ............................................................................................. 3

セットアップ ..................................................................................................................................... 6AWS にサインアップする ............................................................................................................ 6

AWS アカウントを作成するには ........................................................................................... 6IAM ユーザーを作成する .............................................................................................................. 6

管理者グループを作成するには ............................................................................................. 6自分用の IAM ユーザーを作成するには、管理者グループにユーザーを追加し、ユーザーのパスワードを作成します。 ......................................................................................................... 7

Athena を使用するための管理ポリシーのアタッチ ........................................................................... 7はじめに ............................................................................................................................................ 8

Prerequisites .............................................................................................................................. 8ステップ 1: データベースの作成 ................................................................................................... 8ステップ 2: テーブルを作成する ................................................................................................... 9ステップ 3: データのクエリ ....................................................................................................... 11他のデータソースへの接続 ......................................................................................................... 14

Amazon Athena へのアクセス ............................................................................................................ 15コンソールを使用する ............................................................................................................... 15API の使用 ............................................................................................................................... 15CLI の使用 ............................................................................................................................... 16

データソースへの接続 ....................................................................................................................... 17AWS Glue との統合 .................................................................................................................. 17

AWS Glue を使用して Amazon S3 でデータソースに接続する ................................................ 18Athena と AWS Glue を併用する際のベストプラクティス ....................................................... 21AWS Glue データカタログへのステップバイステップのアップグレード .................................... 30よくある質問: AWS Glue データカタログ へのアップグレード ................................................ 32

Hive メタストアの使用 .............................................................................................................. 34機能の概要 ....................................................................................................................... 35Workflow ......................................................................................................................... 36考慮事項と制約事項 .......................................................................................................... 36Apache Hive メタストアへの Athena の接続 ......................................................................... 37AWS Serverless Application Repository を使用する ............................................................... 43デフォルトカタログの使用 ................................................................................................. 44Hive メタストアでの AWS CLI を使用する ........................................................................... 48リファレンス実装 .............................................................................................................. 54

Amazon Athena Federated Query (Preview) を使用する ................................................................. 55考慮事項と制約事項 .......................................................................................................... 56コネクタのデプロイとデータソースへの接続 ......................................................................... 56AWS Serverless Application Repository を使用する ............................................................... 57Athena データソースコネクタ ............................................................................................. 58フェデレーティッドクエリの書き込み .................................................................................. 60データソースコネクタの記述 .............................................................................................. 64

データカタログにアクセスするための IAM ポリシー ..................................................................... 65データカタログポリシーの例 .............................................................................................. 66

データソースの管理 .................................................................................................................. 69ODBC および JDBC ドライバーを使用した Amazon Athena への接続 .............................................. 71

JDBC ドライバーを介した Athena の使用 ............................................................................ 72ODBC での Amazon Athena との接続 ................................................................................. 73

データベースとテーブルの作成 ........................................................................................................... 76データベースの作成 .................................................................................................................. 76テーブルの作成 ......................................................................................................................... 78

iii

Page 4: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

考慮事項と制約事項 .......................................................................................................... 79AWS Glue または Athena コンソールを使用したテーブルの作成 .............................................. 80

テーブル、データベース、および列の名前 .................................................................................... 85Athena のテーブル名とテーブルの列名は小文字にする必要があります。 .................................. 85特殊文字 .......................................................................................................................... 85

予約キーワード ......................................................................................................................... 86DDL ステートメントの予約キーワードのリスト ..................................................................... 86SQL SELECT ステートメントの予約キーワードのリスト ........................................................ 86予約ワードを含むクエリの例 .............................................................................................. 87

Amazon S3 のテーブルの場所 .................................................................................................... 87テーブルの場所とパーティション ........................................................................................ 88

列指向ストレージ形式 ............................................................................................................... 89列指向形式への変換 .................................................................................................................. 89

Overview ......................................................................................................................... 90開始する前に ..................................................................................................................... 8例: EMRクラスタを使用したデータのParquetへの変換 ........................................................... 92

データのパーティション分割 ...................................................................................................... 93考慮事項と制約事項 .......................................................................................................... 93パーティション分割されたデータを使用するテーブルの作成とロード ....................................... 94パーティション分割されたデータとパーティション分割されていないデータのクエリ用の準備 ..... 94

パーティション射影 .................................................................................................................. 98パーティション化されたテーブルのプルーニングと射影 ......................................................... 98パーティション射影の使用 ................................................................................................. 98ユースケース .................................................................................................................... 98考慮事項と制約事項 .......................................................................................................... 99パーティション射影の設定 ................................................................................................ 100パーティション射影のサポートされている型 ....................................................................... 104ID の動的なパーティション化 ........................................................................................... 108Amazon Kinesis Data Firehose 例 ..................................................................................... 110

クエリの実行 .................................................................................................................................. 111クエリ結果とクエリ履歴 ........................................................................................................... 111

クエリ ID の取得 ............................................................................................................. 112クエリ出力ファイルの識別 ................................................................................................ 113Athena コンソールを使用したクエリ結果ファイルのダウンロード .......................................... 115クエリ結果の場所の指定 ................................................................................................... 116クエリ履歴の表示 ............................................................................................................ 118

ビューの使用 .......................................................................................................................... 120どのようなときにビューを使うのでしょう。 ....................................................................... 121Athena のビューでサポートされているアクション ............................................................... 121ビューの考慮事項 ............................................................................................................ 122ビューの制限 .................................................................................................................. 123コンソールでビューを操作する ......................................................................................... 123ビューの作成 .................................................................................................................. 124ビューの例 ..................................................................................................................... 125ビューの更新 .................................................................................................................. 125ビューの削除 .................................................................................................................. 125

クエリ結果からのテーブルの作成 (CTAS) ................................................................................... 126CTAS クエリに関する考慮事項と制約事項 .......................................................................... 126コンソールでの CTAS クエリの実行 .................................................................................. 128バケット化とパーティション化の比較 ................................................................................ 131CTAS クエリの例 ............................................................................................................ 132ETL での CTAS および INSERT INTO の使用 ..................................................................... 135100 個を超えるパーティションを持つテーブルの作成 ........................................................... 141

スキーマの更新を処理する ........................................................................................................ 144総括 Athena における更新とデータ形式 .............................................................................. 144Parquet および ORC におけるインデックスアクセス ............................................................ 146更新型 ........................................................................................................................... 147

iv

Page 5: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

パーティションがあるテーブルを更新する .......................................................................... 152配列のクエリ .......................................................................................................................... 153

配列の作成 ..................................................................................................................... 154配列の連結 ..................................................................................................................... 155配列のデータ型の変換 ...................................................................................................... 156長さの確認 ..................................................................................................................... 157配列要素へのアクセス ...................................................................................................... 157ネストされた配列のフラット化 ......................................................................................... 158サブクエリからの配列の作成 ............................................................................................. 160配列のフィルタ処理 ......................................................................................................... 161配列のソート .................................................................................................................. 162配列での集計関数の使用 ................................................................................................... 162配列から文字列への変換 ................................................................................................... 163配列を使用してマップを作成する ...................................................................................... 164複合型の配列とネストされた構造のクエリ .......................................................................... 164

地理空間データのクエリ ........................................................................................................... 170地理空間クエリとは ......................................................................................................... 170入力データ形式とジオメトリデータ型 ................................................................................ 170サポートされる地理空間関数のリスト ................................................................................ 171例: 地理空間クエリ .......................................................................................................... 179

Hudi データセットに対するクエリ ............................................................................................. 181Hudi データセットストレージタイプ .................................................................................. 181考慮事項と制約事項 ......................................................................................................... 182Hudi テーブルの作成 ....................................................................................................... 182

JSON のクエリ ....................................................................................................................... 184JSON データ読み取りのベストプラクティス ....................................................................... 185JSON からのデータの抽出 ............................................................................................... 186JSON 配列内の値の検索 ................................................................................................... 188JSON 配列の長さとサイズの取得 ...................................................................................... 190JSON クエリのトラブルシューティング ............................................................................. 191

ML with Athena (Preview) を使用する ........................................................................................ 191考慮事項と制約事項 ......................................................................................................... 191ML with Athena (Preview) 構文 ......................................................................................... 192

UDF を使用したクエリ(プレビュー) ....................................................................................... 193考慮事項と制約事項 ......................................................................................................... 193UDF クエリ構文 .............................................................................................................. 194Lambda 使用した UDF の作成とデプロイ ........................................................................... 195

AWS サービスログをクエリする ............................................................................................... 200Application Load Balancer ログのクエリ ............................................................................. 201Classic Load Balancer ログのクエリ .................................................................................. 203Amazon CloudFront ログのクエリ ..................................................................................... 204AWS CloudTrail ログのクエリ ........................................................................................... 206Amazon EMR ログのクエリ .............................................................................................. 211AWS Global Accelerator フローログのクエリ ...................................................................... 214Amazon GuardDuty 結果のクエリの実行 ............................................................................. 216Network Load Balancer ログのクエリ ................................................................................ 217Amazon VPC フローログのクエリ ..................................................................................... 219AWS WAF ログのクエリ .................................................................................................. 221

AWS Glue データカタログ のクエリ .......................................................................................... 224データベースのリスト化と指定したデータベースの検索 ........................................................ 224指定したデータベース内のテーブルのリスト化と名前によるテーブルの検索 ............................ 225特定の表のパーティションのリスト化 ................................................................................ 226指定した表またはビューの列のリスト化または検索 .............................................................. 226

Web サーバ ログのクエリ ........................................................................................................ 228Apache ログのクエリ ...................................................................................................... 228IIS ログのクエリ ............................................................................................................. 230

セキュリティ .................................................................................................................................. 236

v

Page 6: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

データ保護 ............................................................................................................................. 236複数のタイプのデータの保護 ............................................................................................. 237保管時の暗号化 ............................................................................................................... 238転送時の暗号化 ............................................................................................................... 243キーの管理 ..................................................................................................................... 243ネットワーク間のプライバシー ......................................................................................... 244

アイデンティティとアクセスの管理 ........................................................................................... 244ユーザーアクセス用の管理ポリシー ................................................................................... 245JDBC および ODBC 接続を介したアクセス ........................................................................ 248Amazon S3 にアクセスします ........................................................................................... 249データベースとテーブルへのきめ細かなアクセス ................................................................. 249Data Catalog での暗号化されたメタデータへのアクセス ....................................................... 255S3 バケットへのクロスアカウントアクセス ........................................................................ 256ワークグループとタグへのアクセス ................................................................................... 259Athena Data Connector for External Hive Metastore (Preview) へのアクセスを許可する .............. 260外部 Hive メタストアへの Lambda 関数アクセスを許可する .................................................. 262Athena Federated Query (Preview) へのアクセスを許可する .................................................. 265Athena UDF へのアクセスを許可する ................................................................................ 269ML with Athena (Preview) のアクセスの許可 ....................................................................... 273Athena API へのフェデレーションアクセスの有効化 ............................................................ 274

ログ記録とモニタリング ........................................................................................................... 277コンプライアンス検証 .............................................................................................................. 277耐障害性 ................................................................................................................................ 278インフラストラクチャセキュリティ ........................................................................................... 278

インターフェイス VPC エンドポイントを使用して Amazon Athena に接続する ........................ 279設定と脆弱性の分析 ................................................................................................................. 280Athena を Lake Formation に使用する ....................................................................................... 281

Lake Formation データアクセスの仕組み ............................................................................ 281考慮事項と制約事項 ......................................................................................................... 283ユーザーアクセス許可の管理 ............................................................................................. 285既存のデータベースとテーブルへの Lake Formation のアクセス許可の適用 ............................. 287使用 Lake Formation および JDBC または ODBC for Federated Access .................................. 288

ワークグループを使用してクエリのアクセスとコストを制御する ........................................................... 331クエリを実行するためのワークグループの使用 ............................................................................ 331

ワークグループを使用するメリット ................................................................................... 331ワークグループの仕組み ................................................................................................... 332ワークグループのセットアップ ......................................................................................... 333ワークグループにアクセスするための IAM ポリシー ........................................................... 334ワークグループ設定 ......................................................................................................... 339ワークグループの管理 ...................................................................................................... 340Athena ワークグループ API ............................................................................................. 346ワークグループのトラブルシューティング .......................................................................... 347

CloudWatch メトリクスとイベントによるコスト管理とクエリのモニタリング .................................. 348CloudWatch クエリメトリクスを有効にする ........................................................................ 349CloudWatch メトリクスを使用した Athena クエリのモニタリング .......................................... 349CloudWatch イベントを使用した Athena クエリのモニタリング ............................................. 353データ使用量の制御制限の設定 ......................................................................................... 355

リソースのタグ付け ......................................................................................................................... 359タグの基本 ............................................................................................................................. 359タグの制限 ............................................................................................................................. 360コンソールでのワークグループのタグの操作 ............................................................................... 360

個々のワークグループのタグを表示する ............................................................................. 360個々のワークグループでのタグの追加と削除 ....................................................................... 361

タグオペレーションの使用 ........................................................................................................ 361API オペレーションを使用したタグの管理 .......................................................................... 362AWS CLI を使用したタグの管理 ........................................................................................ 363

タグベースの IAM アクセスコントロールポリシー ....................................................................... 365

vi

Page 7: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

ワークグループのタグポリシーの例 ................................................................................... 365データカタログのタグポリシーの例 ................................................................................... 367

ログのモニタリングとトラブルシューティング .................................................................................... 370AWS CloudTrail を使用した Amazon Athena API コールのログ記録 ................................................ 370

CloudTrail 内の Athena 情報 ............................................................................................. 370Athena ログファイルエントリの概要 .................................................................................. 371

トラブルシューティング ........................................................................................................... 373SerDe リファレンス ........................................................................................................................ 374

SerDe の使用 ......................................................................................................................... 374クエリで SerDe を使用するには ........................................................................................ 374

サポートされる SerDes およびデータ形式 .................................................................................. 375Avro SerDe .................................................................................................................... 376Regex SerDe .................................................................................................................. 378CloudTrail SerDe ............................................................................................................. 379CSV を処理するための OpenCSVSerDe ............................................................................. 381Grok SerDe .................................................................................................................... 384JSON SerDe ライブラリ .................................................................................................. 387CSV、TSV、およびカスタム区切りファイルの LazySimpleSerDe .......................................... 391ORC SerDe .................................................................................................................... 396Parquet SerDe ................................................................................................................ 398

圧縮形式 ................................................................................................................................ 401注意事項とリソース ......................................................................................................... 401

SQL リファレンス ........................................................................................................................... 402のデータ型 Athena .................................................................................................................. 402DML クエリ、関数、および演算子 ............................................................................................. 403

SELECT ........................................................................................................................ 403INSERT INTO ................................................................................................................. 408Presto 関数 .................................................................................................................... 411

DDL ステートメント ................................................................................................................ 411サポートされない DDL ..................................................................................................... 412ALTER DATABASE SET DBPROPERTIES ......................................................................... 413ALTER TABLE ADD COLUMNS ........................................................................................ 414ALTER TABLE ADD PARTITION ....................................................................................... 415ALTER TABLE DROP PARTITION .................................................................................... 416ALTER TABLE RENAME PARTITION ................................................................................ 416ALTER TABLE REPLACE COLUMNS ................................................................................ 417ALTER TABLE SET LOCATION ........................................................................................ 418ALTER TABLE SET TBLPROPERTIES .............................................................................. 418CREATE DATABASE ...................................................................................................... 419CREATE TABLE ............................................................................................................. 420CREATE TABLE AS ........................................................................................................ 423CREATE VIEW ............................................................................................................... 426DESCRIBE TABLE .......................................................................................................... 426DESCRIBE VIEW ............................................................................................................ 427DROP DATABASE .......................................................................................................... 427DROP TABLE ................................................................................................................. 428DROP VIEW .................................................................................................................. 429MSCK REPAIR TABLE .................................................................................................... 429SHOW COLUMNS .......................................................................................................... 431SHOW CREATE TABLE .................................................................................................. 431SHOW CREATE VIEW .................................................................................................... 432SHOW DATABASES ....................................................................................................... 432SHOW PARTITIONS ....................................................................................................... 432SHOW TABLES .............................................................................................................. 433SHOW TBLPROPERTIES ................................................................................................ 434SHOW VIEWS ................................................................................................................ 434

考慮事項と制約事項 ................................................................................................................. 435

vii

Page 8: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

クロスリージョンクエリ ................................................................................................... 436コードのサンプル、サービスのクォータ、以前のバージョンの JDBC ドライバー ..................................... 438

コードサンプル ....................................................................................................................... 438Constants ....................................................................................................................... 438Athena にアクセスするためのクライアントの作成 ............................................................... 439クエリ実行の開始 ............................................................................................................ 439クエリ実行の停止 ............................................................................................................ 441クエリ実行の表示 ............................................................................................................ 443名前付きクエリの作成 ...................................................................................................... 444名前付きクエリの削除 ...................................................................................................... 444名前付きクエリの表示 ...................................................................................................... 446

以前のバージョンの JDBC ドライバー ....................................................................................... 447JDBC ドライバーバージョン 1.1.0 用手順 .......................................................................... 448

サービスクォータ .................................................................................................................... 452Queries .......................................................................................................................... 452Workgroups .................................................................................................................... 452AWS Glue ...................................................................................................................... 453Amazon S3 バケット ....................................................................................................... 453アカウントあたりの API コールのクォータ ......................................................................... 453

リリースノート ............................................................................................................................... 4552020 年 10 月 22 日 ................................................................................................................ 4562020 年 7 月 29 日 ................................................................................................................. 4562020年7月9日 ......................................................................................................................... 456

Apache Hudi データセットのクエリ ................................................................................... 456AWS CloudFormationデータカタログリソース ..................................................................... 457

2020 年 6 月 1 日 ................................................................................................................... 457Amazon Athena で Apache Hive メタストアをメタカタログとして使用する ............................. 457

2020 年 5 月 21 日 ................................................................................................................. 4572020 年 4 月 1 日 ................................................................................................................... 4572020 年 3 月 11 日 ................................................................................................................. 4572020 年 3 月 6 日 ................................................................................................................... 4582019 年 11 月 26 日 ................................................................................................................ 458

フェデレーティッド SQL クエリ ....................................................................................... 458SQL クエリでの機械学習モデルの呼び出し ......................................................................... 459ユーザー定義関数 (UDF) (プレビュー) ................................................................................ 460Amazon Athena で Apache Hive メタストアをメタカタログとして使用する (プレビュー) ........... 460新しいクエリ関連メトリクス ............................................................................................. 460

2019 年 11 月 12 日 ................................................................................................................ 4612019 年 11 月 8 日 ................................................................................................................. 4612019 年 10 月 8 日 ................................................................................................................. 4612019 年 9 月 19 日 ................................................................................................................. 4612019 年 9 月 12 日 ................................................................................................................. 4622019 年 8 月 16 日 ................................................................................................................. 4622013 年 8 月 9 日 ................................................................................................................... 4622019 年 6 月 26 日 ................................................................................................................. 4632019 年 5 月 24 日 ................................................................................................................. 4632019 年 3 月 5 日 ................................................................................................................... 4632019 年 2 月 22 日 ................................................................................................................. 4642019 年 2 月 18 日 ................................................................................................................. 4642018 年 11 月 20 日 ................................................................................................................ 4652018 年 10 月 15 日 ................................................................................................................ 4662018 年 10 月 10 日 ................................................................................................................ 4662018 年 9 月 6 日 ................................................................................................................... 4672018 年 8 月 23 日 ................................................................................................................. 4672018 年 8 月 16 日 ................................................................................................................. 4682018 年 8 月 7 日 ................................................................................................................... 4682018 年 5 月 6 日 ................................................................................................................... 468

viii

Page 9: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

ビューのサポート ............................................................................................................ 469エラーメッセージの改善と更新 ......................................................................................... 469バグ修正 ........................................................................................................................ 469

2018 年 5 月 17 日 ................................................................................................................. 4692018 年 4 月 19 日 ................................................................................................................. 4702018 年 4 月 6 日 ................................................................................................................... 4702018 年 3 月 15 日 ................................................................................................................. 4702018 年 2 月 2 日 ................................................................................................................... 4702018 年 1 月 19 日 ................................................................................................................. 4702017 年 11 月 13 日 ................................................................................................................ 4712017 年 11 月 1 日 ................................................................................................................. 4712017 年 10 月 19 日 ................................................................................................................ 4712017 年 10 月 3 日 ................................................................................................................. 4722017 年 9 月 25 日 ................................................................................................................. 4722017 年 8 月 14 日 ................................................................................................................. 4722017 年 8 月 4 日 ................................................................................................................... 4722017 年 6 月 22 日 ................................................................................................................. 4722017 年 6 月 8 日 ................................................................................................................... 4722017 年 5 月 19 日 ................................................................................................................. 473

Improvements ................................................................................................................. 473バグ修正 ........................................................................................................................ 473

2017 年 4 月 4 日 ................................................................................................................... 474Features ........................................................................................................................ 474Improvements ................................................................................................................. 474バグ修正 ........................................................................................................................ 474

2017 年 3 月 24 日 ................................................................................................................. 475Features ........................................................................................................................ 475Improvements ................................................................................................................. 475バグ修正 ........................................................................................................................ 475

2017 年 2 月 20 日 ................................................................................................................. 475Features ........................................................................................................................ 475Improvements ................................................................................................................. 477

ドキュメント履歴 ............................................................................................................................ 478AWS の用語集 ................................................................................................................................ 488............................................................................................................................................... cdlxxxix

ix

Page 10: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena が適している用途

Amazon Athena とは何ですか?Amazon Athena は、標準 SQL を使用して Amazon Simple Storage Service (Amazon S3) でのデータの直接分析を簡易化するインタラクティブなクエリサービスです。AWS マネジメントコンソールでいくつかアクションを実行するだけで、Athena にデータの保存先の Amazon S3 を設定し、標準 SQL を使用してアドホッククエリの実行を開始できます。結果は数秒で返ります。

Athenaはサーバーレスであるため、インフラストラクチャの設定や管理は不要です。また、実行したクエリにのみ課金されます。 Athenaは、自動的に—実行されるクエリを並列でスケーリング—するため、大規模なデータセットや複雑なクエリでも結果がすぐに返されます。

トピック• Athena が適している用途 (p. 1)• Athena へのアクセス (p. 1)• テーブル、データベース、およびデータカタログの理解 (p. 2)• AWS のサービスの Athena との統合 (p. 3)

Athena が適している用途Athena では、Amazon S3 に保存された非構造化データ、半構造化データ、および構造化データを分析できます。たとえば、CSV 形式、JSON 形式、列データ形式 (Apache Parquet や Apache ORC など) に対応しています。Athena では、ANSI SQL を使用してアドホッククエリを実行できます。データを Athena 内に集約またはロードする必要はありません。

Athena では Amazon QuickSight との統合により、データを簡単に可視化できます。Athena では、JDBCや ODBC ドライバーを介してビジネスインテリジェンスツールや SQL クライアントに接続し、レポートの生成やデータの探索を行うことができます。詳細については、「Amazon QuickSight にようこそ」(Amazon QuickSight ユーザーガイド) および「ODBC および JDBC ドライバーを使用した AmazonAthena への接続 (p. 71)」を参照してください。

Athena は AWS Glue データカタログ を統合することで、Amazon S3 のデータに対する永続的なメタデータストアを提供します。これにより、AWS アカウント全体で、AWS Glue の ETL およびデータ探索機能が統合された一元的なメタデータストアに基づいて、Athena でのテーブルの作成とデータのクエリを行うことができます。詳細については、 ??? (p. 17)開発者ガイドの「AWS Glue との統合」と「AWS Glue とは」を参照してください。AWS Glue

Athena が活用または統合する AWS サービスの一覧については、「the section called “AWS のサービスのAthena との統合” (p. 3)」を参照してください。

Athena へのアクセスにアクセスするには、 Athena 、JDBC または ODBC 接続、 AWS マネジメントコンソールAPI、AthenaCLI、AthenaSDK、または AWS を使用できます。AWS Tools for Windows PowerShell

• コンソールの使用を開始するには、「開始方法 (p. 8)」を参照してください。• JDBC または ODBC ドライバーを使用する方法については、「JDBC を介した Amazon Athena への接

続」と「ODBC (p. 72) を使用した Amazon Athenaへの接続」を参照してください。 (p. 73)

1

Page 11: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドテーブル、データベース、およびデータカタログの理解

• Athena API を使用するには、Amazon Athena API リファレンス を参照してください。• CLI を使用するには、AWS CLI をインストールし、次にコマンドラインから「aws athena help」と

入力して使用可能なコマンドを確認します。使用可能なコマンドの詳細については、AWS Athena コマンドラインリファレンスを参照してください。

• を使用するには、 AWS SDK for Java 2.x 、 の Athena Athena AWS SDK for Java 2.x API ReferenceJava V2 の例、および のセクションを参照してくださいGitHub.com,。AWS SDK for Java 2.x 開発者ガイド

• を使用するには、AWS SDK for .NETAWS SDK for Amazon.Athena .NET バージョン 3 API リファレンス、 の .NET 例、Athenaおよび の名前空間を参照してくださいGitHub.com,。AWS SDK for .NET 開発者ガイド

• を使用するには、AWS Tools for Windows PowerShellAWS Tools for - Amazon Athena PowerShell コマンドレットリファレンス、AWS Tools for PowerShellportal ページ、および を参照してください。AWSTools for Windows PowerShell ユーザーガイド

• プログラムで接続できるAthenaサービスエンドポイントの詳細については、 の「Amazon Athena エンドポイントとクォータ」を参照してくださいアマゾン ウェブ サービス全般のリファレンス。

テーブル、データベース、およびデータカタログの理解

Athena では、テーブルとデータベースはメタデータ定義のコンテナです。これにより、基になるソースデータのスキーマを定義します。Athena では、データセットごとにテーブルが必要です。テーブルのメタデータは、Amazon S3 内のデータの保存先を Athena に指示し、列名、データ型、テーブル名などのデータの構造を指定します。データベースは、テーブルを論理的なグループにまとめたものであり、データセットのメタデータおよびスキーマ情報のみを保持します。

Athena では、クエリ対象のデータセットごとに基になるテーブルが必要です。このテーブルに、取得したクエリの結果が返されます。したがって、データをクエリする前に、Athena にテーブルを登録しておく必要があります。登録は、テーブルの自動作成または手動作成に伴って行われます。

テーブルの作成方法に関係なく、テーブル作成プロセスに伴ってデータセットが Athena に登録されます。登録先は AWS Glue データカタログです。この登録によって Athena はデータに対するクエリを実行できます。

• テーブルを自動作成するには、Athena 内から AWS Glue クローラを使用します。AWS Glue およびクローラの詳細については、「AWS Glue との統合 (p. 17)」を参照してください。AWS Glue で作成したテーブルは、独自の AWS Glue Data Catalog に登録されます。Athena は、AWS Glue Data Catalogを使用して、このメタデータを保存および取得したり、クエリを実行して基となるデータセットを分析したりします。

テーブルを作成したら、SQL の SELECT (p. 403)ステートメントを使用してクエリを実行できます。たとえば、ソースデータの (p. 406)特定のファイルの場所を取得できます。クエリ結果は、指定したクエリ結果の場所に に保存されますAmazon S3。クエリ結果の場所の指定 (p. 116)

AWS Glue Data Catalog は、AWS アカウント全体でアクセスできます。その他の AWS サービスが AWSGlue Data Catalog を共有できるため、Athena を使用して組織全体で作成されたデータベースやテーブルを確認でき、その逆もできます。さらに、AWS Glue ではデータスキーマを自動検出し、データの抽出、変換、ロード (ETL) を行うことができます。

• テーブルを手動で作成するには• Athena コンソールを使用してテーブル作成ウィザードを実行します。• Athena コンソールを使用して Hive DDL ステートメントをクエリエディタに書き込みます。• AthenaAPI または CLI で DDL ステートメントを使用して SQL クエリ文字列を実行します。

2

Page 12: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS のサービスの Athena との統合

• Athena JDBC または ODBC ドライバーを使用します。

テーブルやデータベースを手動で作成すると、 Athena HiveQLでは 、 CREATE TABLE 、 CREATEDATABASE などのDROP TABLEデータ定義言語 (DDL) ステートメントを使用して、AWS Glue データカタログにテーブルやデータベースを作成します。

Note

2017 年 8 月 14 日より前に作成されたテーブルが Athena にある場合、これらは Athena が管理する内部データカタログ内に作成されたものであり、更新するまでは AWS Glue データカタログと併存します。詳細については、「AWS Glue データカタログへのステップバイステップのアップグレード (p. 30)」を参照してください。

内部で既存のテーブルをクエリする場合、Amazon Athena は分散 SQL エンジンの Presto を使用します。Athena 内には、Athena を使用してテーブルを作成してクエリを実行する方法を示すために、サンプルデータを使用した例が用意されています。Athena コンソールには Amazon S3 の保存済みデータに基づいてテーブルの作成を開始するチュートリアルも用意されています。

• テーブルの作成と Athena クエリエディタへのクエリの書き込みに関する詳細なチュートリアルについては、「開始方法 (p. 8)」を参照してください。

• コンソールで Athena チュートリアルを実行します。このチュートリアルは、https://console.aws.amazon.com/athena/ に初めてログインしたときに自動的に起動します。コンソールで[Tutorial] を選択して起動することもできます。

AWS のサービスの Athena との統合他の AWS サービスのデータは、Athena でクエリできます。Athena は複数の AWS サービスを活用します。各サービスでサポートされているリージョンのリストについては、https://docs.aws.amazon.com/general/latest/gr/rande.htmlの「アマゾン ウェブ サービス全般のリファレンスAWS のリージョンとエンドポイント」を参照してください

AWS CloudFormationデータカタログ

リファレンストピック: の AWS::Athena::DataCatalogAWS CloudFormation ユーザーガイド

名前、説明、タイプ、パラメータ、タグを含め、 Athena データカタログを指定します。詳細については、Amazon Athena API リファレンスを参照してくださいDataCatalog。

名前付きクエリ

リファレンストピック: の AWS::Athena::NamedQueryAWS CloudFormation ユーザーガイド

で名前付きクエリAWS CloudFormationを指定し、 Athena で実行します。名前付きクエリを使用すると、クエリ名をクエリにマッピングし、保存されたクエリとして Athena コンソールから実行できます。詳細については、CreateNamedQuery次のガイドを参照してくださいAmazonAthena API リファレンス。

ワークグループ

リファレンストピック: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.htmlユーザーガイドの「AWS::Athena::WorkGroup」AWSCloudFormation

を使用してAthenaワークグループを指定しますAWS CloudFormation。Athena ワークグループを使用して、自分または自分のグループのクエリを同じアカウントの他のクエリから分離します。詳細については、 ワークグループを使用してクエリのアクセスとコストを

3

Page 13: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS のサービスの Athena との統合

制御する (p. 331)Amazon Athena ユーザーガイドおよび Amazon Athena API リファレンスCreateWorkGroupの を参照してください。

Amazon CloudFront

リファレンストピック: Amazon CloudFront ログのクエリ (p. 204)

Athena を使用して Amazon CloudFront をクエリします。CloudFront の使用方法の詳細については、「Amazon CloudFront 開発者ガイド」を参照してください。

AWS CloudTrail

リファレンストピック: AWS CloudTrail ログのクエリ (p. 206)

CloudTrail ログで Athena を使用すると、AWS サービスのアクティビティ分析が大幅に強化されます。たとえば、クエリを使用して傾向を識別したり、アクティビティを属性 (ソース IP アドレスやユーザーなど) でさらに分離したりできます。CloudTrailコンソールから直接ログをクエリするテーブルを作成し、それらのテーブルを使用して でクエリを実行できますAthena。詳細については、 コンソールでCloudTrailログのテーブルCloudTrailを作成するを参照してください (p. 207)。

Elastic Load Balancing

リファレンストピック: Application Load Balancer ログのクエリ (p. 201)

Application Load Balancer のログをクエリすることで、トラフィックの送信元、レイテンシー、Elastic Load Balancing インスタンスとバックエンドアプリケーションとの間で転送されるバイト数を確認できます。詳細については、「ALB ログのテーブルの作成」を参照してください (p. 201)。

リファレンストピック: Classic Load Balancer ログのクエリ (p. 203)

Classic Load Balancer ログをクエリして、Elastic Load Balancing インスタンスおよびバックエンドアプリケーションとの間で送受信されるトラフィックのパターンを分析して理解します。トラフィックの送信元、レイテンシー、および転送されたバイト数を確認できます。詳細については、「ELB ログのテーブルの作成」を参照してください (p. 203)。

AWS Glue データカタログ

リファレンストピック: AWS Glue との統合 (p. 17)

Athena は AWS Glue データカタログ を統合することで、Amazon S3 のデータに対する永続的なメタデータストアを提供します。これにより、AWS アカウント全体で、AWS Glue の ETL およびデータ探索機能が統合された一元的なメタデータストアに基づいて、Athena でのテーブルの作成とデータのクエリを行うことができます。詳細については、 との統合AWS Glue (p. 17)および AWS Glueの内容を参照してくださいAWS Glue 開発者ガイド。

IAM

リファレンストピック: のアクション Amazon Athena

IAM アクセス権限ポリシーで Athena API アクションを使用できます。詳細については、「 のアクション」Amazon Athenaおよび「 」を参照してくださいAthena の Identity and AccessManagement (p. 244)。

Amazon QuickSight

リファレンストピック: ODBC および JDBC ドライバーを使用した Amazon Athena への接続 (p. 71)

Athena では Amazon QuickSight との統合により、データを簡単に可視化できます。Athena では、JDBC や ODBC ドライバーを介してビジネスインテリジェンスツールや SQL クライアントに接続し、レポートの生成やデータの探索を行うことができます。の詳細については、 AmazonQuickSight Amazon QuickSightユーザーガイドのAmazon QuickSight「情報」を参照してください。での JDBC Athena および ODBC ドライバーの使用については、「ODBC および JDBC ドライバーを使用した Amazon Athena への接続」を参照してください (p. 71)。

4

Page 14: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS のサービスの Athena との統合

Amazon S3 インベントリ

リファレンストピック: での Athena を使用したインベントリのクエリAmazon Simple StorageService 開発者ガイド

では、標準 SQL を使用してAmazon AthenaインベントリAmazon S3のクエリを実行できます。Amazon S3 インベントリを使用して、ビジネス、コンプライアンス、および規制上のニーズに対応して、オブジェクトのレプリケーションと暗号化のステータスを監査し、レポートできます。詳細については、次のガイドの「Amazon S3 インベントリ」を参照してくださいAmazon Simple StorageService 開発者ガイド。

AWS Step Functions

リファレンストピック: AthenaStep Functionsで と を呼び出すAWS Step Functions 開発者ガイド

AthenaAWS Step Functionsを使用して を呼び出すAWS Step Functionsと、 を使用して特定の AWSサービスを直接制御Amazon ステートメント言語できます。Step Functionsを使用して、 でクエリの実行の開始と停止、クエリ結果の取得、アドホックまたはスケジュールされたデータクエリの実行、および Athena のデータレイクからの結果の取得を行うことができます。Amazon S3詳細については、AWS Step Functions 開発者ガイド を参照してください。

AWS Systems Manager インベントリ

リファレンストピック: の複数のリージョンとアカウントからのインベントリデータのクエリAWSSystems Manager ユーザーガイド

AWS Systems Managerインベントリは Amazon Athena と統合され、複数のAWSリージョンとアカウントからのインベントリデータのクエリに役立ちます。詳細については、AWS Systems Managerユーザーガイド を参照してください。

Amazon Virtual Private Cloud

リファレンストピック: Amazon VPC フローログのクエリ (p. 219)

Amazon Virtual Private Cloud フローログは VPC のネットワークインターフェイスとの間で行き来する IP トラフィックに関する情報をキャプチャします。Athena のログをクエリしてネットワークトラフィックのパターンを調査し、Amazon VPC ネットワーク全体の脅威やリスクを特定します。Amazon VPC の詳細については、「Amazon VPC ユーザーガイド」を参照してください。

5

Page 15: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS にサインアップする

セットアップアマゾンウェブサービス (AWS) に既にサインアップしている場合は、Amazon Athena をすぐに使用できます。AWS にサインアップしていないか、Athena を使用したデータのクエリについてサポートが必要な場合は、最初に以下のタスクを完了してください。

AWS にサインアップするAWS にサインアップすると、アカウントは自動的に Athena などの AWS のすべてのサービスにサインアップします。料金が発生するのは、実際に使用したサービスの分のみです。Athena を使用する場合、Amazon S3 を使用してデータを保存します。Athena には AWS 無料利用枠がありません。

既に AWS アカウントをお持ちの場合は次のタスクに進んでください。AWS アカウントをお持ちでない場合は、次に説明する手順にしたがってアカウントを作成してください。

AWS アカウントを作成するには1. http://aws.amazon.com/ を開いて、[AWS アカウントの作成] を選択します。2. オンラインの手順に従います。サインアップ手順の一環として、通話呼び出しを受け取り、電話のキー

パッドを用いて PIN を入力することが求められます。

次のタスクで AWS アカウント番号が必要となるので、メモしておいてください。

IAM ユーザーを作成するAWS Identity and Access Management (IAM) ユーザーは、サービスにアクセスするために作成するアカウントです。メインの AWS アカウントとは異なるユーザーです。セキュリティ上のベストプラクティスとして、IAM ユーザーの認証情報を使用して AWS のサービスにアクセスすることをお勧めします。IAMユーザーを作成し、このユーザーを管理権限のある IAM グループに追加するか、このユーザーに管理権限を付与します。次に、IAM ユーザー用の URL と認証情報を使用して AWS にアクセスできます。

AWS にサインアップしても、自分用の IAM ユーザーをまだ作成していない場合は、IAM コンソールを使用して作成できます。コンソールの使用に慣れていない場合は、「AWS マネジメントコンソールの使用」を参照してください。

管理者グループを作成するには1. IAM コンソール (https://console.aws.amazon.com/iam/) にサインインします。2. ナビゲーションペインで [Groups]、[Create New Group] の順に選択します。3. [Group Name] にグループの名前 (Administrators など) を入力し、[Next Step] を選択します。4. ポリシーのリストで、AdministratorAccess ポリシーの横にあるチェックボックスを選択します。[Filter]

メニューと [Search] フィールドを使用して、ポリシーのリストをフィルタできます。5. [Next Step]、[Create Group] の順に選択します。新しいグループは、[Group Name] の下に表示されま

す。

6

Page 16: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド自分用の IAM ユーザーを作成するには、管理者グループにユーザーを追加し、ユーザーのパスワードを作成します。

自分用の IAM ユーザーを作成するには、管理者グループにユーザーを追加し、ユーザーのパスワードを作成します。1. ナビゲーションペインで、[Users]、[Create New Users] の順に選択します。2. [1] に、ユーザー名を入力します。3. [Generate an access key for each user] の横にあるチェックボックスをオフにし、[Create] を選択しま

す。4. ユーザーのリストで、先ほど作成したユーザーの名前 (チェックボックスではなく) を選択します。

[Search] フィールドを使用してユーザー名を検索できます。5. [Groups]、[Add User to Groups] の順に選択します。6. 管理者の横にあるチェックボックスをオンにして、[Add to Groups] を選択します。7. [Security Credentials] タブを選択します。[Sign-In Credentials] で、[Manage Password] を選択します。8. [Assign a custom password] を選択します。次に、[Password] フィールドと [Confirm Password] フィー

ルドにパスワードを入力します。完了したら、[Apply] を選択します。9. この新しい IAM ユーザーとしてサインインするには、AWS コンソールからサインアウトし、次の URL

を使用します。ここで、your_aws_account_id はハイフンを除いた AWS アカウント番号です (たとえば AWS アカウント番号が 1234-5678-9012 であれば、AWS アカウント ID は 123456789012 となります)。

https://*your_account_alias*.signin.aws.amazon.com/console/

サインインのリンクで、番号の代わりにアカウント名を使用する場合もあります。アカウントの IAM ユーザーのサインインリンクを確認するには、IAM コンソールを開き、ダッシュボードの [IAM users sign-inlink] の下を確認します。

Athena を使用するための管理ポリシーのアタッチAthena にアクセスするために使用する IAM アカウントに Athena 管理ポリシーをアタッチします。Athena 用に AmazonAthenaFullAccess と AWSQuicksightAthenaAccess の 2 つの管理ポリシーがあります。これらのポリシーは、ユーザーに代わって Amazon S3 にクエリを実行し、クエリ結果を別のバケットに書き込むアクセス許可を Athena に付与します。詳細および手順については、AWSIdentity and Access Management ユーザーガイドの「IAM ID のアクセス許可の追加 (コンソール)」を参照してください。ポリシーの内容の詳細については、「ユーザーアクセス用の IAM ポリシー (p. 245)」を参照してください。

Note

Amazon S3 の基となるデータセットにアクセスするには、追加のアクセス許可が必要になる場合があります。アカウントの所有者ではないか、バケットへのアクセスが制限されている場合は、バケット所有者に連絡してリソースベースのバケットポリシーを使用するアクセス権を付与してもらうか、アカウント管理者に連絡してアイデンティティベースのポリシーを使用するアクセス権を付与してもらいます。詳細については、「Amazon S3 のアクセス許可 (p. 249)」を参照してください。データセットまたは Athena のクエリ結果が暗号化されている場合は、追加のアクセス許可が必要になる場合があります。詳細については「暗号化オプションの設定 (p. 238)」を参照してください。

7

Page 17: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドPrerequisites

はじめにこのチュートリアルでは、Amazon Athena を使用してデータをクエリする手順を示します。AmazonSimple Storage Service に保存されたサンプルデータに基づいてテーブルを作成し、テーブルをクエリして、クエリ結果を確認します。

チュートリアルでは、ライブリソースを使用するため、実行したクエリに課金されます。このチュートリアルで使用するロケーションのサンプルデータに対しては課金されませんが、独自のデータファイルをAmazon S3 にアップロードする場合は料金が適用されます。

Prerequisites• 「セットアップ (p. 6)」に従って、アカウントにサインアップします (まだしていない場合)。• に使用しているのと同じAWSリージョン ( など米国西部 (オレゴン)) Athena およびアカウントを使用し

て、 でバケットを作成し、 からのクエリ結果を保持しますAmazon S3。Athena

ステップ 1: データベースの作成最初に、Athena でデータベースを作成する必要があります。

データベースを作成するには

1. Athena コンソールを開きます。2. Athena コンソールを初めて利用する場合は、開始方法のページが表示されます。[Get Started] を選択

してクエリエディタを開きます。初めての利用でない場合は、Athena クエリエディタが開きます。3. [set up a query result location in Amazon S3 (Amazon S3 でクエリ結果の場所を設定する)] リンクを選

択します。

4. [設定] ダイアログボックスで、クエリ結果Amazon S3用に で作成した バケットのパスを入力します。パスの先頭に s3:// を付け、パスの末尾にスラッシュを付けます。

8

Page 18: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドステップ 2: テーブルを作成する

5. [Save] をクリックします。6. Athena クエリエディターに、クエリペインが表示されます。クエリとステートメントをここに入力で

きます。

7. mydatabase という名前のデータベースを作成するには、次の CREATE DATABASE ステートメントを入力します。

CREATE DATABASE mydatabase

8. [Run Query (クエリの実行)] を選択するか、Ctrl+ENTER を押します。9. カタログの表示が更新され、左側のナビゲーションペインの [Database (データベース)] リストに

mydatabase と表示されていることを確認します。

ステップ 2: テーブルを作成するデータベースが作成されたので、ステートメントを実行してテーブルを作成する準備が整いました。テーブルは、ロケーション Athenaのサンプルデータに基づきますs3://athena-examples-myregion/cloudfront/plaintext/。 テーブルを作成するステートメントは、データにマッピングする列を定義し、データを区切る方法と、サンプルデータを含むAmazon S3場所を指定します。

9

Page 19: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドステップ 2: テーブルを作成する

テーブルを作成するには

1. [Database (データベース)] で、mydatabase を選択します。2. クエリエディタでプラス記号 (+) を選択して、新しいクエリを含むタブを作成します。一度に最大 10

個のクエリタブを開くことができます。

3. クエリペインに、次の CREATE TABLE クエリを入力します。クエリの最後にあるLOCATIONステートメントで、myregion 現在使用しているAWSリージョンに置き換えます (例: )us-west-1。

CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, os STRING, Browser STRING, BrowserVersion STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples-myregion/cloudfront/plaintext/';

Note

s3://athena-examples-myregion/path/to/data/ の myregion は、Athena を実行するリージョン識別子 (例: s3://athena-examples-us-west-1/path/to/data/) に置き換えます。

10

Page 20: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドステップ 3: データのクエリ

4. [Run Query] を選択します。

テーブル cloudfront_logs が作成され、mydatabase データベースの [Tables (テーブル)] のリストの下に表示されます。

ステップ 3: データのクエリAmazon S3 のデータに基づいて Athena で cloudfront_logs テーブルを作成したら、このテーブルに対して SQL クエリを実行して、Athena で結果を確認できます。Athena で SQL を使用する方法については、「Amazon Athena の SQL リファレンス (p. 402)」を参照してください。

クエリを実行するには

1. 新しいクエリタブを開き、クエリペインに次の SQL ステートメントを入力します。

SELECT os, COUNT(*) countFROM cloudfront_logsWHERE date BETWEEN date '2014-07-05' AND date '2014-08-05'GROUP BY os;

2. [Run Query] を選択します。

結果は次のように表示されます。

11

Page 21: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドステップ 3: データのクエリ

3. [Results (結果)] ペインのダウンロードアイコンを選択すると、クエリの結果を .csv ファイルに保存できます。

4. [History (履歴)] タブを選択して、以前のクエリを表示します。

12

Page 22: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドステップ 3: データのクエリ

5. [Download results (結果のダウンロード)] を選択して、前のクエリの結果をダウンロードします。クエリ履歴は 45 日間保持されます。

詳細については、クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111) を参照してください。

13

Page 23: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド他のデータソースへの接続

他のデータソースへの接続このチュートリアルでは、CSV 形式の Amazon S3 データソースを使用しました。AWS Glue、ODBC ドライバー、JDBC ドライバー、外部 Hive メタストア、Athena データソースコネクタを使用して、Athenaをさまざまなデータソースに接続できます。詳細については、データソースへの接続 (p. 17) を参照してください。

14

Page 24: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドコンソールを使用する

Amazon Athena へのアクセスAmazon Athena は、AWS マネジメントコンソール、Amazon Athena API、AWS CLI を使用してアクセスできます。

コンソールを使用するAmazon Athena で次のことを行うには、AWS マネジメントコンソール を使用します。

• データベースを作成または選択する。• テーブルを作成、表示、および削除する。• テーブルをフィルタリングするために名前を入力する。• テーブルをプレビューし、CREATE TABLE DDL を生成する。• テーブルのプロパティを表示する。• テーブルでのクエリの実行、クエリの保存およびフォーマット、クエリ履歴の表示。• クエリエディタの各クエリタブを使用して、最大 10 個のクエリを作成する。新しいタブを開くには、

プラス記号をクリックします。• クエリ結果を表示、保存、エクスポートする。• AWS Glue データカタログにアクセスする。• 設定の表示および変更 (例: クエリの結果の場所の表示)、自動入力の設定、クエリの結果の暗号化。

右側ペインのクエリエディタには、最初のテーブルの作成を求める初期画面が表示されます。左ペインの[テーブル] にテーブルが表示されます。

テーブルごとに使用可能なアクションの概要は次のとおりです。

• テーブルのプレビュー – 右側のクエリエディタにクエリ構文が表示されます。• プロパティの表示 – テーブルの名前と、Amazon S3 の場所、入力形式および出力形式、使用しているシ

リアライゼーション (SerDe) ライブラリ、テーブルに暗号化データが含まれているかどうかが表示されます。

• テーブルの削除 – テーブルを削除します。• CREATE TABLE DDL の生成 – テーブルのバックグラウンドでクエリを生成し、クエリエディタで表示

します。

API の使用Amazon Athena では、Athena のアプリケーションプログラミングを行うことができます。詳細については、Amazon Athena API リファレンス を参照してください。最新の AWS SDK には、Athena API のサポートが含まれています。

Athena で AWS SDK for Java を使用する例については、「コードサンプル (p. 438)」を参照してください。

AWS SDK for Java ドキュメントとダウンロードの詳細については、アマゾン ウェブ サービスのツールの「SDK」セクションを参照してください。

15

Page 25: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCLI の使用

CLI の使用Amazon Athena は、AWS CLI を使用してアクセスできます。詳細については、Athena の AWS CLI リファレンスを参照してください。

16

Page 26: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue との統合

データソースへの接続Amazon Athena を使用して、データセット内のさまざまな場所にさまざまな形式で保存されているデータをクエリできます。このデータセットは、CSV、JSON、Avro、Parquet、またはその他の形式である可能性があります。

Athena でクエリを実行するために操作するテーブルとデータベースは、メタデータに基づいています。メタデータは、データセット内の基になるデータに関するデータです。このメタデータがデータセットを記述する方法をスキーマと呼びます。たとえば、テーブル名、テーブル内の列名、各列のデータ型はメタデータとして保存され、基になるデータセットを記述するスキーマです。Athena では、メタデータを整理するためのシステムを、データカタログまたはメタストアと呼びます。データセットとそれを記述するデータカタログの組み合わせをデータソースと呼びます。

メタデータと基になるデータセットとの関係は、使用するデータソースの種類によって異なります。MySQL、PostgreSQL、SQL Server などのリレーショナルデータソースは、メタデータをデータセットと緊密に統合します。多くの場合これらのシステムでは、データが書き込まれるときにメタデータが書き込まれます。Hive を使用して構築されたものなど、他のデータソースでは、データセットを読み取るときにその場でメタデータを定義できます。データセットは、CSV、JSON、Parquet、Avro などのさまざまな形式である可能性があります。

Athena は AWS Glue データカタログ をネイティブにサポートします。AWS Glue データカタログは、Amazon S3、Amazon Redshift、Amazon DynamoDB など、ほかのデータセットとデータソースの上に構築されたデータカタログです。さまざまなコネクタを使用して Athena をほかのデータソースに接続することもできます。

トピック• AWS Glue との統合 (p. 17)• Athena Data Connector for External Hive Metastore (Preview) を使用する (p. 34)• Amazon Athena Federated Query (Preview) を使用する (p. 55)• データカタログにアクセスするための IAM ポリシー (p. 65)• データソースの管理 (p. 69)• ODBC および JDBC ドライバーを使用した Amazon Athena への接続 (p. 71)

AWS Glue との統合AWS Glue は、データの分類、消去、強化、およびさまざまなデータストア間での移動を確実にできる、フルマネージド型 ETL(抽出、変換、ロード)サービスです。AWS Glue クローラは、データセットからデータベースとテーブルスキーマを自動的に推論し、関連するメタデータを AWS Glue データカタログ に格納します。

Athena は、AWS Glue データカタログ に登録されたデータセットおよびデータソースのクエリをネイティブにサポートします。Data Catalog をソースとして Athena でデータ操作言語 (DML) を実行する際、Data Catalog スキーマを使用して基になるデータセットからインサイトを取得します。データ定義言語 (DDL) クエリを実行すると、定義するスキーマが AWS Glue データカタログ で定義されます。Athena内から、データソースで AWS Glue クローラを実行して AWS Glue データカタログ でスキーマを作成することもできます。

17

Page 27: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue を使用して AmazonS3 でデータソースに接続する

AWS Glue がサポートされるリージョンの場合、Athena は AWS アカウント全体のテーブルメタデータの一元的な保存および取得の場所として AWS Glue データカタログを使用します。は、 Athena クエリエンジンには、データの読み場所、読み方、およびデータの処理に必要なその他の情報を指示するテーブル メタデータが必要です。AWS Glue データカタログは、さまざまなデータソースおよびデータ形式にわたって一本化されたメタデータリポジトリを提供します。そのために、Athena だけでなく AmazonS3、Amazon RDS、Amazon Redshift、Amazon Redshift Spectrum、Amazon EMR、その他 Apache Hiveメタストアと互換性のあるすべてのアプリケーションと連携します。

AWS Glueデータカタログの詳細については、以下を参照してください。 AWS Glueデータカタログの入力の AWS Glue開発者ガイド. AWS Glue が利用可能なリージョンのリストについては、AWS 全般リファレンスの「リージョンとエンドポイント」を参照してください。

AWS Glue には別料金が適用されます。詳細については、「AWS Glue の料金」と「AWS Glue には別料金が適用されますか? (p. 33)」を参照してください。Athena で AWS Glue を使用する利点については、「AWS Glue データカタログにアップグレードする理由は? (p. 32)」を参照してください。

トピック• AWS Glue を使用して Amazon S3 でデータソースに接続する (p. 18)• Athena と AWS Glue を併用する際のベストプラクティス (p. 21)• AWS Glue データカタログへのステップバイステップのアップグレード (p. 30)• よくある質問: AWS Glue データカタログ へのアップグレード (p. 32)

AWS Glue を使用して Amazon S3 でデータソースに接続するAthena は AWS Glue データカタログ を使用して Amazon S3 に格納されたデータに接続し、テーブルや列名などのメタデータを格納できます。接続が確立されると、データベース、テーブル、ビューが Athenaのクエリエディタに表示されます。

AWS Glue が使用するスキーマ情報を定義するには、AWS Glue クローラをセットアップして情報を自動的に取得するか、手動でテーブルを追加してスキーマ情報を入力します。

18

Page 28: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue を使用して AmazonS3 でデータソースに接続する

クローラのセットアップAthena コンソールを起動し、その後 AWS Glue コンソールを統合的に使用してクローラをセットアップできます。クローラを作成するときに、クロールするデータストアを選択したり、クローラを既存のカタログテーブルを参照したりできます。

Note

クローラを設定するステップは、Athena コンソールで使用可能なオプションによって異なります。オプション A の [Connect data source (データソースの接続)] リンクが使用できない場合は、オプション B の手順を使用します。

オプション A

オプション A: [Connect data source (データソースの接続)] リンクを使用して AWS Glue でクローラを設定するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [Connect data source (データソースの接続)] を選択します。[Connect data source (データソースの接

続)] リンクがない場合、オプション B を使用します。

3. [Connect data source (データソースの接続)] ページで、[AWS Glue Data Catalog] を選択します。4. [次へ] をクリックします。5. [Connection details (コレクションの詳細)] ページで、[Set up crawler in AWS Glue to retrieve schema

information automatically (クローラをセットアップして自動でスキーマ情報を取得)] を選択します。6. [Connect to AWS AWS Glue (接続)] をクリックします。7. AWS Glue コンソールの [Add crawler (クローラの追加)] ページで、次の手順に従いクローラを作成し

ます。

詳細については、「AWS Glue データカタログ の作成」を参照してください。

19

Page 29: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue を使用して AmazonS3 でデータソースに接続する

オプション B

Athena コンソールでオプション A の [Connect data source (データソースの接続)] リンクが使用できない場合に、AWS Glue クローラを設定するには、次の手順に従います。

オプション B: AWS Glue データカタログリンクから AWS Glue でクローラーを設定するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [AWS Glue Data Catalog] を選択します。

3. AWS Glue コンソールの [Table (テーブル)] ページで、[Add tables using a crawler (クローラを使用してテーブルを追加)] を選択します。

4. AWS Glue コンソールの [Add crawler (クローラの追加)] ページで、次の手順に従いクローラを作成します。

詳細については、「AWS Glue データカタログ の作成」を参照してください。

スキーマテーブルを手動で追加する次の手順は、Athena コンソールを使用してテーブルを自動で追加する方法を示しています。

テーブルを追加してスキーマ情報を手動で入力するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [Connect data source (データソースの接続)] を選択します。3. [Connect data source (データソースの接続)] ページで、[AWS Glue Data Catalog] を選択します。4. [次へ] をクリックします。5. [Connection details (コレクションの詳細)] ページで、[Add a table and enter schema information

manually (テーブルを追加して手動でスキーマ情報を入力)] を選択します。6. [Continue to add table (続行してテーブルを追加)] をクリックします。

20

Page 30: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

7. Athena コンソールの [Add table (テーブルの追加)] ページで、[データベース] で既存のデータベースを選択するか、新しいデータベースを作成します。

8. テーブル名を入力または選択します。9. [Location of Input Data Set (入力データセットの場所)] で、処理するデータセットを含むフォルダへの

Amazon S3 でのパスを指定します。10. [次へ] をクリックします。11. [Data Format (データ形式)] で、データ形式(Apache Web Logs、CSV、TSV、Text File with Custom

Delimiters、JSON、Parquet、または ORC)を選択します。

• [Apache Web Logs] オプションでは、[Regex (正規表現)] ボックスに正規表現を入力する必要もあります。

• [Text File with Custom Delimiters (カスタム区切り記号のあるテキストファイル)] オプションでは、[Field terminator (フィールドターミネータ)](列区切り記号)を指定します。オプションで、配列型の [Collection terminator (コレクションターミネータ)] または [Map key terminator (Map キーターミネータ)] を指定できます。

12. [列] で、列名と列のデータ型を指定します。

• 列を 1 つずつ追加するには、[Add a column (列の追加)] を選択します。• すばやく列を追加するには、[Bulk add columns (列を一括追加)] を選択します。テキストボックス

に、列のカンマ区切りのリストを column_name data_type, column_name data_type[, …], の形式で入力し、[追加] を選択します。

13. [Next] を選択します。14. (オプション)[Partitions (パーティション)] で、[Add a partition (パーティションの追加)] をクリック

して列名とデータ型を追加します。15. [Create table] を選択します。指定したテーブルの DDL が [Query Editor (クエリエディタ)] に表示され

ます。以下の例は CSV 形式の 2 カラムのテーブルに対して生成された DDL を示しています。

CREATE EXTERNAL TABLE IF NOT EXISTS MyManualDB.MyManualTable ( `cola` string, `colb` string )ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'WITH SERDEPROPERTIES ( 'serialization.format' = ',', 'field.delim' = ',') LOCATION 's3://bucket_name/'TBLPROPERTIES ('has_encrypted_data'='false');

16. [Run query (クエリを実行)] を選択してテーブルを作成します。

Athena と AWS Glue を併用する際のベストプラクティスAthena と AWS Glue データカタログを併用すると、AWS Glue で作成したデータベースとテーブル (スキーマ) を Athena でクエリしたり、Athena で作成したスキーマを AWS Glue や関連サービスで使用したりできます。このトピックでは、各方法を使用する際の考慮事項とベストプラクティスを示します。

フードの下は Athena は、スキーマを作成および変更する DDL ステートメントを処理するために Prestoと Hive を使用します。これらのテクノロジーを使用する場合、いくつかの規則に従うと、Athena と AWSGlue を効率よく連携できます。

このトピックの内容

• データベース、テーブル、および列の名前 (p. 22)

21

Page 31: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

• AWS Glue クローラの使用 (p. 22)• AWS Glue データカタログと Amazon S3 を同期させるためのクローラのスケジュール設

定 (p. 22)• クローラでの複数のデータソースの使用 (p. 23)• "HIVE_PARTITION_SCHEMA_MISMATCH" を避けるためのパーティションスキーマの同

期 (p. 25)• テーブルメタデータの更新 (p. 25)

• CSV ファイルの使用 (p. 26)• 引用符で囲まれた CSV データ (p. 26)• ヘッダー付きの CSV ファイル (p. 28)

• 地理空間データの使用 (p. 28)• Athena における ETL 用の AWS Glue ジョブの使用 (p. 28)

• Athena を使用した AWS Glue ETL ジョブ用のテーブルの作成 (p. 28)• ETL ジョブを使用したクエリパフォーマンスの最適化 (p. 30)• ORC への変換に伴う SMALLINT データ型と TINYINT データ型の INT への変換 (p. 30)• ETL 用の AWS Glue ジョブの自動化 (p. 30)

データベース、テーブル、および列の名前AWS Glue で作成したスキーマを Athena でクエリする場合は、以下の点を考慮します。

• データベース名は 252 文字以内とします。• テーブル名は 255 文字以内とします。• 列名は 128 文字以内とします。• データベース、テーブル、および列の名前には、小文字、数字、アンダースコア文字のみを使用できま

す。

列名は AWS Glue カタログマネージャーで変更できますが、テーブル名とデータベース名は AWS Glue コンソールではまだ変更できません。データベース名を修正するには、新しいデータベースを作成して、そこにテーブルをコピーする必要があります (つまり、メタデータを新しいエンティティにコピーします)。テーブルも同様に処理できます。これには、AWS Glue SDK または AWS CLI を使用できます。

AWS Glue クローラの使用AWS Glue クローラを使用すると、データセットのスキーマを検出して AWS Glue データカタログに登録できます。クローラは、データを参照して一部を検査することでスキーマを判定します。さらに、パーティションを検出して登録することもできます。詳細については、以下を参照してください。 クローラーを使用したデータのカタログ作成 の AWS Glue 開発者ガイド.

AWS Glue データカタログと Amazon S3 を同期させるためのクローラのスケジュール設定

AWS Glue クローラは、スケジュールに従って実行するか、オンデマンドで実行するように設定できます。詳細については、以下を参照してください。 ジョブとクローラーの時間ベースのスケジュール のAWS Glue 開発者ガイド.

固定時間にパーティション化されたテーブルに到着するデータがある場合、 AWS Glue クローラーがスケジュールに従って実行され、テーブル パーティションを検出および更新します。これにより、コストのかかる長期の稼働が不要になります。 MSCK REPAIR コマンドを実行するか、手動で ALTER TABLE ADDPARTITION コマンド。詳細については、以下を参照してください。 テーブル パーティション の AWSGlue 開発者ガイド.

22

Page 32: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

クローラでの複数のデータソースの使用

が AWS Glue クローラー・スキャン Amazon S3 複数のディレクトリを検出し、ヒューリスティックを使用して、テーブルのルートがディレクトリ構造のどこにあり、どのディレクトリがテーブルのパーティションであるかを判断します。複数のディレクトリで同様のスキーマが検出されると、クローラは、これらを個別のテーブルではなくパーティションとみなす場合があります。クローラで個別のテーブルを検出しやすくするには、1 つの方法として各テーブルのルートディレクトリをクローラのデータストアとして追加します。

以下の Amazon S3 のパーティションが一例です。

s3://bucket01/folder1/table1/partition1/file.txts3://bucket01/folder1/table1/partition2/file.txts3://bucket01/folder1/table1/partition3/file.txts3://bucket01/folder1/table2/partition4/file.txts3://bucket01/folder1/table2/partition5/file.txt

table1 と table2 のスキーマが類似し、AWS Glue のデータソースが s3://bucket01/folder1/に対して 1 つのみ設定されている場合、クローラは 1 つのテーブルを 2 つのパーティション列で作成することがあります。1 つのパーティション列に table1 と table2 を入れ、別のパーティション列にpartition1〜partition5 を入れます。

AWS Glue クローラで 2 つのテーブルを別個に作成するには、クローラに 2 つのデータソース (s3://bucket01/folder1/table1/ と s3://bucket01/folder1/table2) を設定します。以下に手順を示します。

AWS Glue で既存のクローラに別のデータストアを追加するには

1. AWS マネジメントコンソール にサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/) を開きます。

2. [Crawlers] を選択し、使用するクローラを選択します。次に、[Action]、[Edit crawler] の順に選択します。

23

Page 33: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

3. [Add information about your crawler] で必要に応じて追加の設定を選択し、[Next] を選択します。4. [Add a data store] で、[Include path] をテーブルレベルのディレクトリに変更します。たとえば、上の

例の場合、 s3://bucket01/folder1 to s3://bucket01/folder1/table1/。 選択 次へ.

5. [Add another data store] で [Yes] を選択し、[Next] を選択します。6. [Include path] に、他のテーブルレベルのディレクトリ (s3://bucket01/folder1/table2/ など) を

入力して、[Next] を選択します。

24

Page 34: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

a. さらにテーブルレベルディレクトリを追加する場合は、ステップ 3〜5 を繰り返し、クローラの設定を終了します。

[Include locations] の新しい値が次のようにデータストアの下に表示されます。

"HIVE_PARTITION_SCHEMA_MISMATCH" を避けるためのパーティションスキーマの同期

AWS Glue データカタログでは、パーティション列があるテーブルごとにテーブルレベルでスキーマが保存され、さらにテーブル内のパーティション別にスキーマが保存されます。パーティションのスキーマは、AWS Glue クローラがパーティション内で読み取ったデータのサンプルに基づいて作成されます。詳細については、「クローラでの複数のデータソースの使用 (p. 23)」を参照してください。

Athena は、クエリを実行するときに、クエリに必要なテーブルのスキーマとパーティションのスキーマを検証します。この検証では、列のデータ型を順に比較し、重複する列のデータ型が一致することを確認します。これにより、テーブルの中間で列が追加/削除されるなどの予期しないオペレーションが防止されます。Athena は、パーティションとテーブルのスキーマ間に差異を検出すると、HIVE_PARTITION_SCHEMA_MISMATCH が原因で Athena がクエリを処理できず、失敗する場合があります。

この問題を解決するいくつかの方法があります。まず、データを誤って追加した場合は、スキーマの差異を生じたデータファイルを削除し、パーティションを削除して、データを最クロールできます。2 番目として、該当するパーティションを削除して Athena 内で MSCK REPAIR を実行し、テーブルのスキーマを使用してパーティションを再作成できます。この 2 番目のオプションは、適用するスキーマで引き続きデータを正しく読み取れることが確かな場合にのみ使用します。

テーブルメタデータの更新

AWS Glue クローラは、クロール後に、Apache Hive、Presto、Spark などの他の外部テクノロジーに準拠するために特定のテーブルメタデータを自動的に割り当てます。このクローラが割り当てるメタデータプロパティが正しくない場合があります。正しくないプロパティは、Athena でテーブルをクエリする前に、AWS Glue で手動で修正してください。詳細については、以下を参照してください。 テーブルの詳細の表示と編集 の AWS Glue 開発者ガイド.

CSV ファイルの各データフィールドが引用符で囲まれている場合、AWS Glue は serializationLib プロパティを誤解してメタデータの割り当てを間違える場合があります。詳細については、「引用符で囲まれた CSV データ (p. 26)」を参照してください。

25

Page 35: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

CSV ファイルの使用CSV ファイルで各列向けのデータ値が引用符で囲まれていたり、CSV ファイルに分析対象のデータではないヘッダー値が含まれていたりする場合があります。AWS Glue でこれらのファイルからスキーマを作成する場合は、このセクションのガイダンスに従ってください。

引用符で囲まれた CSV データ

次の例のように、データ フィールドが二重引用符で囲まれた CSV ファイルがある場合があります。

"John","Doe","123-555-1231","John said \"hello\"""Jane","Doe","123-555-9876","Jane said \"hello\""

クエリを実行するには Athena 引用値を含むCSVファイルから作成されたテーブル上では、 AWSGlue OpenCSVSerDe を使用します。OpenCSV SerDe の詳細については、「CSV を処理するためのOpenCSVSerDe (p. 381)」を参照してください。

テーブルのプロパティを AWS Glue コンソール

1. の AWS Glue コンソールナビゲーションペイン、選択 テーブル.2. 編集するテーブルを選択し、 テーブルを編集.3. の テーブルの詳細を編集 ダイアログボックスで、次の変更を行います。

• 対象: セルデシリアライゼーションライブラリ、入力org.apache.hadoop.hive.serde2.OpenCSVSerde.

• 対象: Serdeパラメータ、キーに次の値を入力します。 escapeChar、 quoteChar、およびseparatorChar:• 対象: escapeChar、バックスラッシュ(\)。• 対象: quoteChar、二重引用符(")。• 対象: separatorChar、コンマ(,)。

26

Page 36: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

詳細については、以下を参照してください。 テーブルの詳細の表示と編集 の AWS Glue 開発者ガイド.

27

Page 37: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

更新中 AWS Glue 表のプロパティをプログラム的に

_を使用できます。 AWS Glue テーブルの更新 API操作または 更新-表 CLI コマンドで、 SerDeInfo ブロックをテーブル定義に表示します。

"SerDeInfo": { "name": "", "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "parameters": { "separatorChar": "," "quoteChar": "\"" "escapeChar": "\\" }},

ヘッダー付きの CSV ファイルテーブルを Athena と CREATE TABLE ステートメントは、 skip.header.line.count 次の例のように、テーブル プロパティを使用して、CSV データのヘッダーを無視します。

...STORED AS TEXTFILELOCATION 's3://my_bucket/csvdata_folder/';TBLPROPERTIES ("skip.header.line.count"="1")

または、ヘッダー情報が Athena クエリーの結果。そのためには、1 つの方法として AWS Glue ジョブを使用して ETL (抽出、変換、ロード) スクリプトを実行します。必要なスクリプトは、AWS Glue でPySpark Python ダイアレクトの拡張言語を使用して作成できます。詳細については、以下を参照してください。 接着剤のジョブのオーサリング の AWS Glue 開発者ガイド.

次の例に示す AWS Glue スクリプトの関数では、from_options を使用して動的フレームを作成し、writeHeader フォーマットオプションを false に設定することで、ヘッダー情報を削除しています。

glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://MYBUCKET/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")

地理空間データの使用AWS Glue は、Well-known Text (WKT)、Well-Known Binary (WKB)、またはその他の PostGIS データ型をネイティブにサポートしていません。AWS Glue 分類子は地理空間データを解析し、CSV 用の varcharなど、形式でサポートされているデータ型を使用して分類します。他の AWS Glue テーブルと同様に、Athena がこれらのデータ型をそのまま解析できるよう、地理空間データから作成されたテーブルのプロパティ更新が必要になる場合があります。詳細については、「AWS Glue クローラの使用 (p. 22)」および「CSV ファイルの使用 (p. 26)」を参照してください。Athena は、AWS Glue テーブルの一部の地理空間データ型をそのまま解析できない場合があります。Athena での地理空間データの操作の詳細については、「地理空間データのクエリ (p. 170)」を参照してください。

Athena における ETL 用の AWS Glue ジョブの使用AWS Glue ジョブは ETL オペレーションを実行します。AWS Glue ジョブは、ソースからデータを抽出し、そのデータを変換してターゲット内にロードするためのスクリプトを実行します。詳細については、以下を参照してください。 接着剤のジョブのオーサリング の AWS Glue 開発者ガイド.

Athena を使用した AWS Glue ETL ジョブ用のテーブルの作成Athena 内で作成するテーブルには、データの形式を識別するために classification というテーブルプロパティを追加する必要があります。これにより、AWS Glue はテーブルを ETL ジョブに使用できます。

28

Page 38: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena と AWS Glue を併用する際のベストプラクティス

分類値は csv、 parquet、 orc、 avro、または json。 例 CREATE TABLE ステートメント Athena 次のようになります。

CREATE EXTERNAL TABLE sampleTable ( column1 INT, column2 INT ) STORED AS PARQUET TBLPROPERTIES ( 'classification'='parquet')

このテーブルプロパティは、テーブルの作成時に追加しなかった場合、AWS Glue コンソールを使用して追加できます。

コンソールを使用して分類プロパティを変更するには

1. [Edit Table] を選択します。

2. [Classification] で、ファイルタイプを選択して [Apply] を選択します。

詳細については、以下を参照してください。 テーブルでの作業 の AWS Glue 開発者ガイド.

29

Page 39: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue データカタログへのス

テップバイステップのアップグレード

ETL ジョブを使用したクエリパフォーマンスの最適化

AWS Glue ジョブでは、Athena でのクエリパフォーマンスが最適化するような形式にデータを変換できます。Athena でのクエリパフォーマンスとクエリコストは、データ形式に大きく左右されます。

Parquet 形式と ORC データ形式を使用することをお勧めします。AWS Glue は、両方のデータ形式に対応しており、Athena の最適な形式にデータを簡単かつ高速に変換できます。これらの形式およびその他のパフォーマンス改善策の詳細については、「Amazon Athena のパフォーマンスチューニング Tips トップ10」を参照してください。

ORC への変換に伴う SMALLINT データ型と TINYINT データ型の INT への変換

AWS Glue ETL ジョブで生成される SMALLINT データ型と TINYINT データ型を Athena で読み取れない問題をなくすために、ウィザードの使用時または ETL ジョブ用のスクリプトの作成時に SMALLINT とTINYINT を INT に変換します。

ETL 用の AWS Glue ジョブの自動化

AWS Glue ETL ジョブは、トリガーに基づいて自動的に実行するように設定できます。この機能は、AWS外からのデータを Amazon S3 バケットにプッシュして、十分最適化されていない形式で Athena でクエリを実行する場合に適しています。詳細については、以下を参照してください。 AWS Glueジョブのトリガー の AWS Glue 開発者ガイド.

AWS Glue データカタログへのステップバイステップのアップグレード現在、Athena をサポートするすべてのリージョンは、AWS Glue データカタログ もサポートしています。データベースやテーブルは AWS Glue データカタログを使用して Athena で利用できます。その逆も同様です。

AWS Glue がリージョンでサポートされる前に、Athena または Amazon Redshift Spectrum を使用してデータベースやテーブルを作成した場合は、Athena をアップグレードして AWS Glue データカタログを使用できます。

古い Athena 管理のデータカタログを使用している場合は、コンソールの上部にアップグレードオプションが表示されます。Athena が管理するカタログのメタデータは、AWS Glue データカタログで使用できません。その逆も同様です。カタログがサイドバイサイドで存在する場合、同じ名前のテーブルまたはデータベースを作成すると、AWS Glue または Athena で失敗します。これにより、アップグレード時の名前の競合が防止されます。AWS Glue データカタログを使用する利点については、「よくある質問: AWSGlue データカタログへのアップグレード (p. 32)」を参照してください。

Athena コンソールのウィザードに従って、AWS Glue コンソールへのアップグレードを実行できます。アップグレードの所要時間は数分であり、中断した個所から再開できます。アップグレードの各ステップの詳細については、このセクションの各トピックを参照してください。

AWS Glue データカタログのデータやテーブルを使用する詳しい方法については、「AWS Glue で Athenaを使用する場合のベストプラクティス (p. 21)」のガイドラインを参照してください。

ステップ 1 - アップグレードの実行をユーザーに許可するデフォルトでは、アップグレードの実行をユーザーに許可するアクションは、管理ポリシーを含むすべてのポリシーで無効になっています。AWS Glue データカタログは AWS アカウント全体で共有されるため、誰かが誤ってカタログを移行するのを防ぐためのフェイルセーフ処置です。

アップグレードを実行する前に、カスタマー管理 IAM ポリシーをアタッチし、ポリシーステートメントで、移行を実行するユーザーにアップグレードアクションを許可する必要があります。

30

Page 40: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue データカタログへのス

テップバイステップのアップグレード

ポリシーステートメントの例を以下に示します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:ImportCatalogToGlue" ], "Resource": [ "*" ] } ] }

ステップ 2 - Athena ユーザーに関連付けられたカスタマー管理/インラインポリシーを更新するAthena ユーザーに関連付けられたカスタマー管理/インライン IAM ポリシーがある場合は、ポリシーを更新して AWS Glue が必要とするアクションを許可する必要があります。Athena 管理ポリシーを使用する場合、アクションは必要ありません。許可する AWS Glue ポリシーのアクションを以下のポリシー例に示します。完全なポリシーステートメントについては、「ユーザーアクセス用の IAM ポリシー (p. 245)」を参照してください。

{ "Effect":"Allow", "Action":[ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource":[ "*" ]}

ステップ 3 - Athena コンソールでアップグレードを選択する必要な IAM ポリシーを更新したら、Athena コンソールで [Upgrade] を選択します。Athena は、メタデータを AWS Glue データカタログに移行します。アップグレードの所要時間は数分です。アップグレードが完了すると、Athena コンソールに表示されるリンクを通じて、Athena 内から AWS Glue データカタログを開くことができます。

31

Page 41: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドよくある質問: AWS Glue データカタログ へのアップグレード

コンソールを使用してテーブルを作成する場合、AWS Glue クローラを使用してテーブルを作成できます。詳細については、「AWS Glue クローラの使用 (p. 22)」を参照してください。

よくある質問: AWS Glue データカタログ へのアップグレードAWS Glue がまだ提供されていないリージョンで Athena を使用してデータベースやテーブルを作成した場合、メタデータは Athena で管理するデータカタログに保存されるため、Athena と Amazon RedshiftSpectrum のみがアクセスできます。Athena および Redshift Spectrum で AWS Glue を使用するには、AWS Glue データカタログ にアップグレードする必要があります。

AWS Glue データカタログ にアップグレードする理由AWS Glue は、完全マネージド型の ETL (抽出、変換、ロード) サービスです。以下の 3 つの主要コンポーネントで構成されています。

32

Page 42: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドよくある質問: AWS Glue データカタログ へのアップグレード

• AWS Glue Glue クローラ。自動的にデータソースをスキャンし、データ形式を識別して、スキーマを推論します。

• 完全マネージド型 ETL サービス。データを変換して、さまざまな送信先に移動できます。• AWS Glue データカタログ。データベースやテーブルに関するメタデータ情報を保存し、Amazon S3 の

データストアや JDBC 準拠のデータストアを送信先として指定します。

詳細については、「AWS Glue の概念」を参照してください。

AWS Glue データカタログ にアップグレードすると、次の利点があります。

一元化されたメタデータリポジトリAWS Glue データカタログは、さまざまなデータソースやデータ形式にわたって一元化されたメタデータリポジトリを提供します。Amazon Simple Storage Service (Amazon S3)、Amazon Relational DatabaseService (Amazon RDS)、Amazon Redshift、Amazon Redshift Spectrum、Athena、Amazon EMR、その他Apache Hive メタストアと互換性があるアプリケーションとすぐに統合できます。テーブル定義を 1 回作成するだけで、さまざまなエンジンにわたってクエリを実行できます。

詳細については、「AWS Glue データカタログ の作成」を参照してください。

スキーマとパーティションの自動認識AWS Glue クローラは、自動的にデータソースをクロールし、データ形式を識別して、スキーマと変換を提案します。クローラは、テーブルの作成とパーティションのロードを自動化し、Athena、AmazonEMR、および Redshift Spectrum を使用してクエリを実行できるようにします。AWS Glue API、SDK、および AWS CLI を使用してテーブルとパーティションを直接作成することもできます。

詳細については、「クローラを使用したテーブルのカタログ化」を参照してください。

ビルドしやすいパイプラインAWS Glue ETL エンジンは、完全なカスタマイズ、再利用、移植が可能な Python コードを生成します。お気に入りの IDE やノートブックを使用してコードを編集し、GitHub を使用して他のユーザーと共有できます。準備が整った ETL ジョブは、AWS Glue の完全マネージド型のスケールアウト Spark インフラストラクチャで実行するようスケジュールできます。AWS Glue は、ETL ジョブの実行に必要なリソースのプロビジョニング、設定、およびスケーリングを行い、ETL とワークフローを緊密に統合できます。

詳細については、AWS Glue 開発者ガイドの「AWS Glue でのジョブの作成」を参照してください。

AWS Glue には別料金が適用されますか?はい。AWS Glue を使用する場合、AWS Glue データカタログにメタデータを保存し、保存済みメタデータにアクセスするための月別レート、AWS Glue ETL ジョブとクローラランタイムに対して秒単位で課金される時間レート、およびプロビジョニング済みの開発エンドポイントごとに秒単位で課金される時間レートが適用されます。AWS Glue データカタログ を使用すると、最大 100 万個のオブジェクトを無料で保存できます。100 万を超えるオブジェクトを保存した場合は、100,000 オブジェクトごとに 1 USD が課金されます。AWS Glue データカタログ 内のオブジェクトは、テーブル、パーティション、またはデータベースです。詳細については、「AWS Glue 料金表」を参照してください。

アップグレードプロセスに関するよくある質問• アップグレードを実行できるのは誰ですか? (p. 34)• ユーザーは Athena と Redshift Spectrum の管理ポリシーを使用しています。アップグレードするには、

どのような手順が必要ですか? (p. 34)• アップグレードしないと、どうなりますか? (p. 34)• Athena ユーザーに AWS Glue ポリシーを追加する理由 (p. 34)• Athena ユーザーに AWS Glue ポリシーを許可しないと、どうなりますか? (p. 34)

33

Page 43: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHive メタストアの使用

• アップグレード中にデータが失われる危険性はありますか? (p. 34)• このアップグレードに伴ってデータも移動されるのですか? (p. 34)

アップグレードを実行できるのは誰ですか?カスタマー管理 IAM ポリシーをアタッチし、ポリシーステートメントにより、移行を実行するユーザーにアップグレードアクションを許可する必要があります。この追加処置により、誰かが誤ってアカウント全体のカタログを移行するのを防止できます。詳細については、「ステップ 1 - アップグレードの実行をユーザーに許可する (p. 30)」を参照してください。

ユーザーは Athena と Redshift Spectrum の管理ポリシーを使用しています。アップグレードするには、どのような手順が必要ですか?Athena 管理ポリシーは、AWS Glue へのアクセスを Athena ユーザーに許可する新しいポリシーアクションを反映するように自動的に更新されます。ただし、依然として、アップグレードを実行するユーザーに対してアップグレードアクションを明示的に許可する必要があります。誤ったアップグレードを防ぐために、管理ポリシーではアップグレードアクションを自動的には許可しません。

アップグレードしないと、どうなりますか?アップグレードしないと、AWS Glue で作成したデータベースやテーブルで Athena の機能を使用できません。その逆も同様です。これらのサービスは別個に使用できます。別個に使用する場合、Athena とAWS Glue の両方のデータカタログで作成するデータベースまたはテーブルに同じ名前を使用することはできません。これにより、アップグレード時の名前の競合が防止されます。

Athena ユーザーに AWS Glue ポリシーを追加する理由アップグレードする前に、Athena はデータカタログを管理し、クエリを実行する Athena アクションをユーザーに許可する必要があります。AWS Glue データカタログ にアップグレードした後、ユーザーにAWS Glue アクションを許可する必要があります。Athena の管理ポリシーを使用する場合は、一切のアクションが不要です。この管理ポリシーは、必要な AWS Glue アクションを許可するように更新済みです。

Athena ユーザーに AWS Glue ポリシーを許可しないと、どうなりますか?AWS Glue データカタログ にアップグレードして、ユーザーのカスタマー管理/インライン IAM ポリシーを更新しないと、ユーザーは AWS Glue でのアクションの実行を許可されないため、Athena クエリは失敗します。許可する特定のアクションについては、「ステップ 2 - Athena ユーザーに関連付けられたカスタマー管理/インラインポリシーを更新する (p. 31)」を参照してください。

アップグレード中にデータが失われる危険性はありますか?いいえ。

このアップグレードに伴ってデータも移動されるのですか?いいえ。移行はメタデータにのみ影響します。

Athena Data Connector for External Hive Metastore(Preview) を使用する

外部 Hive メタストアの Amazon Athena データコネクタを使用して、Apache Hive メタストアを使用するAmazon S3 内のデータセットをクエリできます。AWS Glue データカタログ へのメタデータの移行は不要です。Athena マネジメントコンソールで、プライベート VPC の Hive メタストアと通信する Lambda関数を設定して、それをメタストアに接続します。Lambda から Hive メタストアへの接続は、プライ

34

Page 44: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド機能の概要

ベート Amazon VPC チャンネルによって保護され、パブリックインターネットを使用しません。独自のLambda 関数コードを指定することも、外部 Hive メタストア用の Athena データコネクタのデフォルト実装を使用することもできます。

トピック• 機能の概要 (p. 35)• Workflow (p. 36)• 考慮事項と制約事項 (p. 36)• Apache Hive メタストアへの Athena の接続 (p. 37)• AWS Serverless Application Repository を使用した Hive データソースコネクタのデプロイ (p. 43)• 外部 Hive メタストアクエリでデフォルトカタログを使用する (p. 44)• Hive メタストアでの AWS CLI を使用する (p. 48)• リファレンス実装 (p. 54)

機能の概要外部 Hive メタストアの Athena データコネクタを使用すると、次のタスクを実行できます。

• Athena コンソールを使用して、カスタムカタログを登録し、それらを使用してクエリを実行する。• 異なる外部 Hive メタストアの Lambda 関数を定義し、Athena クエリに結合する。• AWS Glue データカタログ と外部 Hive メタストアを同じ Athena クエリで使用する。• クエリ実行コンテキストのカタログを現在のデフォルトカタログとして指定する。これにより、

クエリのデータベース名にカタログ名のプレフィックスを付ける必要がなくなります。構文catalog.database.table を使用する代わりに、database.table を使用できます。

• さまざまなツールを使用して、外部 Hive メタストアを参照するクエリを実行します。Athena コンソール、AWS CLI、AWS SDK、 Athena APIs 、更新された Athena JDBC および ODBC ドライバーを使用できます。更新されたドライバーは、カスタムカタログをサポートしています。

API サポートAthena Data Connector for External Hive Metastore (Preview) では、カタログ登録 API オペレーションとメタデータ API オペレーションがサポートされています。

• カタログ登録 – 外部 Hive メタストアおよび フェデレーティッドデータソース (p. 55)用のカスタムカタログを登録します。

• –メタデータ メタデータはAPIs、 および で登録したカタログのデータベースAWS Glueおよびテーブル情報を提供しますAthena。

• Athena–JAVA SDK クライアント 更新された APIs APIsJava SDK クライアントでのStartQueryExecutionオペレーションで、カタログ登録、メタデータ、およびカタログのサポートを使用します。Athena

リファレンス実装Athena は、外部 Hive メタストアに接続する Lambda 関数のリファレンス実装を提供します。リファレンス実装は、GitHubAthena Hive メタストアのオープンソースプロジェクトとして で提供されています。

リファレンス実装は、AWS Serverless Application Repository (SAR) で次の 2 つの AWS SAM アプリケーションとして利用できます。これらのアプリケーションのいずれかを SAR で使用して、独自の Lambda関数を作成できます。

• AthenaHiveMetastoreFunction – Uber Lambda 関数 .jar ファイル。

35

Page 45: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドWorkflow

• AthenaHiveMetastoreFunctionWithLayer – Lambda レイヤーとシン Lambda 関数 .jar ファイル。

Workflow次の図は、Athena が外部 Hive メタストアとどのように連携するかを示しています。

このワークフローでは、データベースに接続された Hive メタストアが VPC 内にあります。Hive Server2を使用して、Hive CLI を使用して Hive メタストアを管理します。

Athena の外部 Hive メタストアを使用するワークフローには、次のステップが含まれます。

1. Athena を VPC 内の Hive メタストアに接続する Lambda 関数を作成します。2. Hive メタストアの一意のカタログ名をアカウントに登録し、対応する関数名を登録します。3. カタログ名を使用する Athena DML または DDL クエリを実行すると、Athena クエリエンジンが、カタ

ログ名に関連付けられた Lambda 関数名を呼び出します。4. AWS PrivateLink を使用して、この Lambda 関数は VPC 内の外部 Hive メタストアと通信し、メタデー

タリクエストに対する応答を受け取ります。Athena は、デフォルトの AWS Glue データカタログ からメタデータを使用するときと同様に、外部 Hive メタストアのメタデータを使用します 。

考慮事項と制約事項Athena Data Connector for External Hive Metastore (Preview) を使用する場合は、次の点を考慮してください。

• 外部 Hive メタストアに対する DDL サポートは、次のステートメントに制限されています。• DESCRIBE TABLE• SHOW COLUMNS• SHOW TABLES• SHOW SCHEMAS

36

Page 46: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApache Hive メタストアへの Athena の接続

• SHOW CREATE TABLE• SHOW TBLPROPERTIES• SHOW PARTITIONS

• 登録できるカタログの最大数は 1,000 です。• CTAS (p. 126) を使用して、外部 Hive メタストアのクエリから AWS Glue テーブルを作成できます

が、外部 Hive メタストアにテーブルを作成することはできません。• INSERT INTO を使用して、外部 Hive メタストアのクエリから AWS Glue テーブルにデータを挿入でき

ますが、外部 Hive メタストアにデータを挿入することはできません。• Hive ビューは Athena ビューと互換性がないため、サポートされていません。• Hive メタストアの Kerberos 認証はサポートされていません。• 外部 Hive メタストアまたはフェデレーティッドクエリで JDBC ドライバーを使用するに

は (p. 55)、JDBC 接続文字列MetadataRetrievalMethod=ProxyAPIに を含めます。JDBCドライバーの詳細については、「」を参照してくださいJDBC ドライバーを介した Athena の使用 (p. 72)。

Permissions構築済みのデータソースコネクタは、正しく機能するために、次のリソースへのアクセスが必要になる場合があります。使用するコネクタの情報をチェックして、VPC が正しく設定されていることを確認します。Athena でクエリを実行してデータソースコネクタを作成するために必要な IAM アクセス許可については、「Athena Data Connector for External Hive Metastore (Preview) へのアクセスを許可する (p. 260)」および「外部 Hive メタストアへの Lambda 関数アクセスを許可する (p. 262)」を参照してください。

• Amazon S3 –データコネクタは、Amazon S3 のクエリ結果場所に Athena クエリ結果を書き込むだけでなく、Amazon S3 のスピルバケットにも書き込みます。この Amazon S3 場所への接続とアクセス許可が必要です。詳細については、このトピックで後述する「Amazon S3 のスピル場所 (p. 37)」を参照してください。

• Athena – クエリのステータスをチェックし、オーバースキャンを防止するには、アクセスが必要です。• AWS Glue – コネクタが補足メタデータまたはプライマリメタデータに AWS Glue を使用する場合。• AWS Key Management Service• ポリシー – Hive メタストアおよびAthenaクエリフェデレーション。 に加えてポリシーUDFsが必要で

すAmazonAthenaFullAccess 管理ポリシー (p. 245)。詳細については、Athena の Identity and AccessManagement (p. 244) を参照してください。

Amazon S3 のスピル場所Lambda 関数の応答サイズに制限があるため、しきい値より大きい応答は、Lambda 関数の作成時に指定した Amazon S3 場所に流出します。Athena は、これらの応答を Amazon S3 から直接読み取ります。

Note

Athena は Amazon S3 の応答ファイルを削除しません。応答ファイルを自動的に削除するようにアイテム保持ポリシーを設定することが推奨されます。

Apache Hive メタストアへの Athena の接続Athena を Apache Hive メタストアに接続するには、Lambda 関数を作成して設定する必要があります。基本的な実装では、 Athenaマネジメントコンソールからすべての必要な手順を実行できます。

Athena を Hive メタストアに接続するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。

37

Page 47: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApache Hive メタストアへの Athena の接続

2. [Connect data source (データソースの接続)] を選択します。

3. [Connect data source (データソースの接続)] ページの [Choose a metadata catalog (メタデータカタログの選択)] で、[Apache Hive metastore (Apache Hive メタストア)] を選択します。

38

Page 48: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApache Hive メタストアへの Athena の接続

4. [次へ] を選択します。5. [Connection details (接続の詳細)] ページの [LambdaFunction ( 関数)] で、[Configure new AWS

Lambdafunction (新しい 関数の設定)] を選択します。

コンソールでAthenaHiveMetastoreFunctionページが開きます。AWS Lambda

39

Page 49: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApache Hive メタストアへの Athena の接続

6.7. アプリケーションの詳細ページの右下で、[I acknowledge that this app creates custom IAM roles (この

アプリケーションがカスタム IAM ロールを作成することを承認します)] を選択し、[デプロイ] を選択します。

デプロイが完了すると、 関数がLambdaアプリケーションのリストに表示されます。Hive メタストア関数がアカウントにデプロイされたので、それを使用するAthenaように を設定できます。

40

Page 50: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApache Hive メタストアへの Athena の接続

8. コンソールの [データソース] タブの [接続の詳細] Athena ページに戻ります。9. [Choose function] の横にある [Refresh] Lambda アイコンを選択します。利用可能な関数のリストを

更新すると、新しく作成された関数がリストに表示されます。

10. Lambda関数が利用可能になったので、それを選択します。

41

Page 51: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApache Hive メタストアへの Athena の接続

新しいLambda関数 ARN エントリはLambda関数の ARN を示します。

11. [カタログ名] に、データソースを参照するために SQL クエリで使用する一意の名前を入力します。名前は 127 文字以内で、アカウント内で一意である必要があります。作成後に変更することはできません。有効な文字は、a~z、A~Z、0~9、_ (アンダースコア)、@ (アンパサンド)、- (ハイフン) です。名前 awsdatacatalog、hive、jmx および system は、Athena によって予約されており、カスタムカタログ名には使用できません。

12. (オプション) [Description (説明)] に、データカタログを表すテキストを入力します。13. 接続を選択します。これによりAthena、Hive メタストアカタログに接続されます。

42

Page 52: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Serverless Application Repository を使用する

[データソース] ページには、接続したカタログ (接続したカタログを含む) のリストが表示されます。登録されたすべてのカタログは、同じ AWS アカウントのすべてのユーザーに表示されます。

14. これで、指定した [カタログ名] を使用して、SQL クエリで Hive メタストアを参照できるようになります。SQL クエリで、次の構文例を使用し、hms-catalog-1 を以前に指定したカタログ名に置き換えます。

SELECT * FROM hms-catalog-1.CustomerData.customers;

15. 作成したデータソースを表示、編集、または削除するには、「データソースの管理 (p. 69)」を参照してください 。

AWS Serverless Application Repository を使用したHive データソースコネクタのデプロイAWS Serverless Application Repository を使用して、Hive の Athena データソースコネクタをデプロイすることもできます。使用するコネクタを選択し、コネクタに必要なパラメータを指定してから、コネクタをアカウントにデプロイします。

AWS Serverless Application Repository を使用して Hive のデータソースコネクタをアカウントにデプロイするには

1. AWS マネジメントコンソール にサインインし、サーバーレスアプリケーションリポジトリを開きます。

2. ナビゲーションペインで、[使用可能なアプリケーション] を選択します。

43

Page 53: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデフォルトカタログの使用

3. [Show apps that create custom IAM roles or resource policies (カスタム IAM ロールまたはリソースポリシーを作成するアプリケーションの表示)] オプションを選択します。

4. 検索ボックスに、次のいずれかのコネクタの名前を入力します。2 つのアプリケーションの機能は同じで、実装のみが異なります。どちらか 1 つを使用して、Athena を Hive メタストアに接続するLambda 関数を作成できます。

• AthenaHiveMetastoreFunction – Uber Lambda 関数 .jar ファイル。• AthenaHiveMetastoreFunctionWithLayer – Lambda レイヤーとシン Lambda 関数 .jar ファイル。

5. コネクタの名前を選択します。

6.7. [ 申請内容 ページ、選択 このアプリがカスタムIAMロールを作成することを認めますを選択し、 展開.

この時点で、 Athena 使用するには Lambda Hive MetaStore に接続するための機能です。詳細については、ステップ8~15を参照してください。 Apache Hive メタストアへの Athena の接続 (p. 37).

外部 Hive メタストアクエリでデフォルトカタログを使用する外部 Hive メタストアで DML クエリと DDL クエリを実行するとき、クエリエディタでカタログ名が選択されている場合は、カタログ名を省略することでクエリ構文を簡略化できます。この機能には一定の制限が適用されます。

44

Page 54: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデフォルトカタログの使用

DML ステートメント登録済みカタログでクエリを実行するには

1. 次の例のように、構文 [[catalog_name].database_name].table_name を使用してデータベースの前にカタログ名を配置できます。

select * from "hms-catalog-1".hms_tpch.customer limit 10;

2. 使用するカタログがすでにデータソースとして選択されている場合は、次の例のようにクエリからカタログ名を省略できます。

select * from hms_tpch.customer limit 10:

45

Page 55: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデフォルトカタログの使用

3. 複数のカタログの場合、デフォルトのカタログ名のみを省略できます。デフォルト以外のカタログはフルネームを指定します。たとえば、次のクエリの FROM ステートメントでは、AWS Glue カタログのカタログ名を省略しますが、最初の 2 つのカタログ名は完全修飾名です。

...FROM ehms01.hms_tpch.customer, "hms-catalog-1".hms_tpch.orders, hms_tpch.lineitem...

46

Page 56: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデフォルトカタログの使用

DDL ステートメント次の Athena DDL ステートメントは、カタログ名プレフィックスをサポートします。他の DDL ステートメントのカタログ名プレフィックスは、構文エラーの原因となります。

SHOW TABLES [IN [catalog_name.]database_name] ['regular_expression']

SHOW TBLPROPERTIES [[catalog_name.]database_name.]table_name [('property_name')]

SHOW COLUMNS IN [[catalog_name.]database_name.]table_name

SHOW PARTITIONS [[catalog_name.]database_name.]table_name

SHOW CREATE TABLE [[catalog_name.][database_name.]table_name

DESCRIBE [EXTENDED | FORMATTED] [[catalog_name.][database_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]

DML 文と同様に、[データソース] パネルでカタログとデータベースを選択すると、クエリからカタログプレフィックスを省略できます。

次の例では、クエリエディタでデータソースとデータベースが選択されています。クエリから hms-catalog-1 プレフィックスと hms_tpch データベース名が省略しても、show create table customer ステートメントは成功します。

47

Page 57: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHive メタストアでの AWS CLI を使用する

Hive メタストアでの AWS CLI を使用するaws athena CLI コマンドを使用して、Athena で使用する Hive メタストアデータカタログを管理できます。Athena で使用する 1 つ以上のカタログを定義したら、aws athena DDLコマンドおよび DML コマンドでこれらのカタログを参照できます。

48

Page 58: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHive メタストアでの AWS CLI を使用する

AWS CLI を使用して Hive メタストアカタログを管理するカタログの登録: データカタログの作成データカタログを登録するには、create-data-catalog コマンドを使用します。name パラメータを使用して、カタログに使用する名前を指定します。Lambda 関数の ARN を parameters 引数のmetadata-function オプションに渡します。新しいカタログのタグを作成するには、tags パラメータを、スペースで区切った 1 つ以上の Key=key,Value=value 引数ペアとともに使用します。

次の例では、hms-catalog-1 という名前の Hive メタストアカタログを登録します。コマンドは、読みやすい形式にしてあります。

$ aws athena create-data-catalog --name "hms-catalog-1" --type "HIVE" --description "Hive Catalog 1" --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3,sdk-version=1.0" --tags Key=MyKey,Value=MyValue --region us-east-1

カタログの詳細の表示: get-data-catalogカタログの詳細を表示するには、次の例のように、カタログの名前を get-data-catalog コマンドに渡します。

$ aws athena get-data-catalog --name "hms-catalog-1" --region us-east-1

次のサンプル結果は JSON 形式です。

{ "DataCatalog": { "Name": "hms-catalog-1", "Description": "Hive Catalog 1", "Type": "HIVE", "Parameters": { "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3", "sdk-version": "1.0" } }}

登録済みカタログのリスト化: list-data-catalogs登録されたカタログをリスト化するには、list-data-catalogs コマンドを使用し、必要に応じて次の例のようにリージョンを指定します。リストされているカタログには、常に AWS Glue が含まれます。

$ aws athena list-data-catalogs --region us-east-1

次のサンプル結果は JSON 形式です。

{ "DataCatalogs": [ { "CatalogName": "AwsDataCatalog", "Type": "GLUE" },

49

Page 59: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHive メタストアでの AWS CLI を使用する

{ "CatalogName": "hms-catalog-1", "Type": "HIVE", "Parameters": { "metadata-function": "arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-v3", "sdk-version": "1.0" } } ]}

カタログの更新: update-data-catalogデータカタログを更新するには、次の例のように update-data-catalog コマンドを使用します。コマンドは、読みやすい形式にしてあります。

$ aws athena update-data-catalog --name "hms-catalog-1" --type "HIVE" --description "My New Hive Catalog Description" --parameters "metadata-function=arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new,sdk-version=1.0" --region us-east-1

カタログの削除: delete-data-catalogデータカタログを削除するには、次の例のように delete-data-catalog コマンドを使用します。

$ aws athena delete-data-catalog --name "hms-catalog-1" --region us-east-1

データベース詳細の表示: get-databaseデータベースの詳細を表示するには、次の例のように、カタログとデータベースの名前を get-databaseコマンドに渡します。

$ aws athena get-database --catalog-name hms-catalog-1 --database-name mydb

次のサンプル結果は JSON 形式です。

{ "Database": { "Name": "mydb", "Description": "My database", "Parameters": { "CreatedBy": "Athena", "EXTERNAL": "TRUE" } }}

カタログ内のデータベースのリスト化: list-databasesカタログのデータベースをリスト化するには、list-databases コマンドを使用し、必要に応じて次の例のようにリージョンを指定します。

$ aws athena list-databases --catalog-name AwsDataCatalog --region us-west-2

50

Page 60: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHive メタストアでの AWS CLI を使用する

次のサンプル結果は JSON 形式です。

{ "DatabaseList": [ { "Name": "default" }, { "Name": "mycrawlerdatabase" }, { "Name": "mydatabase" }, { "Name": "sampledb", "Description": "Sample database", "Parameters": { "CreatedBy": "Athena", "EXTERNAL": "TRUE" } }, { "Name": "tpch100" } ]}

テーブルの詳細の表示: get-table-metadata

カラム名やデータ型を含むテーブルのメタデータを表示するには、次の例のように、カタログ、データベース、およびテーブル名を get-table-metadata コマンドに渡します。

$ aws athena get-table-metadata --catalog-name AwsDataCatalog --database-name mydb --table-name cityuseragent

次のサンプル結果は JSON 形式です。

{ "TableMetadata": { "Name": "cityuseragent", "CreateTime": 1586451276.0, "LastAccessTime": 0.0, "TableType": "EXTERNAL_TABLE", "Columns": [ { "Name": "city", "Type": "string" }, { "Name": "useragent1", "Type": "string" } ], "PartitionKeys": [], "Parameters": { "COLUMN_STATS_ACCURATE": "false", "EXTERNAL": "TRUE", "inputformat": "org.apache.hadoop.mapred.TextInputFormat", "last_modified_by": "hadoop", "last_modified_time": "1586454879", "location": "s3://athena-data/", "numFiles": "1",

51

Page 61: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHive メタストアでの AWS CLI を使用する

"numRows": "-1", "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "rawDataSize": "-1", "serde.param.serialization.format": "1", "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", "totalSize": "61" } }}

データベース内のすべてのテーブルのメタデータの表示: list-table-metadataデータベース内のすべてのテーブルのメタデータを表示するには、カタログの名前とデータベース名をlist-table-metadata コマンドに渡します。list-table-metadata コマンドは、テーブル名を指定しない点を除いて、get-table-metadata コマンドに似ています。結果件数を制限するには、次の例のように --max-results オプションを使用します。

$ aws athena list-table-metadata --catalog-name AwsDataCatalog --database-name sampledb --region us-east-1 --max-results 2

次のサンプル結果は JSON 形式です。

{ "TableMetadataList": [ { "Name": "cityuseragent", "CreateTime": 1586451276.0, "LastAccessTime": 0.0, "TableType": "EXTERNAL_TABLE", "Columns": [ { "Name": "city", "Type": "string" }, { "Name": "useragent1", "Type": "string" } ], "PartitionKeys": [], "Parameters": { "COLUMN_STATS_ACCURATE": "false", "EXTERNAL": "TRUE", "inputformat": "org.apache.hadoop.mapred.TextInputFormat", "last_modified_by": "hadoop", "last_modified_time": "1586454879", "location": "s3://athena-data/", "numFiles": "1", "numRows": "-1", "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "rawDataSize": "-1", "serde.param.serialization.format": "1", "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", "totalSize": "61" } }, { "Name": "clearinghouse_data", "CreateTime": 1589255544.0,

52

Page 62: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHive メタストアでの AWS CLI を使用する

"LastAccessTime": 0.0, "TableType": "EXTERNAL_TABLE", "Columns": [ { "Name": "location", "Type": "string" }, { "Name": "stock_count", "Type": "int" }, { "Name": "quantity_shipped", "Type": "int" } ], "PartitionKeys": [], "Parameters": { "EXTERNAL": "TRUE", "inputformat": "org.apache.hadoop.mapred.TextInputFormat", "location": "s3://myjasondata/", "outputformat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "serde.param.serialization.format": "1", "serde.serialization.lib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe", "transient_lastDdlTime": "1589255544" } } ], "NextToken": "eyJsYXN0RXZhbHVhdGVkS2V5Ijp7IkhBU0hfS0VZIjp7InMiOiJ0Ljk0YWZjYjk1MjJjNTQ1YmU4Y2I5OWE5NTg0MjFjYTYzIn0sIlJBTkdFX0tFWSI6eyJzIjoiY2xlYXJpbmdob3VzZV9kYXRhIn19LCJleHBpcmF0aW9uIjp7InNlY29uZHMiOjE1ODkzNDIwMjIsIm5hbm9zIjo2NTUwMDAwMDB9fQ=="}

DDL および DML ステートメントの実行AWS CLI を使用して DDL および DML 文を実行する場合、次の 2 つの方法のいずれかで Hive メタストアカタログの名前を渡すことができます。

• それをサポートするステートメントに直接渡す。• --query-execution-context Catalog パラメータに渡す。

DDL ステートメント

次の例では、show create table DDL ステートメントの一部としてカタログ名に直接渡します。コマンドは、読みやすい形式にしてあります。

$ aws athena start-query-execution --query-string "show create table hms-catalog-1.hms_tpch_partitioned.lineitem" --result-configuration "OutputLocation=s3://mybucket/lambda/results"

次の DDL show create table ステートメントの例では、--query-execution-context のCatalog パラメータを使用して Hive メタストアカタログ名 hms-catalog-1 に渡します。コマンドは、読みやすい形式にしてあります。

$ aws athena start-query-execution --query-string "show create table lineitem" --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" --result-configuration "OutputLocation=s3://mybucket/lambda/results"

53

Page 63: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドリファレンス実装

DML ステートメント次の DML select ステートメントの例では、カタログ名をクエリに直接渡します。コマンドは、読みやすい形式にしてあります。

$ aws athena start-query-execution --query-string "select * from hms-catalog-1.hms_tpch_partitioned.customer limit 100" --result-configuration "OutputLocation=s3://mybucket/lambda/results"

次の DML select ステートメントの例では、--query-execution-context の Catalog パラメータを使用して Hive メタストアカタログ名 hms-catalog-1 に渡します。コマンドは、読みやすい形式にしてあります。

$ aws athena start-query-execution --query-string "select * from customer limit 100" --query-execution-context "Catalog=hms-catalog-1,Database=hms_tpch_partitioned" --result-configuration "OutputLocation=s3://mybucket/lambda/results"

リファレンス実装Athena は、GitHub.com の外部 Hive メタストア用のコネクタのリファレンス実装を、https://github.com/awslabs/aws-athena-hive-metastore で提供します。

リファレンス実装は、次のモジュールを持つ Apache Maven プロジェクトです。

• hms-service-api –Lambda 関数と Athena サービスクライアント間の API オペレーションが含まれます。これらの API オペレーションは、HiveMetaStoreService インターフェイスで定義されます。これはサービス契約であるため、このモジュールでは何も変更しないでください。

• hms-lambda-handler – すべての Hive メタストア API コールを処理する一連のデフォルト Lambdaハンドラー。クラス MetadataHandler は、すべての API コールのディスパッチャーです。このパッケージを変更する必要はありません。

• hms-lambda-layer – hms-service-api、hms-lambda-handler、およびその依存関係を .zipファイルに入れる Maven アセンブリプロジェクト。.zip ファイルは、複数の Lambda 関数で使用するための Lambda レイヤーとして登録されます。

• hms-lambda-func – 次のコンポーネントを持つ Lambda 関数の例。• HiveMetaStoreLambdaFunc – MetadataHandler を拡張する Lambda 関数の例。• ThriftHiveMetaStoreClient – Hive メタストアと通信する Thrift クライアント。このクライアン

トは Hive 2.3.0 用に書かれています。別の Hive バージョンを使用する場合は、このクラスを更新して、応答オブジェクトに互換性があることを確認する必要があります。

• ThriftHiveMetaStoreClientFactory – Lambda 関数の動作を制御します。たとえば、getHandlerProvider() メソッドをオーバーライドして、独自のハンドラープロバイダーを提供できます。

• hms.properties – Lambda 関数を設定します。ほとんどの場合、次の 2 つのプロパティのみを更新する必要があります。• hive.metastore.uris – thrift://<host_name>:9083 形式の Hive メタストアの URI です。• hive.metastore.response.spill.location: 応答オブジェクトのサイズが所定のしきい値

を超えた場合 (たとえば 4MB) の応答オブジェクトを格納する Amazon S3 場所。しきい値はプロパティ hive.metastore.response.spill.threshold で定義されます。デフォルト値を変更することは推奨されません。Note

これら 2 つのプロパティは、Lambda 環境変数 HMS_URIS と SPILL_LOCATION で上書きできます。別の Hive メタストアまたはスピル場所で Lambda 関数を使用する場合は、関数のソースコードを再コンパイルする代わりに、これらの変数を使用します。

54

Page 64: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon Athena Federated Query (Preview) を使用する

アーティファクトを自分で構築するほとんどのユースケースでは、リファレンス実装を変更する必要はありません。ただし必要に応じて、ソースコードを変更したり、アーティファクトを自分で構築したり、Amazon S3 場所にアップロードしたりできます。

アーティファクトを構築する前に、hms-lambda-func モジュール内の hms.properties ファイルにあるプロパティ hive.metastore.uris および hive.metastore.response.spill.location を更新します。

アーティファクトを構築するには、Apache Maven をインストールし、mvn install コマンドを実行する必要があります。これにより、モジュール hms-lambda-layer と Lambda 関数 .jar ファイルのtarget と呼ばれる出力フォルダにレイヤー .zip ファイルが生成されます。

Amazon Athena Federated Query (Preview) を使用する

Amazon S3 以外のソースにデータがある場合は、Athena Federated Query (Preview) を使用してその場でデータをクエリしたり、複数のデータソースからデータを抽出して Amazon S3 に格納するパイプラインを構築したりできます。Athena Federated Query (Preview) では、リレーショナル、非リレーショナル、オブジェクト、およびカスタムデータソースに保存されているデータについて SQL クエリを実行することができます。

Athenaは、 で実行されるデータソースコネクタを使用してフェデレーテッドクエリを実行します。AWSLambdaデータソースコネクタは、ターゲットデータソースと Athena の間で変換できるコードです。コネクタは、Athena のクエリエンジンの拡張と考えることができます。構築済みのデータソースコネクタは、 Athena ログ、 Amazon CloudWatch 、 、および Amazon DynamoDB などのデータソース、およびAmazon DocumentDB や Apache 2.0 ライセンスAmazon RDS下にある JDBC 準拠のリレーショナルデータソース用に存在します。MySQLPostgreSQLAthena Query Federation SDK を使用してカスタムコネクタを記述することもできます。データソースコネクタを選択、構成、およびアカウントデプロイするには、Athena および Lambda コンソールまたは AWS Serverless Application Repository を使用できます。データソースコネクタをデプロイした後、コネクタは SQL クエリで指定できるカタログに関連付けられます。複数のカタログの SQL ステートメントを組み合わせて、1 つのクエリの範囲に複数のデータソースを入れることができます。

データソースに対してクエリが送信されると、Athena は対応するコネクタを呼び出して、読み取りが必要なテーブルの部分を特定し、並列処理を管理して、フィルター述語をプッシュダウンします。クエリを送信するユーザーに基づいて、コネクタは特定のデータ要素へのアクセスを提供または制限できます。コネクタは、クエリで要求されたデータを返す形式として Apache Arrow を使用します。これにより、コネクタを C、C++、Java、Python、Rust などの言語で実装できます。コネクタは Lambda で処理されるため、Lambda からアクセス可能なクラウドまたはオンプレミスのデータソースのデータにアクセスするために使用できます。

独自のデータソースコネクタを記述するには、Athena Query Federation SDK を使用して、AmazonAthena が提供および保守する事前作成済みコネクタの 1 つをカスタマイズできます。GitHubリポジトリからソースコードのコピーを変更し、Connector Publish Tool を使用して独自のパッケージを作成できます。AWS Serverless Application Repository

使用可能な Athena データソースコネクタのリストについては、「Athena データソースコネクタの使用 (p. 58)」を参照してください。

独自のデータソースコネクタの記述については、「 での Athena Connector の例」を参照してくださいGitHub。

55

Page 65: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド考慮事項と制約事項

考慮事項と制約事項• –利用できるリージョン Athenaフェデレーティッドクエリ機能は、 米国東部(バージニア北部) 、 ア

ジアパシフィック (ムンバイ) 、 、および 欧州 (アイルランド) 米国西部 (オレゴン)リージョンのプレビューで利用できます。

• AmazonAthenaPreviewFunctionality–To use this feature in preview, you must create an Athenaworkgroup named AmazonAthenaPreviewFunctionality and join that workgroup. For moreinformation, see ワークグループの管理 (p. 340).ワークグループ

• ビュー – フェデレーテッドデータソースではビューを使用できません。• JDBC – ドライバー フェデレーティッドクエリまたは外部 Hive メタストアで JDBC ドライバーを

使用するには (p. 34)、JDBC 接続文字列MetadataRetrievalMethod=ProxyAPIに を含めます。JDBC ドライバーの詳細については、「」を参照してくださいJDBC ドライバーを介した Athena の使用 (p. 72)。

データソースコネクタは、正しく機能するために、次のリソースへのアクセスが必要になる場合があります。事前に構築されたコネクタを使用する場合は、コネクタの情報を確認して、VPC が正しく設定されていることを確認してください。また、クエリを実行し、コネクタを作成する IAM プリンシパルに、必要なアクションに対する権限があることを確認してください。詳細については、Athena Federated Query(Preview) を許可する IAM アクセス許可ポリシーの例 (p. 265) を参照してください。

• Amazon S3 –データコネクタは、Amazon S3 のクエリ結果場所に Athena クエリ結果を書き込むだけでなく、Amazon S3 のスピルバケットにも書き込みます。この Amazon S3 場所への接続とアクセス許可が必要です。

• Athena – クエリステータスをチェックし、オーバースキャンを防止するために、データソースはAthena との間で双方向の接続が必要です。

• AWS Glue データカタログ – コネクタが、補足メタデータまたはプライマリメタデータに Data Catalogを使用する場合は、接続性とアクセス許可が必要です。

既知の問題と制限に関する最新情報については、aws-athena-query-federation リポジトリの「GitHub制限と問題」を参照してください。

コネクタのデプロイとデータソースへの接続フェデレーションクエリを作成する準備には、Lambda 関数データソースコネクタのデプロイと Lambda関数のデータソースへの接続という 2 つの部分があります。最初のパートでは、Lambda 関数に後からAthena コンソールで選択できる名前を付けます。2 番目のパートでは、SQL クエリで参照できる名前をコネクタに付けます。

パート 1: データソースコネクタのデプロイデータソースコネクタを選択、名前付け、およびデプロイするには、統合プロセスで Athena コンソールと Lambda コンソールを使用します。

Note

To use this feature in preview, you must create an Athena workgroup namedAmazonAthenaPreviewFunctionality and join that workgroup. For more information, seeワークグループの管理 (p. 340).

データソースコネクタをデプロイするには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [Connect data source (データソースの接続)] を選択します。

56

Page 66: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Serverless Application Repository を使用する

3. [Connect data source (データソースの接続)] ページで、[Query a data source (データソースのクエリ)]を選択します。

4. [Choose a data source (データソースの選択)] で、Amazon CloudWatch Logsなど、Athena でクエリに使用するデータソースを選択します。

5. [次へ] を選択します。6. [Lambda 関数] の場合は、[Configure new function (新しい関数の設定)] を選択します。選択したコネ

クタの機能ページが Lambda コンソールで開きます。このページには、コネクタに関する詳細情報が表示されます。

7. [アプリケーションの設定] で、必要な情報を入力します。少なくとも、これには以下が含まれます。

• ターゲットとなるデータソースを示す 関数の名前 ( など)Athena。CatalogName–Lambdacloudwatchlogs

• 関数のレスポンスサイズの制限を超えるデータを格納するアカウント内の SpillBucket – AmazonS3 Lambdaバケット。

8. [I acknowledge that this app creates custom IAM roles (このアプリケーションがカスタム IAM ロールを作成することを承認します)] を選択します。詳細については、[情報] リンクを選択してください。

9. [デプロイ] を選択します。Lambda コンソールの [リソース] セクションには、コネクタのデプロイステータスが表示され、デプロイが完了したときに通知します。

パート 2: データソースへの接続データソースコネクタをアカウントにデプロイしたら、データソースに接続できます。

アカウントにデプロイしたコネクタを使用してデータソースに接続するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [Connect data source (データソースの接続)] を選択します。3. [Query a data source (データソースのクエリ)] を選択します。4. デプロイしたコネクタのデータソース(Amazon CloudWatch Logs など)を選択します。Athena

Query Federation SDK を使用して独自のコネクタを作成し、それをアカウントにデプロイした場合は、[All other data sources (他のすべてのデータソース)] を選択します。

5. [次へ] を選択します。6. [Lambda 関数の選択] で、名前を付けた関数を選択します。Lambda 関数の ARN が表示されます。7. [Catalog name (カタログ名)] に、SQL クエリのデータソースに使用する一意の名前 ( など) を入

力しますcloudwatchlogs。 名前は最大 127 文字で、アカウント内で一意である必要があります。作成後に変更することはできません。有効な文字は、a~z、A~Z、0~9、_(アンダースコア)、@(アンパサンド)、-(ハイフン)です。名前 awsdatacatalog、hive、jmx およびsystem は、Athena によって予約されており、カスタムカタログ名には使用できません。

8. 接続を選択します。[データソース] ページには、カタログ名の一覧にコネクタが表示されます。これで、クエリでコネクタを使用できるようになりました。

データコネクタを使用したクエリの記述については、「フェデレーティッドクエリの書き込み (p. 60)」を参照してください。

AWS Serverless Application Repository を使用したデータソースコネクタのデプロイAWS Serverless Application Repository を使用して、Athena データソースコネクタをデプロイすることもできます。使用するコネクタを見つけ、コネクタに必要なパラメータを指定し、コネクタをアカウントにデプロイします。

57

Page 67: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena データソースコネクタ

Note

To use this feature in preview, you must create an Athena workgroup namedAmazonAthenaPreviewFunctionality and join that workgroup. For more information, seeワークグループの管理 (p. 340).

AWS Serverless Application Repository を使用してデータソースコネクタをアカウントにデプロイするには

1. AWS マネジメントコンソール にサインインし、サーバーレスアプリケーションリポジトリを開きます。

2. ナビゲーションペインで、[使用可能なアプリケーション] を選択します。3. [Show apps that create custom IAM roles or resource policies (カスタム IAM ロールまたはリソースポ

リシーを作成するアプリケーションの表示)] オプションを選択します。4. 検索ボックスにコネクタの名前を入力するか、作成者名 [Amazon Athena Federation] で公開されてい

るアプリケーションを検索します。この作成者名は、Amazon Athena チームが作成、テスト、検証したアプリケーション用に予約されています。あらかじめ作成された Athena データコネクタのリストについては、「Athena データソースコネクタの使用 (p. 58)」を参照してください。

5. コネクタの名前を選択します。これにより、 Lambda 関数の [アプリケーション詳細] ページが AWSLambda コンソールに表示されます。

6. 詳細ページの右側の [Application SpillBucket settings] (アプリケーション設定) で、大きなレスポンスペイロードからデータを受信する Amazon S3バケットを指定します。その他の設定可能なオプションについては、 の対応する使用可能なコネクタのトピックを参照してくださいGitHub。

7. [アプリケーション詳細] ページの右下で [デプロイ] を選択します。

Athena データソースコネクタの使用このセクションでは、Amazon S3 外部のさまざまな Athena データソースをクエリするために使用できる構築済みのデータソースコネクタを一覧表示します。Athena クエリでコネクタを使用するには、コネクタを設定してアカウントにデプロイします。

Note

To use this feature in preview, you must create an Athena workgroup namedAmazonAthenaPreviewFunctionality and join that workgroup. For more information, seeワークグループの管理 (p. 340).

詳細については、以下のトピックを参照してください:

• Athena データソースコネクタのデプロイについては、「コネクタのデプロイとデータソースへの接続 (p. 56)」を参照してください。

• Athena データソースコネクタを使用するクエリの書き込みについては、「フェデレーティッドクエリの書き込み (p. 60)」を参照してください。

• Athenaデータソースコネクタの詳細については、「 で利用可能なコネクタ」を参照してください。GitHub

トピック• Athena AWS CMDB コネクタ (p. 59)• Amazon Athena CloudWatch コネクタ (p. 59)• Amazon Athena CloudWatch Metrics コネクタ (p. 59)• Amazon Athena DocumentDB コネクタ (p. 59)

58

Page 68: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena データソースコネクタ

• Amazon Athena DynamoDB コネクタ (p. 59)• Amazon Athena Elasticsearch コネクタ (p. 60)• Amazon Athena HBase コネクタ (p. 60)• JDBC 準拠のデータソース用 Amazon Athena コネクタ (p. 60)• Amazon Athena Redis コネクタ (p. 60)• Amazon Athena TPC ベンチマーク DS (TPC-DS) コネクタ (p. 60)

Athena AWS CMDB コネクタAmazon Athena AWS CMDB コネクタを使用すると、SQL でさまざまな AWS サービスをクエリできるように Amazon Athena がそれらのサービスと通信することができます。

サポートされているサービス、パラメータ、アクセス許可、デプロイ、パフォーマンス、およびライセンスについては、 の Amazon Athena AWS CMDB Connector を参照してくださいGitHub。

Amazon Athena CloudWatch コネクタAmazon Athena CloudWatch コネクタを使用すると、SQL でログデータをクエリできるように AmazonAthena が CloudWatch と通信することができます。

コネクタは をスキーマLogGroupsとしてマッピングし、それぞれをテーブルLogStreamとしてマッピングします。また、コネクタにより、 のすべてを含む特別なall_log_streamsビューもマッピングされますLogStreams。LogGroup このビューでは、各ログLogGroupを個別に検索するのではなく、一度にすべてのログをクエリできます。LogStream

設定オプション、スロットリング制御、テーブルマッピングスキーマ、アクセス許可、デプロイ、パフォーマンスに関する考慮事項、およびライセンスの詳細については、 の CloudWatch Amazon Athena Connector を参照してくださいGitHub。

Amazon Athena CloudWatch Metrics コネクタAmazon Athena CloudWatch Metrics コネクタを使用すると、SQL でメトリクスデータをクエリできるように Amazon Athena が CloudWatch Metrics と通信することができます。

設定オプション、テーブルマッピング、アクセス許可、デプロイ、パフォーマンスに関する考慮事項、およびライセンスについては、 の Amazon Athena Cloudwatch Metrics Connector を参照してくださいGitHub。

Amazon Athena DocumentDB コネクタAmazon Athena Amazon DocumentDB コネクタを使用すると、SQL で Amazon DocumentDB データをクエリできるように Amazon Athena が Amazon DocumentDB インスタンスと通信することができます。コネクタは、 と互換性のある任意のエンドポイントでも機能MongoDBします。

コネクタによるスキーマの生成方法、設定オプション、アクセス許可、デプロイ、パフォーマンスに関する考慮事項の詳細については、 の DocumentDB Amazon Athena Connector を参照してくださいGitHub。

Amazon Athena DynamoDB コネクタAmazon Athena DynamoDB コネクタを使用すると、SQL でテーブルをクエリできるように AmazonAthena が DynamoDB と通信することができます。

設定オプション、アクセス許可、デプロイ、およびパフォーマンスの考慮事項については、 のDynamoDB Amazon Athena Connector を参照してくださいGitHub。

59

Page 69: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドフェデレーティッドクエリの書き込み

Amazon Athena Elasticsearch コネクタAmazon AthenaElasticsearchコネクタを使用すると、 がAmazon Athenaインスタンスと通信して、SQLを使用してElasticsearchデータをクエリできるようになります。Elasticsearchこのコネクタは、Amazon Elasticsearch Service以降で設定された または Elasticsearch 互換のエンドポイントで動作します。Elasticsearch version 7.0

設定オプション、データベースとテーブル、データ型、デプロイ、およびパフォーマンスの考慮事項については、 の Amazon Athena Elasticsearch Connector を参照してくださいGitHub。

Amazon Athena HBase コネクタAmazon Athena HBase コネクタを使用すると、SQL で HBase データをクエリできるように AmazonAthena が HBase インスタンスと通信することができます。

設定オプション、データ型、アクセス許可、デプロイ、パフォーマンス、およびライセンスについては、 の HBase Amazon Athena Connector を参照してくださいGitHub。

JDBC 準拠のデータソース用 Amazon Athena コネクタAmazon Athena Lambda JDBC コネクタを使用すると、Amazon Athena は JDBC 準拠のデータベースにアクセスできます。現在サポートされているデータベースには、 MySQL 、 PostgreSQL 、および がありますAmazon Redshift。

サポートされているデータベース、設定パラメータ、サポートされているデータ型、JDBC ドライバーのバージョン、制限、およびその他の情報については、 の「Amazon Athena Lambda JDBC Connector」を参照してくださいGitHub。

Amazon Athena Redis コネクタAmazon Athena Redis コネクタを使用すると、SQL で Redis データをクエリできるように AmazonAthena が Redis インスタンスと通信することができます。AWS Glue データカタログ を使用して、Redisのキーと値のペアを仮想テーブルにマッピングできます。

設定オプション、データベースとテーブルの設定、データ型、アクセス許可、デプロイ、パフォーマンス、およびライセンスについては、 の Amazon Athena Redis Connector を参照してくださいGitHub。

Amazon Athena TPC ベンチマーク DS (TPC-DS) コネクタAmazon Athena TPC-DS コネクタを使用すると、ベンチマークや機能テストで使用するために、AmazonAthena がランダムに生成された TPC ベンチマーク DS データのソースと通信することができます。Athena TPC-DS コネクタにより、4 つのスケール係数のいずれかで TPC-DS 準拠のデータベースが生成されます。

設定オプション、データベースとテーブル、アクセス許可、デプロイ、パフォーマンス、およびライセンスについては、 の Amazon Athena TPC-DS Connector を参照してくださいGitHub。

フェデレーティッドクエリの書き込み1 つ以上のデータコネクタを設定してアカウントにデプロイしたら、それらを Athena クエリで使用できます。

単一データソースのクエリこのセクションの例では、Athena CloudWatch コネクタが構成され、アカウントにデプロイされていることを前提としています。他のコネクタを使用する場合も、同じ方法でクエリを実行します。

60

Page 70: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドフェデレーティッドクエリの書き込み

CloudWatch コネクタを使用する Athena クエリを作成するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. Athena クエリエディタで、FROM 句に次の構文を使用する SQL クエリを作成します。

MyCloudwatchCatalog.database_name.table_name

次の例では、Athena CloudWatch コネクタを使用して /var/ecommerce-engine/order-processorCloudWatch Logs ロググループの all_log_streams ビューに接続します。all_log_streams ビューは、ロググループ内のすべてのログストリームのビューです。このクエリ例では、返される行数を 100 に制限します。

Example

SELECT * FROM "MyCloudwatchCatalog"."/var/ecommerce-engine/order-processor".all_log_streams limit 100;

次の例では、前の例と同じビューの情報を解析します。この例では、注文 ID とログレベルを抽出し、レベル INFO のメッセージをフィルタリングします。

Example

SELECT log_stream as ec2_instance, Regexp_extract(message '.*orderId=(\d+) .*', 1) AS orderId, message AS order_processor_log, Regexp_extract(message, '(.*):.*', 1) AS log_level FROM "MyCloudwatchCatalog"."/var/ecommerce-engine/order-processor".all_log_streams WHERE Regexp_extract(message, '(.*):.*', 1) != 'INFO'

次のイメージは、サンプル結果を示しています。

Note

この例は、データソースが Athena にカタログとして登録されているクエリを示しています。また、形式 lambda:MyLambdaFunctionName. を使用してデータソースコネクタ Lambda 関数を参照することもできます。

複数のデータソースのクエリさらに複雑な例として、次の図に示すようなアプリケーションインフラストラクチャを持つ e コマース会社があるとします。

61

Page 71: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドフェデレーティッドクエリの書き込み

次の説明では、図内の番号が付いた項目について示しています。

1. Amazon EMR 上の HBase にトランザクションレコードが保存されている安全な VPC での支払い処理2. 処理エンジンがすぐにアクティブな注文にアクセスできるようにする、アクティブな注文を保存する

Redis3. 電子メールアドレスや配送先住所などの顧客アカウントデータの Amazon DocumentDB4. Fargate で自動スケーリングを使用する e コマースサイトの Amazon Aurora での製品カタログ5. 注文プロセッサのログイベントを格納する CloudWatch Logs6. Amazon RDS 上の Write-Once-Read-Many データウェアハウス7. 配送追跡データを保存する DynamoDB

この e コマースアプリケーションのデータアナリストが、一部の注文の状態が誤って報告されていることを発見したとします。配送されたにもかかわらず保留中と表示されている注文がある一方、配送済みと表示されていても出荷されていない注文があります。

アナリストは、遅延している注文の数と、e コマースインフラストラクチャ全体で影響を受けた注文が共通している内容を知りたいと考えています。情報のソースを個別に調査する代わりに、アナリストはデータソースをフェデレーションして、必要な情報を 1 つのクエリで取得します。1 つの場所にデータを抽出する必要はありません。

アナリストのクエリでは、次の Athena データコネクタが使用されます。

• CloudWatch Logs – 注文処理サービスからログを取得し、正規表現照合と抽出を使用して WARN またはERROR イベントがある注文をフィルタリングします。

• Redis – インスタンスからアクティブな注文を取得します。• CMDB – 注文処理サービスを実行して WARN または ERROR メッセージをログに記録した Amazon EC2

インスタンスの ID と状態を取得します。

62

Page 72: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドフェデレーティッドクエリの書き込み

• DocumentDB – 影響を受けた注文について、Amazon DocumentDB から顧客の電子メールとアドレスを取得します。

• DynamoDB – 配送テーブルから配送ステータスと追跡詳細を取得し、報告されたステータスと実際のステータスの間に考えられる不一致を特定します。

• HBase – 支払い処理サービスから、影響を受けた注文の支払いステータスを取得します。

Example

Note

この例は、データソースが Athena にカタログとして登録されているクエリを示しています。また、形式 lambda:MyLambdaFunctionName. を使用してデータソースコネクタ Lambda 関数を参照することもできます。

--Sample query using multiple Athena data connectors.WITH logs AS (SELECT log_stream, message AS order_processor_log, Regexp_extract(message, '.*orderId=(\d+) .*', 1) AS orderId, Regexp_extract(message, '(.*):.*', 1) AS log_level FROM "MyCloudwatchCatalog"."/var/ecommerce-engine/order-processor".all_log_streams WHERE Regexp_extract(message, '(.*):.*', 1) != 'INFO'), active_orders AS (SELECT * FROM redis.redis_db.redis_customer_orders), order_processors AS (SELECT instanceid, publicipaddress, state.NAME FROM awscmdb.ec2.ec2_instances), customer AS (SELECT id, email FROM docdb.customers.customer_info), addresses AS (SELECT id, is_residential, address.street AS street FROM docdb.customers.customer_addresses), shipments AS ( SELECT order_id, shipment_id, from_unixtime(cast(shipped_date as double)) as shipment_time, carrier FROM lambda_ddb.default.order_shipments), payments AS ( SELECT "summary:order_id", "summary:status", "summary:cc_id", "details:network" FROM "hbase".hbase_payments.transactions) SELECT _key_ AS redis_order_id, customer_id, customer.email AS cust_email, "summary:cc_id" AS credit_card, "details:network" AS CC_type, "summary:status" AS payment_status, status AS redis_status, addresses.street AS street_address,

63

Page 73: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータソースコネクタの記述

shipments.shipment_time as shipment_time, shipments.carrier as shipment_carrier, publicipaddress AS ec2_order_processor, NAME AS ec2_state, log_level, order_processor_log FROM active_orders LEFT JOIN logs ON logs.orderid = active_orders._key_ LEFT JOIN order_processors ON logs.log_stream = order_processors.instanceid LEFT JOIN customer ON customer.id = customer_id LEFT JOIN addresses ON addresses.id = address_id LEFT JOIN shipments ON shipments.order_id = active_orders._key_ LEFT JOIN payments ON payments."summary:order_id" = active_orders._key_

次のイメージは、クエリの結果の例を示しています。

Athena Query Federation SDK を使用したデータソースコネクタの記述独自のデータソースコネクタ (p. 55)を記述するには、Athena Query Federation SDK を使用できますAthena Query Federation SDK は、記述およびデプロイするコードにクエリ実行プランの一部を委任するために Athena を有効にするために使用できる一連のインターフェイスとワイヤープロトコルを定義します。SDK には、コネクタスイートとコネクタの例が含まれています。

また、Amazon Athena の事前構築済みコネクタをカスタマイズして、ユーザー自身で使用することもできます。のソースコードのコピーを変更し、GitHubコネクタ公開ツールを使用して独自のパッケージを作成できます。AWS Serverless Application Repositoryこの方法でコネクタをデプロイした後、Athena クエリで使用することができます。

Note

To use this feature in preview, you must create an Athena workgroup namedAmazonAthenaPreviewFunctionality and join that workgroup. For more information, seeワークグループの管理 (p. 340).

SDK をダウンロードする方法と、独自のコネクタを記述するための詳細な手順については、 の AthenaConnector の例を参照してくださいGitHub。

64

Page 74: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータカタログにアクセスするための IAM ポリシー

データカタログにアクセスするための IAM ポリシー

データカタログへのアクセスを制御するには、リソースレベルの IAM アクセス許可またはアイデンティティベースの IAM ポリシーを使用します。

次の手順は、Athena に固有です。

IAM 固有の情報については、このセクションの最後に表示されているリンクを参照してください。JSONデータカタログポリシーの例については、「データカタログポリシーの例 (p. 66)」を参照してください。

IAM コンソールでビジュアルエディタを使用してデータカタログポリシーを作成するには

1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

2. 左側のナビゲーションペインで、[ポリシー]、[ポリシーの作成] の順に選択します。3. [Visual editor (ビジュアルエディタ)] タブで、[Choose a service (サービスの選択)] を選択します。次

に、ポリシーに追加する Athena を選択します。4. [アクションの選択] を選択し、ポリシーに追加するアクションを選択します。ビジュアルエディ

タは、Athena で使用可能なアクションを表示します。詳細については、IAM ユーザーガイド の「Amazon Athena のアクション、リソース、および条件キー」を参照してください。

5. [アクションの追加] を選択して特定のアクションを入力するか、ワイルドカード (*) を使用して複数のアクションを指定します。

デフォルトでは、作成しているポリシーによって選択したアクションが許可されます。Athena のdatacatalog リソースへのリソースレベルのアクセス許可をサポートする 1 つ以上のアクションを選択した場合、エディタで datacatalog リソースが一覧表示されます。

6. [リソース] を選択して、ポリシーの特定のデータカタログを指定します。JSON データカタログポリシーの例については、「データカタログポリシーの例 (p. 66)」を参照してください。

7. 次のようにして datacatalog リソースを指定します。

arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>

8. [ポリシーの確認] を選択して、作成するポリシーの [名前] と [説明] (オプション) を入力します。ポリシー概要を確認して、意図したアクセス許可を付与したことを確認します。

9. [Create Policy (ポリシーの作成)] を選択して、新しいポリシーを保存します。10. このアイデンティティベースのポリシーをユーザー、グループ、またはロールにアタッチし、それら

のユーザー、グループ、またはロールがアクセスできる datacatalog リソースを指定します。

詳細については、「IAM ユーザーガイド」の次のトピックを参照してください。

• Amazon Athena のアクション、リソース、および条件キー• ビジュアルエディタでのポリシーの作成• IAM ポリシーの追加と削除• リソースへのアクセスコントロール

JSON データカタログポリシーの例については、「データカタログポリシーの例 (p. 66)」を参照してください。

すべての Amazon Athena アクションのリストについては、Amazon Athena API リファレンス で API アクション名を参照してください。

65

Page 75: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータカタログポリシーの例

データカタログポリシーの例このセクションには、データカタログに対するさまざまなアクションを有効にするために使用できるポリシーの例が含まれています。

データカタログは、Athena で管理されている IAM リソースです。そのため、データカタログポリシーでdatacatalog を入力として取るアクションを使用する場合、データカタログの ARN を次のように指定する必要があります。

"Resource": [arn:aws:athena:<region>:<user-account>:datacatalog/<datacatalog-name>]

<datacatalog-name> は、データカタログの名前です。例えば、test_datacatalog という名前のデータカタログの場合は、次のようにリソースとして指定します。

"Resource": ["arn:aws:athena:us-east-1:123456789012:datacatalog/test_datacatalog"]

すべての Amazon Athena アクションのリストについては、Amazon Athena API リファレンス で API アクション名を参照してください。IAM ポリシーの詳細については、IAM ユーザーガイド の「ビジュアルエディタでのポリシーの作成」を参照してください。ワークグループの IAM ポリシーの作成の詳細については、「 データカタログにアクセスするための IAM ポリシー (p. 65)」を参照してください。

• すべてのデータカタログへのフルアクセスに関するポリシーの例 (p. 66)• 指定したデータカタログへのフルアクセスに関するポリシーの例 (p. 66)• 指定したデータカタログをクエリするポリシーの例 (p. 67)• 指定したデータカタログの管理オペレーションに関するポリシーの例 (p. 68)• データカタログの一覧表示に関するポリシーの例 (p. 68)• データカタログのメタデータオペレーションに関するポリシーの例 (p. 68)

Example すべてのデータカタログへのフルアクセスに関するポリシーの例

次のポリシーでは、アカウントに存在している可能性があるすべてのデータカタログリソースへのフルアクセスを許可します。アカウントの他のすべてのユーザーのデータカタログを管理する必要があるユーザーにこのポリシーを使用することをお勧めします。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "athena:*" ], "Resource":[ "*" ] } ]}

Example 指定したデータカタログへのフルアクセスに関するポリシーの例

次のポリシーでは、datacatalogA という名前の 1 つの特定のデータカタログリソースへのフルアクセスを許可します。特定のデータカタログを完全に制御しているユーザーにこのポリシーを使用できます。

66

Page 76: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータカタログポリシーの例

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "athena:ListDataCatalogs", "athena:ListWorkGroups", "athena:GetExecutionEngine", "athena:GetExecutionEngines", "athena:GetNamespace", "athena:GetCatalogs", "athena:GetNamespaces", "athena:GetTables", "athena:GetTable" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery", "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution", "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery", "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution", "athena:DeleteWorkGroup", "athena:UpdateWorkGroup", "athena:GetWorkGroup", "athena:CreateWorkGroup" ], "Resource":[ "arn:aws:athena:us-east-1:123456789012:workgroup/*" ] }, { "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:DeleteDataCatalog", "athena:GetDataCatalog", "athena:GetDatabase", "athena:GetTableMetadata", "athena:ListDatabases", "athena:ListTableMetadata", "athena:UpdateDataCatalog" ], "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA" } ]}

Example 指定したデータカタログをクエリするポリシーの例

次のポリシーでは、ユーザーは指定した datacatalogA に対してクエリを実行することを許可されています。ユーザーは、データカタログの更新や削除など、データカタログ自体の管理タスクを実行することはできません。

67

Page 77: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータカタログポリシーの例

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "athena:StartQueryExecution" ], "Resource":[ "arn:aws:athena:us-east-1:123456789012:workgroup/*" ] }, { "Effect":"Allow", "Action":[ "athena:GetDataCatalog" ], "Resource":[ "arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA" ] } ]}

Example 指定したデータカタログの管理オペレーションに関するポリシーの例

次のポリシーでは、ユーザーはデータカタログ datacatalogA の作成、削除、詳細の取得、および更新を許可されています。

{ "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:GetDataCatalog", "athena:DeleteDataCatalog", "athena:UpdateDataCatalog" ], "Resource":[ "arn:aws:athena:us-east-1:123456789012:datacalog/datacatalogA" ]}

Example データカタログの一覧表示に関するポリシーの例

次のポリシーでは、すべてのデータカタログをすべてのユーザーが一覧表示できるようにします。

{ "Effect":"Allow", "Action":[ "athena:ListDataCatalogs" ], "Resource":"*"}

Example データカタログのメタデータオペレーションに関するポリシーの例

次のポリシーでは、データカタログに対するメタデータオペレーションを許可します。

{

68

Page 78: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータソースの管理

"Effect":"Allow", "Action":[ "athena:GetDatabase", "athena:GetTableMetadata", "athena:ListDatabases", "athena:ListTableMetadata" ], "Resource":"*"}

データソースの管理Athena コンソールの [データソース] ページを使用して、Athena データソースコネクタ、AWS Glue データカタログ、および Hive メタストアカタログタイプを含め、作成したデータソースを表示、編集、または削除できます。

データソースを表示するには

• 次のいずれかを行ってください。

• データソースのカタログ名を選択します。• カタログ名の横にあるボタンを選択し、[詳細の表示] を選択します。

詳細ページには、データソースを [編集] または [削除] するオプションがあります。

データソースを編集するには

1. 次のいずれかを行ってください。

• カタログ名の横にあるボタンを選択し、[編集] を選択します。• データソースのカタログ名を選択し、[編集] を選択します。

69

Page 79: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータソースの管理

2. メタストアの [編集] ページでは、データソースに別の Lambda 関数を選択するか、既存の関数の説明を変更できます。AWS Glue カタログを編集すると、AWS Glue コンソールで編集用に対応するカタログが開きます。

70

Page 80: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドODBC および JDBC ドライバーを使用した Amazon Athena への接続

3. [Save] を選択します。

データソースを削除するには

1. データソースの横にあるボタンまたはデータソースの名前を選択し、[削除] を選択します。メタストアデータソース、対応するデータカタログ、テーブルを削除すると警告が表示され、ビューがクエリエディタから削除されます。メタストアを使用した保存されたクエリは Athena で実行されなくなります。

2. [削除] を選択します。

ODBC および JDBC ドライバーを使用したAmazon Athena への接続

ビジネスインテリジェンスツールでデータを調査および視覚化するには、ODBC (Open DatabaseConnectivity) ドライバーまたは JDBC (Java Database Connectivity) ドライバーをダウンロード、インストール、および設定します。

トピック• JDBC ドライバーを介した Athena の使用 (p. 72)• ODBC での Amazon Athena との接続 (p. 73)

71

Page 81: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJDBC ドライバーを介した Athena の使用

JDBC ドライバーを介した Athena の使用JDBC 接続を使用して Athena をビジネスインテリジェンスツールや他のアプリケーション (SQLWorkbench など) に接続できます。これを行うには、Amazon S3 で次のリンクを使用して、Athena JDBCドライバーをダウンロード、インストール、および設定します。

JDBC ドライバーをダウンロードするリンクJDBC ドライバーバージョン 2.0.14 は、JDBC API 4.1 および 4.2 のデータ基準に準拠しています。ドライバーをダウンロードする前に、お使いの Java Runtime Environment (JRE) のバージョンを確認してください。JRE バージョンは、ドライバーで使用している JDBC API のバージョンによって異なります。ご不明な場合は、最新バージョンのドライバーをダウンロードしてください。

お使いのバージョンの JDK および JDBC データ基準に一致するドライバーをダウンロードします。

• AthenaJDBC41_2.0.14.jarは、JDBC 4.1 と互換性があり、JDK 7.0 以降が必要です。• AthenaJDBC42_2.0.14.jarは、JDBC 4.2 と互換性があり、JDK 8.0 以降が必要です。

JDBC ドライバーのリリースノート、ライセンス契約、および表示

必要なバージョンをダウンロードしたら、リリースノートをお読みになり、ライセンス契約および表示を確認してください。

• リリースノート• ライセンス契約• 通知• サードパーティーライセンス

JDBC ドライバーのドキュメント

ドライバー用の次のドキュメントをダウンロードします。

• JDBC ドライバーのインストールおよび設定ガイド。このガイドを使用してドライバーをインストールし、設定します。

• JDBC ドライバー移行ガイド。このガイドを使用して以前のバージョンから現在のバージョンに移行します。

Important

で複数のデータカタログに JDBC ドライバーを使用するには Athena (外部 Hive メタストアまたは (p. 34)フェデレーティッドクエリを使用する場合など)、JDBC 接続文字列 (p. 55)に含めます。MetadataRetrievalMethod=ProxyAPI

以前のバージョンの JDBC ドライバーから移行する現在の JDBC ドライバーバージョン 2.0.14 は、以前の JDBC ドライバーバージョン 2.0.9 のドロップインリプレースであり、JDBC ドライバーバージョン 2.0.9 と下位互換性があります。以下のステップで、ドライバーが動作することを確認する必要があります。

Important

JDBC ドライバーのバージョン 2.0.5 以降を使用するには、athena:GetQueryResultsStreamポリシーアクションを許可する JDBC ドライバーを使用して、IAM プリンシパルにアクセス権

72

Page 82: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドODBC での Amazon Athena との接続

限ポリシーをアタッチします。このポリシーアクションが API で直接公開されることはありません。これは、ストリーミング結果のサポートの一部として JDBC ドライバーでのみ使用されます。ポリシーの例については、「AWSQuicksightAthenaAccess管理ポリシー」を参照してください (p. 247)。さらに、クエリ結果のストリーミングに Athena が使用するポート 444 がアウトバウンドトラフィックに対して開かれていることを確認してください。PrivateLinkエンドポイントを使用してAthena に接続する場合は、PrivateLinkエンドポイントにアタッチされたセキュリティグループがポート 444 のインバウンドトラフィックに対して開いていることを確認します。ポート 444 がブロックされている場合は、エラーメッセージが表示される場合があります [Simba][AthenaJDBC](100123) An error has occurred. Exception during column initialization.バージョン 2.0.2 からバージョン 2.0.5 以降へのアップグレードの詳細については、JDBC ドライバー移行ガイドを参照してください。

以前のバージョンの JDBC ドライバーの詳細については、「以前のバージョンの JDBC ドライバーを使用する (p. 447)」を参照してください。

ドライバーをバージョン 1.x から 2.x に移行する場合は、既存の設定を新しい設定に移行する必要があります。バージョン 2.x のドライバーに移行することを強くお勧めします。詳細については、JDBC ドライバー移行ガイドを参照してください。

ODBC での Amazon Athena との接続次のリンクを使用して、Amazon Athena ODBC ドライバーライセンス契約、ODBC ドライバー、およびODBC ドキュメントをダウンロードします。

Amazon Athena ODBC ドライバーライセンス契約ライセンス契約

ODBC ドライバーのダウンロードリンクWindows

ドライバーのバージョン ダウンロードリンク

Windows 32 ビット用 ODBC 1.1.3 Windows 32 ビット ODBC Driver 1.1.3

Windows 64 ビット用 ODBC 1.1.3 Windows 64 ビット ODBC Driver 1.1.3

Linux

ドライバーのバージョン ダウンロードリンク

ODBC 1.1.3 (Linux 32 ビット用) Linux 32 ビット ODBC Driver 1.1.3

ODBC 1.1.3 (Linux 64 ビット用) Linux 64 ビット ODBC Driver 1.1.3

OSX

ドライバーのバージョン ダウンロードリンク

ODBC 1.1.3 (OSX 用) OSX ODBC ドライバー 1.1.3

73

Page 83: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドODBC での Amazon Athena との接続

Documentation

ドライバーのバージョン ダウンロードリンク

ODBC 1.1.3 のドキュメント ODBC Driver インストールおよび構成ガイド バージョン 1.1.3

ODBC 1.1.3 のリリース ノート ODBC Driver リリース ノート バージョン 1.1.3

以前のバージョンの ODBC ドライバーから移行する現在の ODBC ドライバー バージョン 1.1.3 は、以前のバージョンの ODBC ドライバー バージョン 1.0.5のドロップイン版です。次の必要な手順を使用してドライバーが確実に実行されるようにすると、ODBCドライバーバージョン 1.0.3 とも下位互換性があります。

Important

ODBC ドライバーバージョン 1.0.3 以降を使用するには、次の要件に従ってください。

• クエリ結果のストリーミングに Athena が使用するポート 444 を、アウトバウンドトラフィックに対して開いたままにします。_を使用するとき PrivateLink 接続するエンドポイント Athenaセキュリティグループが PrivateLink エンドポイントはポート444のインバウンドトラフィックに対してオープンです。

• Athena のポリシーのリストに athena:GetQueryResultsStream ポリシーアクションを追加する。このポリシーアクションは、API オペレーションで直接公開されていません。結果のストリーミングサポートの一部として ODBC ドライバーおよび JDBC ドライバーとともに使用するだけです。ポリシーの例については、以下を参照してください。AWSQuicksightAthenaAccess 管理対象ポリシー (p. 247).

以前のバージョンの ODBC ドライバー

ドライバ バージョン1.0.5 ダウンロードリンク

Windows 32 ビット版対応 ODBC 1.0.5 Windows 32 ビット ODBC ドライバー 1.0.5

Windows 64 ビット版対応 ODBC 1.0.5 Windows 64 ビット ODBC ドライバー 1.0.5

Linux 32 ビット対応 ODBC 1.0.5 Linux 32 ビット ODBC ドライバー 1.0.5

Linux 64 ビット対応 ODBC 1.0.5 Linux 64 ビット ODBC ドライバー 1.0.5

OSX 対応 ODBC 1.0.5 OSX ODBC ドライバー 1.0.5

ODBC 1.0.5 に関するドキュメント ODBC Driver インストールおよび構成ガイド バージョン 1.0.5

ドライバーバージョン 1.0.4 ダウンロードリンク

Windows 32 ビット版対応 ODBC 1.0.4 Windows 32 ビット ODBC ドライバー 1.0.4

Windows 64 ビット版対応 ODBC 1.0.4 Windows 64 ビット ODBC ドライバー 1.0.4

Linux 32 ビット対応 ODBC 1.0.4 Linux 32 ビット ODBC Driver 1.0.4

74

Page 84: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドODBC での Amazon Athena との接続

ドライバーバージョン 1.0.4 ダウンロードリンク

Linux 64 ビット対応 ODBC 1.0.4 Linux 64 ビット ODBC ドライバー 1.0.4

OSX 対応 ODBC 1.0.4 OSX ODBC ドライバー 1.0.4

ODBC 1.0.4 に関するドキュメント ODBC ドライバーのインストールおよび設定ガイドバージョン 1.0.4

ドライバーバージョン 1.0.3 ダウンロードリンク

Windows 32 ビット版対応 ODBC 1.0.3 Windows 32 ビット ODBC ドライバー 1.0.3

Windows 64 ビット版対応 ODBC 1.0.3 Windows 64 ビット ODBC ドライバー 1.0.3

Linux 32 ビット対応 ODBC 1.0.3 Linux 32 ビット ODBC ドライバー 1.0.3

Linux 64 ビット対応 ODBC 1.0.3 Linux 64 ビット ODBC ドライバー 1.0.3

OSX 対応 ODBC 1.0.3 OSX ODBC ドライバー 1.0

ODBC 1.0.3 に関するドキュメント ODBC ドライバーのインストールおよび設定ガイドバージョン 1.0.3

ドライバーバージョン 1.0.2 ダウンロードリンク

Windows 32 ビット版対応 ODBC 1.0.2 Windows 32 ビット ODBC ドライバー 1.0.2

Windows 64 ビット版対応 ODBC 1.0.2 Windows 64 ビット ODBC ドライバー 1.0.2

Linux 32 ビット対応 ODBC 1.0.2 Linux 32 ビット ODBC ドライバー 1.0.2

Linux 64 ビット対応 ODBC 1.0.2 Linux 64 ビット ODBC ドライバー 1.0.2

OSX 対応 ODBC 1.0 OSX ODBC ドライバー 1.0

ODBC 1.0.2 に関するドキュメント ODBC ドライバーのインストールおよび設定ガイドバージョン 1.0.2

75

Page 85: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータベースの作成

データベースとテーブルの作成Amazon Athena では、データ定義言語 (DDL) ステートメントのサブセットおよび ANSI SQL 関数と演算子をサポートしており、これを使用してデータが Amazon Simple Storage Service にある外部テーブルを定義およびクエリできます。

Athena でデータベースやテーブルを作成する際、スキーマとデータの場所を記述し、テーブル内のデータをリアルタイムでクエリできるように準備します。

クエリのパフォーマンスを向上させてコストを削減するために、データを分割し、オープンソースの列指向形式 (Apache Parquet や ORC など) を使用して Amazon S3 に保存することをお勧めします。

トピック• Athena でのデータベースの作成 (p. 76)• Athena でのテーブルの作成 (p. 78)• テーブル、データベース、および列の名前 (p. 85)• 予約キーワード (p. 86)• Amazon S3 のテーブルの場所 (p. 87)• 列指向ストレージ形式 (p. 89)• 列指向形式への変換 (p. 89)• データのパーティション分割 (p. 93)• Amazon Athena を使用したパーティション射影 (p. 98)

Athena でのデータベースの作成Athena のデータベースは、テーブルを作成する先の論理グループです。Athena コンソールのクエリエディターでデータベースを作成するのは簡単です。

Athena クエリエディタを使用してデータベースを作成するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [Query Editor (クエリエディター)] タブで、Hive データ定義言語 (DDL) コマンドを入力します

CREATE DATABASE myDataBase。myDatabase は、作成するデータベースの名前に置き換えます。

76

Page 86: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータベースの作成

3. [Run Query (クエリの実行)] を選択するか、Ctrl+ENTER を押します。4. データベースを現在のデータベースにするには、[Database (データベース) ] メニューから選択しま

す。

77

Page 87: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドテーブルの作成

Athena でのテーブルの作成DDL ステートメントを Athena コンソールで実行するには、JDBC または ODBC ドライバーを使用するか、Athena [Add table (テーブルの追加)] ウィザード (p. 82) を使用します。

Athena で新しいテーブルスキーマを作成すると、このスキーマは Athena のデータカタログに保存されて、クエリの実行時に使用されます。

Athenaでは、スキーマオンリードというアプローチを使用します。このアプローチでは、クエリの実行時にスキーマがデータに射影されます。これにより、データのロードや変換が不要になります。

Athena は、Amazon S3 内のデータを変更しません。

Athena では、Apache Hive を使用してテーブルを定義し、基本的にはテーブルの論理名前空間であるデータベースを作成します。

78

Page 88: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド考慮事項と制約事項

Athena でデータベースやテーブルを作成するとは、単にスキーマと Amazon S3 内のテーブルデータの場所を記述することに過ぎません。データはクエリ実行時に読み取られます。データは、データベースやテーブルのスキーマ定義と一緒に保存されないため、データベースやテーブルの意味が従来のリレーショナルデータベースシステムの場合とは少し異なります。

クエリを実行する場合は、標準の SQL を使用してテーブルをクエリします。そのときにデータが読み取られます。データベースとテーブルの作成方法に関するガイダンスは、Apache Hive のドキュメントで参照できますが、以下では Athena 専用のガイダンスを提供します。

クエリ文字列の最大長は 256 KB です。

Hive では、シリアライザー/デシリアライザー (SerDe) ライブラリの使用を通じて複数のデータ形式をサポートします。正規表現を使用して複雑なスキーマを定義することもできます。サポートされているSerDeライブラリのリストについては、「」を参照してくださいサポートされる SerDes およびデータ形式 (p. 375)。

考慮事項と制約事項次に、Athena のテーブルに関する重要な制限事項と考慮事項を示します。

Athena のテーブルと Amazon S3 のデータに関する要件テーブルを作成するときに、LOCATION 句を使用して基となるデータの格納先である Amazon S3 バケットの場所を指定します。以下の点に考慮してください。

• バージョニングされた Amazon S3 バケットでは Athena は最新バージョンのデータのみをクエリできます。以前のバージョンのデータはクエリできません。

• Amazon S3 内のデータを使用する適切なアクセス許可が必要です。詳細については、Amazon S3 にアクセスします (p. 249) を参照してください。

• Athena は、LOCATION 句で指定された同じバケットで複数のストレージクラスに保存されたオブジェクトのクエリをサポートします。たとえば、Amazon S3 でさまざまなストレージクラス(Standard、Standard-IA、Intelligent-Tiering) に保存されたオブジェクトでデータをクエリできます。

• Athena では、リクエスタ支払いバケットがサポートされています。Athena でクエリするソースデータを含むバケットに対してリクエスタ支払いを有効にする方法については、「ワークグループの作成 (p. 341)」を参照してください。

• Athenaでは、 GLACIERまたは DEEP GLACIER ストレージクラスでのデータのクエリはサポートされません。Amazon S3ライフサイクルポリシーに基づいて、GLACIERストレージクラスに移行されたオブジェクトは無視されます。DEEP GLACIERストレージクラス内のオブジェクトをクエリすると、エラーメッセージ が生成されます。The operation is not valid for the object's storage class.

ストレージクラスの詳細については、 の「ストレージクラス」、「Amazon S3 のオブジェクトのストレージクラスの変更」、「GLACIER ストレージクラスへの移行 (オブジェクトのアーカイブ)」、「リクエスタ支払いバケット」を参照してくださいAmazon Simple Storage Service 開発者ガイド。

• Amazon S3 バケットに対してクエリを発行する場合に大量のオブジェクトやデータがパーティション分割されていない場合、このようなクエリは Amazon S3 の取得リクエスト率制限に影響を及ぼす場合があり、Amazon S3 の例外が発生することがあります。エラーを防ぐには、データをパーティション分割します。また、Amazon S3 リクエスト率のチューニングを検討してください。詳細については、「リクエスト率およびリクエストパフォーマンスに関する留意事項」を参照してください。

サポートされている関数Athena のクエリでサポートされる関数は Presto 内にある関数です。詳細については、Presto ドキュメントの「Presto 0.172 関数と演算子」を参照してください。

79

Page 89: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue または Athena コン

ソールを使用したテーブルの作成

トランザクションデータ変換はサポートされないAthena は、テーブルデータに対するトランザクションベースのオペレーション (Hive や Presto の該当するオペレーションなど) をサポートしません。サポートされないキーワードの詳細なリストについては、「サポートされない DDL (p. 412)」を参照してください。

テーブルの状態を変更するオペレーションは ACID に準拠するテーブルを作成、更新、または削除する場合、これらのオペレーションは ACID に準拠することが保証されます。たとえば、複数のユーザーやクライアントが同時に既存のテーブルを作成または変更しようとした場合、成功するのは 1 つのユーザーまたはクライアントのみです。

すべてのテーブルは EXTERNAL であるCREATE TABLE を EXTERNAL キーワードなしで使用すると、Athena でエラーが発生します。EXTERNALキーワードが設定されたテーブルのみを作成できます。常に EXTERNAL キーワードを使用することをお勧めします。Athena でテーブルを削除すると、テーブルメタデータのみが削除され、データは Amazon S3に残ります。

AWS Glue または Athena コンソールを使用したテーブルの作成Athena でテーブルを作成するには、AWS Glue、[テーブルの追加] ウィザードを使用するか、Athena クエリエディタで DDL ステートメントを実行します。

AWS Glue データカタログを使用してテーブルを作成するには1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. クエリエディターの [Database (データベース)] で、 [Create table (テーブルの作成)] を選択し、AWS

Glue クローラから選択します。

80

Page 90: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue または Athena コン

ソールを使用したテーブルの作成

3. [AWS Glue に移動してクローラを設定する] ダイアログボックスで、[Continue (続行)] を選択します。

4. AWS Glue コンソールの手順に従って、クローラを追加します。

詳細については、「AWS Glue クローラの使用 (p. 22)」を参照してください。

81

Page 91: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue または Athena コン

ソールを使用したテーブルの作成

[Athena テーブルの追加] ウィザードを使用してテーブルを作成するには1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. クエリエディタのデータベース表示の下で、[Create table (テーブルの作成)] を選択し、S3 バケット

データから選択します。

3. [テーブルの追加] ウィザードで、手順に従ってテーブルを作成します。

82

Page 92: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue または Athena コン

ソールを使用したテーブルの作成

Hive DDL を使用してテーブルを作成するには1. [Database (データベース)] メニューから、テーブルを作成するデータベースを選択します。CREATE

TABLE ステートメントでデータベースを指定しない場合、テーブルはクエリエディターで現在選択されているデータベースに作成されます。

83

Page 93: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue または Athena コン

ソールを使用したテーブルの作成

2. 次のようなステートメントを入力し、[Run Query (クエリの実行)] を選択するか、Ctrl+ENTER を押します。

CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` Date, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, OS String, Browser String, BrowserVersion String

84

Page 94: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドテーブル、データベース、および列の名前

) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'WITH SERDEPROPERTIES ("input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$") LOCATION 's3://athena-examples-MyRegion/cloudfront/plaintext/';

テーブルが作成されたら、データに対してクエリを実行できます。

テーブル、データベース、および列の名前Athena での命名には以下のヒントを参考にしてください。

Athena のテーブル名とテーブルの列名は小文字にする必要があります。Apache Spark を使用する場合は、テーブル名とテーブルの列名を小文字にする必要があります。Athenaでは大文字と小文字を区別せず、テーブル名と列名を小文字に変換しますが、Spark には最初から小文字のテーブル名と列名が必要です。

大小文字が混在する列名 (profileURI) や大文字の列名が含まれているクエリは無効です。

特殊文字アンダースコア (_) を除く特殊文字はサポートされていません。詳細については、Apache HiveLanguageManual DDL ドキュメントを参照してください。

Important

アンダースコアを除く特殊文字を含むテーブル、ビュー、データベース、または列の名前は、バックティック (`) 文字で囲むことで作成できますが、それを参照する後続の DDL または DMLクエリは失敗する可能性があります。

アンダースコアで始まる名前テーブルを作成する場合は、バックティックを使用して、アンダースコアで始まるテーブル、ビュー、または列名を囲みます。たとえば、 と指定します。

CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`( `_id` string, `_index` string)LOCATION 's3://my-athena-data/'

数字で始まるテーブル、ビュー、または列の名前実行時 SELECT、 CTAS、または VIEW テーブル、ビュー、または列名などの識別子の周囲に、数字で始まる引用符を付けます。たとえば、 と指定します。

CREATE OR REPLACE VIEW "123view" ASSELECT "123columnone", "123columntwo"FROM "234table"

予約語Athena の特定の予約語は、エスケープする必要があります。DDL ステートメントで予約キーワードをエスケープするには、バックティック (`) で囲みます。SQL の SELECT ステートメントや ビュー (p. 120)のクエリで予約キーワードをエスケープするには、二重引用符 ('') で囲みます。

85

Page 95: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド予約キーワード

詳細については、予約キーワード (p. 86) を参照してください。

予約キーワードAthena で予約キーワードを含むクエリを実行する場合、特殊文字で囲んでエスケープする必要があります。このトピックのリストを使用して、Athena で予約されているキーワードを確認してください。

DDL ステートメントで予約キーワードをエスケープするには、バックティック (`) で囲みます。SQL のSELECT ステートメントや ビュー (p. 120)でのクエリで予約キーワードをエスケープするには、二重引用符 ('') で囲みます。

• DDL ステートメントの予約キーワードのリスト (p. 86)• SQL SELECT ステートメントの予約キーワードのリスト (p. 86)• 予約キーワードを含むクエリの例 (p. 87)

DDL ステートメントの予約キーワードのリストAthena では、DDL ステートメントで以下にリストされた予約キーワードを使用します。Athena でこれらをエスケープせずに使用すると、エラーが発生します。予約キーワードをエスケープするには、バックティック (`) で囲みます。

DDL 予約キーワードをバックティック (`) で囲まずに DDL ステートメントで識別子名として使用することはできません。

ALL, ALTER, AND, ARRAY, AS, AUTHORIZATION, BETWEEN, BIGINT, BINARY, BOOLEAN, BOTH, BY, CASE, CASHE, CAST, CHAR, COLUMN, CONF, CONSTRAINT, COMMIT, CREATE, CROSS, CUBE, CURRENT, CURRENT_DATE, CURRENT_TIMESTAMP, CURSOR, DATABASE, DATE, DAYOFWEEK, DECIMAL, DELETE, DESCRIBE, DISTINCT, DOUBLE, DROP, ELSE, END, EXCHANGE, EXISTS, EXTENDED, EXTERNAL, EXTRACT, FALSE, FETCH, FLOAT, FLOOR, FOLLOWING, FOR, FOREIGN, FROM, FULL, FUNCTION, GRANT, GROUP, GROUPING, HAVING, IF, IMPORT, IN, INNER, INSERT, INT, INTEGER,INTERSECT, INTERVAL, INTO, IS, JOIN, LATERAL, LEFT, LESS, LIKE, LOCAL, MACRO, MAP, MORE, NONE, NOT, NULL, NUMERIC, OF, ON, ONLY, OR, ORDER, OUT, OUTER, OVER, PARTIALSCAN, PARTITION, PERCENT, PRECEDING, PRECISION, PRESERVE, PRIMARY, PROCEDURE, RANGE, READS, REDUCE, REGEXP,REFERENCES, REVOKE, RIGHT, RLIKE, ROLLBACK, ROLLUP, ROW, ROWS, SELECT, SET, SMALLINT, START,TABLE, TABLESAMPLE, THEN, TIME, TIMESTAMP, TO, TRANSFORM, TRIGGER, TRUE, TRUNCATE, UNBOUNDED,UNION, UNIQUEJOIN, UPDATE, USER, USING, UTC_TIMESTAMP, VALUES, VARCHAR, VIEWS, WHEN, WHERE, WINDOW, WITH

SQL SELECT ステートメントの予約キーワードのリストAthena では、SQL の SELECT ステートメントおよびビューでのクエリで、以下の予約キーワードを使用します。

これらのキーワードを識別子として使用する場合、クエリステートメントでは二重引用符 ('') で囲む必要があります。

ALTER, AND, AS, BETWEEN, BY, CASE, CAST,CONSTRAINT, CREATE, CROSS, CUBE, CURRENT_DATE, CURRENT_PATH, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, DEALLOCATE, DELETE, DESCRIBE, DISTINCT, DROP, ELSE, END, ESCAPE, EXCEPT,

86

Page 96: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド予約ワードを含むクエリの例

EXECUTE, EXISTS, EXTRACT, FALSE, FIRST, FOR, FROM, FULL, GROUP, GROUPING, HAVING, IN, INNER, INSERT, INTERSECT, INTO, IS, JOIN, LAST, LEFT, LIKE, LOCALTIME, LOCALTIMESTAMP, NATURAL, NORMALIZE, NOT, NULL, ON, OR, ORDER, OUTER, PREPARE, RECURSIVE, RIGHT, ROLLUP, SELECT, TABLE, THEN, TRUE, UNESCAPE, UNION, UNNEST, USING, VALUES, WHEN, WHERE, WITH

予約ワードを含むクエリの例次の例のクエリでは、バックティック (') を使用して DDL に関連する予約キーワード partition および dateをエスケープします。これらはテーブル名および列の名前の 1 つに使用されています。

CREATE EXTERNAL TABLE `partition` (`date` INT, col2 STRING)PARTITIONED BY (year STRING)STORED AS TEXTFILELOCATION 's3://test_bucket/test_examples/';

次のクエリ例では、ALTER TABLE ADD PARTITION と ALTER TABLE DROP PARTITION ステートメントに、DDL に関連する予約キーワードを含む列名が含まれています。DDL 予約キーワードは、バックティック (') で囲まれます。

ALTER TABLE test_table ADD PARTITION (`date` = '2018-05-14')

ALTER TABLE test_table DROP PARTITION (`partition` = 'test_partition_value')

次のクエリ例では、予約キーワード (end) が SELECT ステートメントの識別子として含まれています。キーワードは二重引用符でエスケープされます。

SELECT * FROM TestTableWHERE "end" != nil;

次のクエリ例では、SELECT ステートメントに予約キーワード (first) が含まれています。キーワードは二重引用符でエスケープされます。

SELECT "itemId"."first" FROM testTable LIMIT 10;

Amazon S3 のテーブルの場所Athena で CREATE TABLE クエリを実行する場合は、AWS Glue Data Catalog にテーブルを登録します。Athena の古い内部カタログを使用している場合は、AWS Glue Data Catalog に アップグレード (p. 30)することを強くお勧めします。

次の例に示すように、Amazon S3 でデータへのパスを指定するには、LOCATION プロパティを使用します。

CREATE EXTERNAL TABLE `test_table`(

87

Page 97: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドテーブルの場所とパーティション

...)ROW FORMAT ...STORED AS INPUTFORMAT ...OUTPUTFORMAT ...LOCATION s3://bucketname/folder/

• バケットの命名についての詳細は、「 バケットの制限と制限 を Amazon Simple Storage Service 開発者ガイド.

• のフォルダの使用方法については、 Amazon S3、参照 フォルダの使用 を Amazon Simple StorageService コンソールユーザーガイド.

Amazon S3 の LOCATION は、テーブルを表すすべてのファイルを指定します。Important

Athena リード すべて 保存されたデータ s3://bucketname/folder/'. データがある場合、 ない 欲求 Athena 読み取り、同じ Amazon S3 フォルダーを必要なデータとして Athena 読みます。パーティションを使用している場合、パーティション内のデータが Athena によってスキャンされるようするには、WHERE フィルタにそのパーティションが含まれている必要があります。詳細については、テーブルの場所とパーティション (p. 88)を参照してください。

CREATE TABLE ステートメントで LOCATION を指定する場合は、次のガイドラインを使用します。

• 末尾にスラッシュを使用します。

使用可能:

s3://bucketname/folder/

• 以下の項目をデータの LOCATION の指定に使用しないでください。• ファイルの場所を指定するために、ファイル名、アンダースコア、ワイルドカード、または glob パ

ターンを使用しないでください。• s3.amazon.com などの完全な HTTP 表記を Amazon S3 バケットのパスに追加しません。• 指定しないでください。 Amazon S3 アクセス・ポイント を LOCATION 条項。テーブルの場所は

URI としてのみ指定できます。• 次のような空のフォルダは使用しないでください。 // 次のようにパスで指定しま

す。S3://bucketname/folder//folder/. これは有効な Amazon S3 パス、 Athena は許可せず、s3://bucketname/folder/folder/、余分な /.

使用しない:

s3://path_to_buckets3://path_to_bucket/*s3://path_to_bucket/mySpecialFile.dats3://bucketname/prefix/filename.csvs3://test-bucket.s3.amazon.comS3://bucket/prefix//prefix/arn:aws:s3:::bucketname/prefixs3://arn:aws:s3:<region>:<account_id>:accesspoint/<accesspointname>https://<accesspointname>-<number>.s3-accesspoint.<region>.amazonaws.com

テーブルの場所とパーティションソースデータは、一連の列に基づいて、パーティション と呼ばれる Amazon S3 フォルダにグループ化できます。たとえば、これらの列が、特定のレコードが作成された年、月、日を表す場合があります。

88

Page 98: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド列指向ストレージ形式

テーブルを作成するときに、パーティション分割されるように選択できます。いつ Athena は、パーティション化されていないテーブルに対して SQL クエリを実行します。 LOCATION プロパティをテーブル定義のベースパスとして使用して、使用可能なすべてのファイルを一覧表示し、スキャンします。ただし、パーティション分割されたテーブルでクエリを実行する前に、パーティション情報で AWS GlueData Catalog を更新する必要があります。この情報は、特定のパーティション内のファイルのスキーマとAmazon S3 のパーティションに含まれる LOCATION ファイルのスキーマを表します。

• どのように AWS Glue クローラーはパーティションを追加します。 を参照 クローラーは、パーティションの作成時期をどのように決定しますか? を AWS Glue 開発者ガイド.

• 既存のパーティションでデータのテーブルを作成するようにクローラを設定する方法については、クローラーでの複数のデータソースの使用 (p. 23)を参照してください。

• テーブルのパーティションを Athena で直接作成することもできます。詳細については、「データのパーティション分割 (p. 93)」を参照してください。

いつ Athena は、パーティション化されたテーブルでクエリを実行し、 WHERE クエリの句。パーティション分割された列が使用された場合、Athena は、指定されたパーティション列と一致するパーティションの仕様を返すよう AWS Glue Data Catalog にリクエストします。パーティションの仕様には、Athena がデータを読み取るときに使用する Amazon S3 プレフィックスを指定する LOCATION プロパティが含まれています。この場合、このプレフィックスに保存されたデータのみがスキャンされます。WHERE 句でパーティション化された列を使用しない場合、Athena はテーブルのパーティションに属するすべてのファイルをスキャンします。

Athena でクエリのパフォーマンスを向上させ、クエリのコストを削減するパーティションの使用例については、Amazon Athena のパフォーマンスチューニング Tips トップ 10 を参照してください。

列指向ストレージ形式Apache Parquet や ORC は、データを高速に取得できるように最適化された、AWS 分析アプリケーションで使用されている、列指向ストレージ形式です。

列指向ストレージ形式には以下の特性があるため、Athena での使用に適しています。

• 列のデータ型に合わせて選択された圧縮アルゴリズムによる、列ごとの圧縮により、Amazon S3 ストレージ領域を節約でき、クエリ処理時のディスク容量と I/O を軽減できます。

• Parquet および ORC での述語プッシュダウンにより、Athena クエリで必要なブロックだけを取得できるため、クエリのパフォーマンスが改善されます。Athena クエリでデータから特定の列値を取得する場合に、データブロック述語からの統計 (最大値や最小値など) を使用して、そのブロックを読み取るかスキップするかを判断できます。

• Parquet および ORC でのデータの分割により、Athena がデータの読み取りを複数のリーダーに分割して、クエリ処理時の並列処理を向上させることができます。

既存の raw データを他のストレージ形式から Parquet または ORC に変換するには、Athena で CREATETABLE AS SELECT (CTAS) (p. 126) クエリを実行し、データストレージ形式として Parquet またはORC を指定するか、または AWS Glue クローラを使用します。

列指向形式への変換データをオープンソースの列指向形式 (Apache Parquet や ORC など) に変換すると、Amazon Athena のクエリパフォーマンスが向上します。

Note

CREATE TABLE AS (CTAS) (p. 133) クエリを使用して、Parquet や ORC などの列指向形式への変換を 1 つのステップで実行します。

89

Page 99: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドOverview

これを既存の Amazon S3 のデータソースに対して行うには、Amazon EMR でクラスターを作成し、それを Hive を使用して変換します。以下の AWS CLI を使用した例では、スクリプトと Amazon S3 に保存されたデータを使用して、この変換方法を示しています。

OverviewEMR クラスターを使用して列指向形式に変換するプロセスは、以下のとおりです。

1. Hive をインストール済みの EMR クラスターを作成します。2. cluster create ステートメントの step セクションで、Amazon S3 内の保存されたスクリプトを指定して

入力データをポイントし、Amazon S3 の場所に出力データを列指向形式で作成します。この例のクラスターは自動終了します。

Note

このスクリプトは Amazon EMR バージョン 4.7 に基づいており、現在のバージョンに更新する必要があります。バージョンの詳細に関しては、「Amazon EMR リリース ガイド」を参照してください。

スクリプト全体は Amazon S3 の以下の場所にあります。

s3://athena-examples-myregion/conversion/write-parquet-to-s3.q

以下に、CREATE TABLE スニペットで始まるスクリプトの例を示します。

ADD JAR /usr/lib/hive-hcatalog/share/hcatalog/hive-hcatalog-core-1.0.0-amzn-5.jar;CREATE EXTERNAL TABLE impressions ( requestBeginTime string, adId string, impressionId string, referrer string, userAgent string, userCookie string, ip string, number string, processId string, browserCookie string, requestEndTime string, timers struct<modelLookup:string, requestTime:string>, threadId string, hostname string, sessionId string)PARTITIONED BY (dt string)ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe'with serdeproperties ( 'paths'='requestBeginTime, adId, impressionId, referrer, userAgent, userCookie, ip' )LOCATION 's3://MyRegion.elasticmapreduce/samples/hive-ads/tables/impressions/' ;

Note

置換 MyRegion を LOCATION 句に、クエリを実行する地域を指定します。たとえば、コンソールが us-west-1 にある場合は、s3://us-west-1.elasticmapreduce/samples/hive-ads/tables/ とします。

これにより、クラスターの Hive にテーブルが作成され、Amazon EMR サンプルバケットにあるサンプルが使用されます。

3. オン Amazon EMR リリース4.7.0には、 ADD JAR 適切な JsonSerDe. 指定試料データは、次のようになります。

90

Page 100: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドOverview

{ "number": "977680", "referrer": "fastcompany.com", "processId": "1823", "adId": "TRktxshQXAHWo261jAHubijAoNlAqA", "browserCookie": "mvlrdwrmef", "userCookie": "emFlrLGrm5fA2xLFT5npwbPuG7kf6X", "requestEndTime": "1239714001000", "impressionId": "1I5G20RmOuG2rt7fFGFgsaWk9Xpkfb", "userAgent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; InfoPa", "timers": { "modelLookup": "0.3292", "requestTime": "0.6398" }, "threadId": "99", "ip": "67.189.155.225", "modelId": "bxxiuxduad", "hostname": "ec2-0-51-75-39.amazon.com", "sessionId": "J9NOccA3dDMFlixCuSOtl9QBbjs6aS", "requestBeginTime": "1239714000000"}

4. Hive で、パーティションからデータをロードし、スクリプトで以下を実行します。

MSCK REPAIR TABLE impressions;

次に、スクリプトはテーブルを作成し、データを Parquet 形式ファイルで Amazon S3 に保存します。

CREATE EXTERNAL TABLE parquet_hive ( requestBeginTime string, adId string, impressionId string, referrer string, userAgent string, userCookie string, ip string) STORED AS PARQUETLOCATION 's3://myBucket/myParquet/';

データは、impressions テーブルから parquet_hive 内に挿入されます。

INSERT OVERWRITE TABLE parquet_hiveSELECTrequestbegintime,adid,impressionid,referrer,useragent,usercookie,ip FROM impressions WHERE dt='2009-04-14-04-05';

スクリプトでは、上の impressions テーブルで日付 2009-04-14-04-05 以降の列を Parquet 形式ファイルの s3://myBucket/myParquet/ に保存します。

5. EMR クラスターが終了したら、Athena でテーブルを作成し、このクラスターで生成した形式のデータを使用します。

91

Page 101: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド開始する前に

開始する前に• EMR クラスターを作成する必要があります。Amazon EMR の詳細については、「Amazon EMR 管理ガ

イド」を参照してください。• 「セットアップ (p. 6)」の手順に従います。

例: EMRクラスタを使用したデータのParquetへの変換1. AWS CLI を使用してクラスターを作成します。AWS CLI をインストールする必要がある場合は、AWS

Command Line Interface ユーザーガイド の「AWS Command Line Interface のインストール」を参照してください。

2. Amazon EMR を使用するにはロールが必要です。以前に Amazon EMR を使用したことがない場合は、次のコマンドを使用してデフォルトのロールを作成します。

aws emr create-default-roles

3. emr-4.7.0 リリースを使用して Amazon EMR クラスターを作成し、次の AWS CLI emr create-cluster コマンドを使用してデータを変換します。

export REGION=us-west-1export SAMPLEURI=s3://${REGION}.elasticmapreduce/samples/hive-ads/tables/impressions/export S3BUCKET=myBucketName

aws emr create-cluster --applications Name=Hadoop Name=Hive Name=HCatalog \--ec2-attributes KeyName=myKey,InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-mySubnetId \--service-role EMR_DefaultRole \--release-label emr-4.7.0 \--instance-type \m4.large \--instance-count 1 \--steps Type=HIVE,Name="Convert to Parquet",ActionOnFailure=TERMINATE_CLUSTER,Args=[-f,"s3://athena-examples/conversion/write-parquet-to-s3.q",-hiveconf,INPUT="${SAMPLEURI}",-hiveconf,OUTPUT="s3://${S3BUCKET}/myParquet",-hiveconf,REGION=${REGION}] \--region ${REGION} \--auto-terminate

詳細については、Amazon EMR 管理ガイド の「Amazon EMR の IAM ロールの作成と使用」を参照してください。

リクエストが成功すると、クラスター ID が提供されます。4. AWS マネジメントコンソールを使用するか、AWS CLI でクラスター ID と list-steps サブコマンドを使

用して、クラスターの進捗状況をモニタリングします。

aws emr list-steps --cluster-id myClusterID

スクリプトでステップのステータスを確認します。COMPLETED の場合は、変換が完了済みであり、データのクエリを実行する準備が整っています。

5. EMR クラスターで作成したのと同じテーブルを作成します。

92

Page 102: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータのパーティション分割

上と同じステートメントを使用できます。Athena にログインし、このステートメントを [クエリエディタ] ウィンドウに入力します。

CREATE EXTERNAL TABLE parquet_hive ( requestBeginTime string, adId string, impressionId string, referrer string, userAgent string, userCookie string, ip string) STORED AS PARQUETLOCATION 's3://myBucket/myParquet/';

[Run Query] を選択します。6. 次のクエリを実行し、このデータをクエリできることを確認します。

SELECT * FROM parquet_hive LIMIT 10;

または、[Catalog] でテーブル名の横にある表示 (目) アイコンを選択することもできます。

結果として、次のような出力が表示されます。

データのパーティション分割データをパーティション分割することで、各クエリでスキャンするデータの量を制限し、パフォーマンスの向上とコストの削減を達成できます。Athena では、データのパーティション分割に Hive を使用します。すべてのキーでデータをパーティション化できます。一般的な方法では、時間に基づいてデータをパーティション分割します。これにより、通常、複数レベルのパーティション構成となります。たとえば、1 時間ごとに配信されるデータを年、月、日、時間でパーティション分割できます。別の例として、さまざまなソースから配信されるデータを 1 日 1 回ロードする場合、データソースと日付でパーティション分割できます。

考慮事項と制約事項パーティション分割を使用する場合は、次の点に注意してください。

93

Page 103: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション分割されたデータ

を使用するテーブルの作成とロード

• パーティション分割されたテーブルをクエリする場合に、WHERE 句でパーティションを指定すると、指定されたパーティションのデータのみが Athena によってスキャンされます。詳細については、テーブルの場所とパーティション (p. 88)を参照してください。

• Amazon S3 バケットに対してクエリを発行する場合に大量のオブジェクトやデータがパーティション分割されていないと、このようなクエリは Amazon S3 の GET リクエスト率制限に影響を及ぼす場合があり、Amazon S3 の例外が発生することがあります。エラーを防ぐには、データをパーティション分割します。また、Amazon S3 リクエスト率のチューニングを検討してください。詳細については、以下を参照してください。 ベストプラクティス設計パターン: 最適化 Amazon S3 パフォーマンス .

• Athena で使用するパーティションの場所では、s3 プロトコル (s3://bucket/folder/ など) を使用する必要があります。Athena では、他のプロトコル (s3a://bucket/folder/ など) を使用する場所があると、その場所が含まれているテーブルに対して MSCK REPAIR TABLE クエリを実行したときに、クエリが失敗します。

パーティション分割されたデータを使用するテーブルの作成とロードパーティションを使用するテーブルを作成するには、CREATE TABLE (p. 420) ステートメントで定義する必要があります。使用 PARTITIONED BY 次の例のように、データを分割するキーを定義します。LOCATION パーティション化されたデータのルートの場所を指定します。

CREATE EXTERNAL TABLE users (first string,last string,username string)PARTITIONED BY (id string)STORED AS parquetLOCATION 's3://bucket/folder/'

テーブルを作成した後、クエリ用にパーティションにデータをロードします。Hive と互換性のあるデータの場合、MSCK REPAIR TABLE (p. 429) を実行します。Hive と互換性のないデータの場合、ALTERTABLE ADD PARTITION (p. 415) を使用してパーティションを手動で追加します。

パーティション分割されたデータとパーティション分割されていないデータのクエリ用の準備以下のセクションでは、2 つのシナリオについて説明します。

1. データはパーティション分割済みで Amazon S3 に保存されており、このデータに Athena からアクセスする必要がある場合。

2. データがパーティション分割されていない場合。

シナリオ 1 データはすでにパーティション化され、Hive 形式でS3 に保存されていますパーティション分割されたデータの保存各パーティションは、Amazon S3 内の別個のフォルダに保存されます。以下は、サンプル広告のインプレッション数の一部を示しています。

aws s3 ls s3://elasticmapreduce/samples/hive-ads/tables/impressions/

94

Page 104: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション分割されたデータとパーティ

ション分割されていないデータのクエリ用の準備

PRE dt=2009-04-12-13-00/ PRE dt=2009-04-12-13-05/ PRE dt=2009-04-12-13-10/ PRE dt=2009-04-12-13-15/ PRE dt=2009-04-12-13-20/ PRE dt=2009-04-12-14-00/ PRE dt=2009-04-12-14-05/ PRE dt=2009-04-12-14-10/ PRE dt=2009-04-12-14-15/ PRE dt=2009-04-12-14-20/ PRE dt=2009-04-12-15-00/ PRE dt=2009-04-12-15-05/

この例では、ログを保存する列名 (dt) が日付、時、分の増分と等しくなるように設定されています。DDLで親フォルダの場所、スキーマ、およびパーティション分割した列の名前を指定すると、Athena はこれらのサブフォルダでデータをクエリします。

テーブルの作成このデータからテーブルを作成するには、次の Athena DDL ステートメントに示すように「dt」と共にパーティションを作成します。

CREATE EXTERNAL TABLE impressions ( requestBeginTime string, adId string, impressionId string, referrer string, userAgent string, userCookie string, ip string, number string, processId string, browserCookie string, requestEndTime string, timers struct<modelLookup:string, requestTime:string>, threadId string, hostname string, sessionId string)PARTITIONED BY (dt string)ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe' with serdeproperties ( 'paths'='requestBeginTime, adId, impressionId, referrer, userAgent, userCookie, ip' )LOCATION 's3://elasticmapreduce/samples/hive-ads/tables/impressions/' ;

このテーブルでは、Hive のネイティブの JSON シリアライザー/デシリアライザーを使用して Amazon S3に保存された JSON データを読み取ります。サポートされる形式の詳細については、「サポートされるSerDes およびデータ形式 (p. 375)」を参照してください。

で前述のステートメントを実行した後 Athena、選択 新規クエリ 次のコマンドを実行します。

MSCK REPAIR TABLE impressions

Athena はデータをパーティションにロードします。

データのクエリ次に、パーティション列を使用してインプレッションテーブルのデータをクエリします。例を示します。

SELECT dt,impressionid FROM impressions WHERE dt<'2009-04-12-14-00' and dt>='2009-04-12-13-00' ORDER BY dt DESC LIMIT 100

95

Page 105: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション分割されたデータとパーティ

ション分割されていないデータのクエリ用の準備

このクエリにより、次のようなデータが表示されます。

2009-04-12-13-20 ap3HcVKAWfXtgIPu6WpuUfAfL0DQEc2009-04-12-13-20 17uchtodoS9kdeQP1x0XThKl5IuRsV2009-04-12-13-20 JOUf1SCtRwviGw8sVcghqE5h0nkgtp2009-04-12-13-20 NQ2XP0J0dvVbCXJ0pb4XvqJ5A4QxxH2009-04-12-13-20 fFAItiBMsgqro9kRdIwbeX60SROaxr2009-04-12-13-20 V4og4R9W6G3QjHHwF7gI1cSqig5D1G2009-04-12-13-20 hPEPtBwk45msmwWTxPVVo1kVu4v11b2009-04-12-13-20 v0SkfxegheD90gp31UCr6FplnKpx6i2009-04-12-13-20 1iD9odVgOIi4QWkwHMcOhmwTkWDKfj2009-04-12-13-20 b31tJiIA25CK8eDHQrHnbcknfSndUk

シナリオ 2 データは Hive 形式でパーティション化されていません次のようなレイアウトは、MSCK REPAIR TABLE でパーティションデータを自動的に追加する場合には使用できません。

aws s3 ls s3://athena-examples-myregion/elb/plaintext/ --recursive

2016-11-23 17:54:46 11789573 elb/plaintext/2015/01/01/part-r-00000-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:46 8776899 elb/plaintext/2015/01/01/part-r-00001-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:46 9309800 elb/plaintext/2015/01/01/part-r-00002-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:47 9412570 elb/plaintext/2015/01/01/part-r-00003-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:47 10725938 elb/plaintext/2015/01/01/part-r-00004-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:46 9439710 elb/plaintext/2015/01/01/part-r-00005-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:47 0 elb/plaintext/2015/01/01_$folder$2016-11-23 17:54:47 9012723 elb/plaintext/2015/01/02/part-r-00006-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:47 7571816 elb/plaintext/2015/01/02/part-r-00007-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:47 9673393 elb/plaintext/2015/01/02/part-r-00008-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:48 11979218 elb/plaintext/2015/01/02/part-r-00009-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:48 9546833 elb/plaintext/2015/01/02/part-r-00010-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:48 10960865 elb/plaintext/2015/01/02/part-r-00011-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:48 0 elb/plaintext/2015/01/02_$folder$2016-11-23 17:54:48 11360522 elb/plaintext/2015/01/03/part-r-00012-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:48 11211291 elb/plaintext/2015/01/03/part-r-00013-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:48 8633768 elb/plaintext/2015/01/03/part-r-00014-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:49 11891626 elb/plaintext/2015/01/03/part-r-00015-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:49 9173813 elb/plaintext/2015/01/03/part-r-00016-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:49 11899582 elb/plaintext/2015/01/03/part-r-00017-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:49 0 elb/plaintext/2015/01/03_$folder$2016-11-23 17:54:50 8612843 elb/plaintext/2015/01/04/part-r-00018-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt

96

Page 106: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション分割されたデータとパーティ

ション分割されていないデータのクエリ用の準備

2016-11-23 17:54:50 10731284 elb/plaintext/2015/01/04/part-r-00019-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:50 9984735 elb/plaintext/2015/01/04/part-r-00020-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:50 9290089 elb/plaintext/2015/01/04/part-r-00021-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:50 7896339 elb/plaintext/2015/01/04/part-r-00022-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 8321364 elb/plaintext/2015/01/04/part-r-00023-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 0 elb/plaintext/2015/01/04_$folder$2016-11-23 17:54:51 7641062 elb/plaintext/2015/01/05/part-r-00024-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 10253377 elb/plaintext/2015/01/05/part-r-00025-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 8502765 elb/plaintext/2015/01/05/part-r-00026-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 11518464 elb/plaintext/2015/01/05/part-r-00027-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 7945189 elb/plaintext/2015/01/05/part-r-00028-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 7864475 elb/plaintext/2015/01/05/part-r-00029-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 0 elb/plaintext/2015/01/05_$folder$2016-11-23 17:54:51 11342140 elb/plaintext/2015/01/06/part-r-00030-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:51 8063755 elb/plaintext/2015/01/06/part-r-00031-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:52 9387508 elb/plaintext/2015/01/06/part-r-00032-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:52 9732343 elb/plaintext/2015/01/06/part-r-00033-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:52 11510326 elb/plaintext/2015/01/06/part-r-00034-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:52 9148117 elb/plaintext/2015/01/06/part-r-00035-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:52 0 elb/plaintext/2015/01/06_$folder$2016-11-23 17:54:52 8402024 elb/plaintext/2015/01/07/part-r-00036-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:52 8282860 elb/plaintext/2015/01/07/part-r-00037-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:52 11575283 elb/plaintext/2015/01/07/part-r-00038-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:53 8149059 elb/plaintext/2015/01/07/part-r-00039-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:53 10037269 elb/plaintext/2015/01/07/part-r-00040-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:53 10019678 elb/plaintext/2015/01/07/part-r-00041-ce65fca5-d6c6-40e6-b1f9-190cc4f93814.txt2016-11-23 17:54:53 0 elb/plaintext/2015/01/07_$folder$2016-11-23 17:54:53 0 elb/plaintext/2015/01_$folder$2016-11-23 17:54:53 0 elb/plaintext/2015_$folder$

この場合、ALTER TABLE ADD PARTITION を使用して各パーティションを手動で追加する必要があります。

たとえば、s3://athena-examples-myregion/elb/plaintext/2015/01/01/、以下を実行できます。Amazon S3フォルダごとに個別のパーティション列は必須ではなく、パーティションキーの値は Amazon S3 キーとは異なる場合があることに注意してください。

ALTER TABLE elb_logs_raw_native_part ADD PARTITION (dt='2015-01-01') location 's3://athena-examples-us-west-1/elb/plaintext/2015/01/01/'

97

Page 107: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影

その他の リソース• CTAS と INSERT INTO を使用して、データセットをパーティション分割できます。詳細については、

「ETL およびデータ分析での CTAS および INSERT INTO の使用 (p. 135)」を参照してください。• JDBC ドライバー (p. 72)を使用して、パーティションの追加を自動化できます。

Amazon Athena を使用したパーティション射影Athena でパーティション射影を使用すると、高度にパーティション化されたテーブルのクエリ処理を高速化し、パーティション管理を自動化できます。

パーティション射影では、パーティション値と場所は、AWS Glue データカタログ のようなリポジトリから読み取るのではなく、設定から計算されます。多くの場合、インメモリオペレーションはリモートオペレーションよりも高速であるため、パーティション射影を使用すると、高度にパーティション化されたテーブルに対するクエリの実行時間を短縮できます。クエリおよび基盤となるデータの特定の特性によっては、パーティション射影によって、パーティションメタデータの取得時に制限されているクエリのクエリ実行時間が大幅に短縮されます。

パーティション化されたテーブルのプルーニングと射影パーティションのプルーニングでは、メタデータが収集され、クエリに適用されるパーティションだけに「プルーニング」します。多くの場合、これによりクエリが高速化します。Athena は、パーティション射影用に設定されたテーブルを含め、パーティション列を持つすべてのテーブルに対してパーティションプルーニングを使用します。

通常、クエリを処理する場合、Athena はパーティションプルーニングを実行する前に AWS Glue データカタログ に対して GetPartitions 呼び出しを行います。テーブルに多数のパーティションがある場合、GetPartitions を使用すると、パフォーマンスに悪影響が及ぶ可能性があります。これを回避するには、パーティション射影を使用します。パーティション射影では、パーティション射影設定により、パーティション自体を構築するために必要な情報がすべて Athena に与えられるため、Athena がGetPartitions の呼び出しを回避できます。

パーティション射影の使用パーティション射影を使用するには、AWS Glue データカタログ または 外部 Hive メタストア (p. 34)のテーブルプロパティで、各パーティション列のパーティション値と射影型の範囲を指定します。テーブル上のこれらのカスタムプロパティにより、テーブルに対してクエリを実行するときに予想されるパーティションパターンを Athena が知ることができます。クエリの実行中、Athena は、この情報を使用して、AWS Glue データカタログ または外部 Hive メタストアから取得するのではなくパーティション値を射影します。これにより、クエリの実行時間が短縮されるだけでなく、Athena、AWS Glue、または外部の Hive メタストアでパーティションを手動で作成する必要がなくなるため、パーティション管理も自動化されます。

Important

テーブルでパーティション射影を有効にすると、AWS Glue データカタログ または Hive メタストア内のテーブルに登録されているパーティションメタデータが Athena によりすべて無視されます。

ユースケースパーティション射影が役立つシナリオには、次のようなものがあります。

98

Page 108: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド考慮事項と制約事項

• 高度にパーティション化されたテーブルに対するクエリが、思ったほどすぐに完了しない。• データに新しい日付または時刻パーティションが作成されたとき、定期的にパーティションをテーブル

に追加する。パーティション射影で、新しいデータが到着したときに使用できる相対日付範囲を設定している。

• Amazon S3 に高度にパーティション化されたデータがある。データは、AWS Glue データカタログ または Hive メタストア内のモデルに対して実用的ではなく、クエリがそのごく一部のみを読み取る。

射影可能なパーティション構造パーティション射影は、パーティションが次のような予測可能なパターン (ただし、これに限りません) に従う場合に最も簡単に設定できます。

• 整数 – [1, 2, 3, 4, ..., 1000] や [0500, 0550, 0600, ..., 2500] などの整数の連続シーケンス。

• 日付 – [20200101, 20200102, ..., 20201231]、[1-1-2020 00:00:00, 1-1-202001:00:00, ..., 12-31-2020 23:00:00] など、日付または日時の連続シーケンス。

• 列挙値 – 空港コードや AWS リージョンなど、列挙値の有限セット。• AWS サービスログ – AWS サービスログは通常、AWS Glue で指定できるために Athena がパーティ

ション射影に使用できるパーティションスキームを持つ既知の構造になっています。例については、「Amazon Kinesis Data Firehose 例 (p. 110)」を参照してください。

パーティションパステンプレートのカスタマイズデフォルトでは、Athena はフォーム s3://<bucket>/<table-root>/partition-col-1=<partition-col-1-val>/partition-col-2=<partition-col-2-val>/ を使用してパーティションの場所を構築しますが、データの編成が異なる場合、Athena はこのパステンプレートをカスタマイズするためのメカニズムを提供します。手順については、「カスタム S3 ストレージの場所の指定 (p. 104)」を参照してください。

考慮事項と制約事項以下の考慮事項に注意してください。

• パーティション射影により、AWS Glue または外部 Hive メタストアでパーティションを手動で指定する必要がなくなります。

• テーブルでパーティション射影を有効にすると、Athena は AWS Glue データカタログ 内または外部Hive メタストア内のパーティションメタデータを無視します。

• 射影されたパーティションが Amazon S3 に存在しない場合も、Athena はそのパーティションを射影します。Athena はエラーをスローしませんが、データは返されません。ただし、空のパーティションが多すぎる場合、従来の AWS Glue パーティションに比べてパフォーマンスが低下する可能性があります。射影パーティションの半分以上が空の場合は、従来のパーティションを使用することをお勧めします。

• パーティション射影は、Athena を通じてテーブルがクエリされた場合にのみ使用できます。AmazonRedshift Spectrum または Amazon EMR などの別のサービスを通じて同じテーブルが読み取られた場合、標準パーティションメタデータが使用されます。

• パーティション射影は DML 専用機能であるため、Athena により射影されるが AWS Glue カタログまたは外部 Hive メタストアに登録されていないパーティションは SHOW PARTITIONS によりリストされません。

• Athena のビューは、射影設定プロパティを使用しません。

トピック

99

Page 109: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影の設定

• パーティション射影の設定 (p. 100)• パーティション射影のサポートされている型 (p. 104)• ID の動的なパーティション化 (p. 108)• Amazon Kinesis Data Firehose 例 (p. 110)

パーティション射影の設定テーブルのプロパティでのパーティション射影の設定は、次の 2 つのステップで行います。

1. 各パーティション列のデータ範囲と関連するパターンを指定するか、カスタムテンプレートを使用します。

2. テーブルのパーティション射影を有効にします。

このセクションでは、AWS Glue にこれらのテーブルプロパティを設定する方法について説明します。これらを設定するには、AWS Glue コンソール、Athena CREATE TABLE (p. 420) クエリ、または AWSGlue API オペレーションを使用できます。次の手順は、AWS Glue コンソールでプロパティを設定する方法を示しています。

AWS Glueコンソールを使用してパーティション射影を設定して有効にするには

1. AWS マネジメントコンソール にサインインし、AWS Glue コンソール (https://console.aws.amazon.com/glue/) を開きます。

2. [テーブル] タブを選択します。

[テーブル] タブでは、既存のテーブルを編集したり、[テーブルの追加] を選択して新しいテーブルを作成したりできます。手動またはクローラを使用してテーブルを追加する方法については、の「コンソールでのテーブルAWS Glueの操作」を参照してくださいAWS Glue 開発者ガイド。

3. テーブルのリストで、編集するテーブルのリンクを選択します。

4. [テーブルの編集] を選択します。

5. [テーブルの詳細の編集] ダイアログボックスの [テーブルプロパティ] セクションで、パーティション化された列ごとに、次のキーと値のペアを追加します。

a. [キー] に、projection.columnName.type を追加します。

100

Page 110: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影の設定

b. Value には、サポートされている型のいずれかを追加します。enum、 integer 、 date 、または injected。 詳細については、「」を参照してくださいパーティション射影のサポートされている型 (p. 104)。

6. 「パーティション射影のサポートされている型 (p. 104)」のガイダンスに従って、設定要件に従って追加のキーと値のペアを追加します。

次のテーブル設定例では、パーティション射影用に year 列を構成し、返すことのできる値を 2000~ 2016 の範囲に制限します。

7. キーと値のペアを追加して、パーティション射影を有効にします。[キー] に projection.enabledと入力し、[値] に true と入力します。

101

Page 111: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影の設定

Note

projection.enabled を false に設定することで、このテーブルのパーティション射影をいつでも無効にすることができます。

8. 完了したら、[Apply] を選択します。9. Athena クエリエディタで、テーブル用に設定した列をテストクエリします。

次のクエリ例では、SELECT DISTINCT を使用して、year 列から一意の値を返します。データベースには 1987 年から 2016 年のデータが含まれていますが、projection.year.range プロパティでは返される値が 2000 年から 2016 年に制限されています。

102

Page 112: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影の設定

103

Page 113: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影のサポートされている型

Note

projection.enabled を true に設定したが、1 つ以上のパーティション列を設定できない場合は、次のようなエラーメッセージが表示されます。HIVE_METASTORE_ERROR: Table database_name.table_name is configuredfor partition projection, but the following partition columnsare missing projection configuration: [column_name] (tabledatabase_name.table_name).

カスタム S3 ストレージの場所の指定AWS Glue でテーブルプロパティを編集する場合、射影パーティションのカスタム Amazon S3 パステンプレートを指定することもできます。カスタムテンプレートを使用すると、通常の .../column=value/... パターンに従わないカスタム Amazon S3 ファイルの場所に Athena がパーティション値を適切にマッピングできるようになります。

カスタムテンプレートの使用はオプションです。ただし、カスタムテンプレートを使用する場合、各パーティション列のプレースホルダをテンプレートに含める必要があります。

カスタムパーティションの場所のテンプレートを指定するには

1. 「configure and enable partition projection using the AWS Glue console」のステップに従って、次のようにカスタムテンプレートを指定する追加のキーと値のペアを追加します。

a. [キー] に「storage.location.template」と入力します。b. [値] で、すべてのパーティション列のプレースホルダを含む場所を指定します。

次のテンプレート値の例では、パーティション列 a、b、c があるテーブルを想定しています。

s3://bucket/table_root/a=${a}/${b}/some_static_subdirectory/${c}/

s3://bucket/table_root/c=${c}/${b}/some_static_subdirectory/${a}/${b}/${c}/${c}/

同じテーブルの場合、次のテンプレート値の例は、列 c のプレースホルダが含まれていないため無効です。

s3://bucket/table_root/a=${a}/${b}/some_static_subdirectory/

2. [適用] を選択します。

パーティション射影のサポートされている型テーブルには、enum、integer、date,、または injected パーティション列の型の任意の組み合わせを使用できます。

列挙型値が列挙セットのメンバーであるパーティション列には、enum 型を使用します (空港コードや AWS リージョンなど)。

テーブルでパーティションプロパティを次のように定義します。

104

Page 114: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影のサポートされている型

プロパティ名 値の例  説明

projection.columnName.type enum 必須。列に使用する射影タイプcolumnName。 列挙型の使用を通知するには、値 enum (大文字と小文字を区別しない) を指定する必要があります。先頭と末尾に空白文字を使用できます。

projection.columnName.valuesA,B,C,D,E,F,G,Unknown 必須。列の列挙されたパーティション値のカンマ区切りリストcolumnName。 空白は列挙値の一部とみなされます。

Note

ベストプラクティスとして、 enum ベースのパーティション射影の使用を数十以下に制限することをお勧めします。enum射影に特定の制限はありませんが、gzip で圧縮された場合、テーブルのメタデータの合計サイズがAWS Glue上限の約 1 MB を超えることはできません。この制限は、列名、場所、ストレージ形式など、テーブルの主要部分で共有されることに注意してください。IDs射影enumでいくつかの一意なものを使用していると考えられる場合は、代理フィールドで少数の一意の値へのバケット化など、別のアプローチを検討してください。濃度を取引することで、enumフィールド内の一意の値の数を制御できます。

整数型使用できる値が定義された範囲内の整数として解釈可能なパーティション列には、整数型を使用します。射影整数列は現在、Java 符号付き長整数値 (-263 ~ 263-1。両端の値を含みます) の範囲に制限されています。

プロパティ名 値の例  説明

projection.columnName.type integer 必須。列に使用する射影タイプcolumnName。 整数型の使用を通知するには、値 integer (大文字と小文字を区別しない) を指定する必要があります。先頭と末尾に空白文字を使用できます。

projection.columnName.range0,10

-1,8675309

0001,9999

必須。列のクエリによって返される最小値と最大値の範囲を示す 2 要素カンマ区切りリストcolumnName。 両端の値が含まれ、負の値でもかまいません。また、先頭をゼロにすることもできます。先頭と末尾に空白文字を使用できます。

projection.columnName.interval1

5

省略可能。列の連続するパーティション値の間隔を指定する正の整数 columnName。たとえば、range値「1,3」とinterval値「1」は、値1、2、3 を生成します。range

105

Page 115: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影のサポートされている型

プロパティ名 値の例  説明値が同じで interval が「2」の場合、値 1 と 3 が生成され、2はスキップされます。先頭と末尾に空白文字を使用できます。デフォルトは1です。

projection.columnName.digits1

5

省略可能。パーティション値の列の最終的な表現に含める桁数を指定する正の整数 columnName。 たとえば、range値「1」である「1,3」は、値 1、2、3 を生成します。digitsrange 値が同じでdigits 値が「2」の場合、値01、02、03 が生成されます。先頭と末尾に空白文字を使用できます。デフォルトでは、静的な桁数も先頭のゼロもありません。

日付型定義された範囲内の日付 (オプションで時刻を含む) として解釈可能な値を持つパーティション列には、日付型を使用します。

Important

射影される日付列は、クエリの実行時に協定世界時 (UTC) で生成されます。

プロパティ名 値の例  説明

projection.columnName.typedate 必須。列に使用する射影タイプ columnName。 日付タイプの使用を通知するには、値 date (大文字と小文字を区別しない) を指定する必要があります。先頭と末尾に空白文字を使用できます。

projection.columnName.range201701,201812

01-01-2010,12-31-2018

NOW-3YEARS,NOW

201801,NOW+1MONTH

必須。列の最小値と最大値を提供する 2 要素カンマ区切りリストrange columnName。 これらの値は包括的であり、Java java.time.* の日付型と互換性のある任意の形式を使用できます。最小値と最大値のどちらも同じ形式を使用する必要があります。.format プロパティで指定する形式は、これらの値に使用される形式にする必要があります。

この列には、次の正規表現パターンの形式で相対日付文字列を含めることもできます。

\s*NOW\s*(([\+\-])\s*([0-9]+)\s*(YEARS?|MONTHS?|WEEKS?|DAYS?|HOURS?|MINUTES?|SECONDS?)\s*)?

空白は使用できますが、日付リテラルは日付文字列自体の一部と見なされます。

106

Page 116: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティション射影のサポートされている型

プロパティ名 値の例  説明

projection.columnName.formatyyyyMM

dd-MM-yyyy

dd-MM-yyyy-HH-mm-ss

必須。Java の日付形式に基づく日付形式文字列DateTimeFormatter。 サポートされている任意のJava.time.*タイプを使用できます。

projection.columnName.interval1

5

列の連続するパーティション値の間隔を指定する正の整数 columnName。 たとえば、range値が で値が 、2017-01,2018-12値が の場合、2017-01、201702、2017-03というように値intervalが生成されます。1interval.unitMONTHSrange 値が同じでinterval 値が 2、interval.unit 値が MONTHSの場合、2017-01、2017-03、2017-05 というように値が生成されます。先頭と末尾に空白文字を使用できます。

指定された日付が単一日または単一月の精度である場合、interval はオプションであり、デフォルトではそれぞれ 1 日または 1 か月です。それ以外の場合、interval が必要です。

projection.columnName.interval.unitYEARS

MONTHS

WEEKS

DAYS

HOURS

MINUTES

SECONDS

MILLISECONDS

のシリアル化された形式を表す時間単位の単語ChronoUnit。 YEARS指定できる値は 、、、、、、、、、または MONTHS WEEKSです。DAYSHOURSMINUTESSECONDSMILLISECONDSこれらの値の大文字と小文字は区別されません。

指定された日付が単一日または単一月の精度である場合、interval.unit はオプションであり、デフォルトではそれぞれ 1 日または 1 か月です。それ以外の場合は、interval.unit が必要です。

挿入型使用できる値をいくつかの論理範囲内で手動で生成することができないが、クエリの WHERE 句で単一の値として指定されるパーティション列には、挿入型を使用します。

次の点に留意することが重要です。

• 挿入列ごとにフィルタ式が指定されていない場合、挿入列でのクエリは失敗します。• 列のフィルタ式で複数の値が許可される場合、挿入列でのクエリは失敗します。

プロパティ名 値  説明

projection.columnName.type injected必須。列に使用する射影タイプ columnName。 指定された値は である必要があります injected (大文字と小文字は区別されません)。先頭と末尾に空白文字を使用できます。

107

Page 117: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドID の動的なパーティション化

詳細については、Injection (p. 108) を参照してください。

ID の動的なパーティション化テーブルは、次の特性を持つ一意の識別子列でパーティション化されている場合があります。

• 新しい値を頻繁に (場合によっては自動的に) 追加する。• 簡単に生成できない。これらは、定義された範囲内IDsの連続した整数ではなく、ユーザー名または構成

や長さが変化するデバイスである可能性があります。

このようなパーティションスキームでは、次の理由のため enum 射影タイプが実用的ではない可能性があります。

• 値がテーブルに追加されるたびに、テーブルプロパティの変更が必要になる可能性があります。• 1 つのテーブルプロパティに、数百万文字以上含まれる可能性があります。• 射影では、すべてのパーティション列が射影用に設定されている必要があります。この要件は、1 列の

みの場合回避できません。

これらの制限を回避するには、injection または bucketing を使用します。

Injection動的 ID データセットのクエリパターンで、高基数パーティション列に常に単一の値が指定される場合、値挿入を使用できます。挿入により、パーティション領域全体を射影する必要がなくなります。

のようにかなり高基数の UUID フィールドでIoTデータセットをパーティション化するとしますdevice_id。 このフィールドには以下の特徴があります。

• 非常に大きい値 (場合によっては数十億)。• その値はランダムな文字列であるため、他の射影方法を使用して射影することはできません。• 一般的に使用されるメタストアに、非常に多数のパーティションを保存することはできません。

ただし、1 つの device_id だけをフィルタ処理する WHERE 句がすべてのクエリに含まれている場合は、CREATE TABLE ステートメントで次の方法を使用できます。

... PARTITIONED BY ( device_id STRING ) LOCATION "s3://bucket/prefix/" TBLPROPERTIES ( "projection.enabled" = "true", "projection.device_id.type" = "injected", "storage.location.template" = "s3://bucket/prefix/${device_id}" )

このようなテーブルの SELECT クエリは、次のようになります。

SELECT col1, col2,..., device_idFROM

108

Page 118: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドID の動的なパーティション化

tableWHERE device_id = "b6319dc2-48c1-4cd5-a0a3-a1969f7b48f7" AND ( col1 > 0 or col2 < 10 )

この例では、Athena は特定のクエリに対して 1 つのパーティションのみを射影します。これにより、1 つのパーティションを見つけてそこから読み取るためだけに、数百万から数十億の仮想パーティションを保存して処理する必要がなくなります。

Bucketingバケット化手法では、パーティション化の識別子セット全体ではなく、バケット値の固定セットを使用します。識別子をバケットにマッピングできる場合、クエリでこのマッピングを使用できます。識別子自体をパーティション化するときと同じようにメリットがあります。

バケット化には、射影よりも次のような利点があります。

• WHERE 句のフィールドには、一度に複数の値を指定できます。• 従来のメタストアでは、引き続きパーティションを使用できます。

前の例のシナリオを使用し、整数により識別されたバケットが 100 万個あるとすると、CREATE TABLEステートメントは次のようになります。

... PARTITIONED BY ( BUCKET_ID BIGINT ) LOCATION "s3://bucket/prefix/" TBLPROPERTIES ( "projection.enabled" = "true", "projection.bucket_id.type" = "integer", "projection.bucket_id.range" = "1,1000000" )

対応する SELECT クエリは、次の例のように WHERE 句のマッピング関数を使用します。

SELECT col1, col2,..., identifierFROM tableWHERE bucket_id = map_identifier_to_bucket("ID-IN-QUESTION") AND identifier = "ID-IN-QUESTION"

の置き換え map_identifier_to_bucket この例の 関数で、識別子を整数にマッピングするスカラー式を使用します。たとえば、式は単純なハッシュまたはモジュラスになります。この関数は、指定された次元に射影できるパーティションの数に一定の上限を適用します。Apache Parquet や ORC などの述語プッシュダウンをサポートするファイル形式と組み合わせると、バケット手法は優れたパフォーマンスを発揮します。

前の例のスカラーバケット関数など、独自のユーザー定義関数を記述する方法については、「ユーザー定義関数を使用したクエリ(プレビュー) (p. 193)」を参照してください。

109

Page 119: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon Kinesis Data Firehose 例

Amazon Kinesis Data Firehose 例Kinesis Data Firehose は、次のパス形式で Amazon S3 にデータを保存します。

s3://bucket/folder/yyyy/MM/dd/HH/file.extension

通常、パーティション射影を使用せずに Kinesis Data Firehose データをクエリために Athena を使用するには、Kinesis Data Firehose ログ用のテーブルを Athena に作成します。その場合、Kinesis Data Firehoseがパーティションを作成するとき、1 時間おきに AWS Glue データカタログ のテーブルにパーティションを追加する必要があります。

パーティション射影を使用すると、1 回限りの設定を使用して、パーティションが存在する場所を Athenaに通知できます。次の CREATE TABLE の例では、開始日が 2018 年 1 月 1 日午前 0 時であると想定しています。日付範囲の上限には、必ず NOW を使用してください。これにより、適切な UTC 時刻に新しいデータが自動的にクエリ可能になります。

CREATE EXTERNAL TABLE my_table(...)...PARTITIONED BY( datehour STRING)LOCATION "s3://bucket/table-name/"TBLPROPERTIES( "projection.enabled" = "true", "projection.datehour.type" = "date", "projection.datehour.range" = "2018/01/01/00,NOW", "projection.datehour.format" = "yyyy/MM/dd/HH", "projection.datehour.interval" = "1", "projection.datehour.interval.unit" = "HOURS", "storage.location.template" = "s3://bucket/table-name/${datehour}")

Kinesis Data Firehoseはパーティションプレフィックスを後に追加します table-name をご覧ください。Kinesisコンソールで、table-name が [Custom Prefix] フィールドに表示されます。

このテーブルを使用すると、手動でパーティションを追加しなくても、次のようなクエリを実行できます。

SELECT *FROM my_tableWHERE datehour >= '2018/02/03/00'AND datehour < '2018/02/03/04'

110

Page 120: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ結果とクエリ履歴

Amazon Athena を使用した SQL クエリの実行

AWS Glue データカタログ で登録されているデータソースと、Hive メタストアや Amazon DocumentDBインスタンスなどの Athena クエリフェデレーション(プレビュー)を使用して接続するデータソースに対して、Amazon Athena を使用して SQL クエリを実行できます。データソースの使用の詳細については、「データソースへの接続 (p. 17)」を参照してください。スキーマを変更するデータ定義言語 (DDL) クエリを実行すると、Athena は、データソースに関連付けられたメタストアにメタデータを書き込みます。また、CREATE TABLE AS や INSERT INTO などの一部のクエリでは、Amazon S3 の場所に CSV レコードを追加するなど、データセットにレコードを書き込むことができます。クエリを実行すると、Athena により指定したクエリ結果の場所にクエリの結果が保存されます。これにより、クエリ履歴を表示し、クエリ結果セットをダウンロードして表示できます。

このセクションでは、さまざまな SQL ステートメントを使用して、一般的なデータソースとデータ型に対して Athena クエリを実行するためのガイダンスを提供します。配列の操作、連結、フィルタリング、平坦化、ソートなど、一般的な構造と演算子を操作するための一般的なガイダンスが得られます。その他の例としては、ネスト化された構造とマップのテーブル内のデータのクエリ、JSON エンコード形式のデータセットに基づくテーブル、AWS CloudTrail ログや Amazon EMR ログなどの AWS サービスに関連付けられたデータセットなどがあります。

トピック• クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111)• ビューの使用 (p. 120)• クエリ結果からのテーブルの作成 (CTAS) (p. 126)• スキーマの更新を処理する (p. 144)• 配列のクエリ (p. 153)• 地理空間データのクエリ (p. 170)• Athena による Apache Hudi データセットに対するクエリ (p. 181)• JSON のクエリ (p. 184)• Machine Learning (ML) with Amazon Athena (Preview) を使用する (p. 191)• ユーザー定義関数を使用したクエリ(プレビュー) (p. 193)• AWS サービスログをクエリする (p. 200)• AWS Glue データカタログ のクエリ (p. 224)• Web サーバ ログのクエリが に保存されました Amazon S3 (p. 228)

考慮事項と制限事項については、「Amazon Athena での SQL クエリに関する考慮事項と制約事項 (p. 435)」を参照してください。

クエリ結果、出力ファイル、クエリ履歴の使用Amazon Athena は、実行される各クエリのクエリ結果とメタデータ情報を、Amazon S3 内に指定できるクエリ結果の場所に自動的に保存します。必要に応じて、この場所にあるファイルにアクセスして操作できます。Athena コンソールから、クエリ結果ファイルを直接ダウンロードすることもできます。

111

Page 121: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ ID の取得

出力ファイルは、クエリ自体が保存されたかどうかにかかわらず、実行されるすべてのクエリに対して自動的に保存されます。クエリ出力ファイルにアクセスして表示するには、クエリ結果の場所へのAmazonS3GetObjectアクションに対するアクセス権限と、Athena GetQueryResults アクションに対するアクセス権限が必要です。クエリの結果の場所は暗号化できます。場所が暗号化されている場合、ユーザーには、クエリ結果の場所を暗号化および復号するための適切なキーアクセス許可が必要です。

Important

クエリ結果の場所への Amazon S3 GetObject アクションのアクセス許可を持つ IAM プリンシパルは、Athena GetQueryResults アクションへのアクセス許可が拒否された場合でも、Amazon S3 からクエリ結果を取得できます。

クエリ ID の取得実行される各クエリはクエリ実行と呼ばれます。クエリ実行には、クエリ ID またはクエリ実行 ID と呼ばれる一意の識別子があります。クエリ結果ファイルを操作し、クエリ結果ファイルをすばやく見つけるには、クエリ ID が必要です。このトピックでは、クエリ ID を と呼びます。QueryID.

Athenaコンソールを使用して を取得するには QueryID 実行したクエリの

1. ナビゲーションバーから [History (履歴)] を選択します。

2. クエリのリストから、[State (状態)] の下のクエリステータス (例—: Succeeded) を選択します。クエリ ID がポインタヒントに表示されます。

112

Page 122: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ出力ファイルの識別

3. ID をクリップボードにコピーするには、[クエリ ID] の横にあるアイコンを選択します。

クエリ出力ファイルの識別ファイルは、クエリの名前、クエリ ID、クエリが実行された日付に基づいて、Amazon S3 のクエリ結果の場所に保存されます。各クエリのファイルの名前は、QueryID。これは、実行時に が各クエリAthenaに割り当てる一意の識別子です。

次のファイルタイプが保存されます。

ファイルタイプ ファイル命名パターン  説明

クエリ結果ファイル QueryID.csv

QueryID.txt

DML クエリ結果ファイルはカンマ区切り値 (CSV) 形式で保存されます。

DDL クエリ結果は、プレーンテキストファイルとして保存されます。

コンソールまたはクエリ履歴を使用すると、[Results] ペインからコンソールから結果ファイルをダウンロードできます。詳細については、Athena コンソールを使用したクエリ結果ファイルのダウンロード (p. 115) を参照してください。

クエリメタデータファイル QueryID.csv.metadata

QueryID.txt.metadata

DML および DDL クエリメタデータファイルはバイナリ形式で保存され、人間が読めるものではありません。ファイル拡張子は、関連するクエリ結果ファイルに対応しています。Athenaは、GetQueryResults アクションを使用してクエリ結果を読み取るときにメタデータを使用します。これらのファイルは削除できますが、クエリに関する重要な情報が失われるため、お勧めしません。

113

Page 123: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ出力ファイルの識別

ファイルタイプ ファイル命名パターン  説明

データマニフェストファイル QueryID-manifest.csv データマニフェストファイルは、INSERT INTO (p. 408)クエリの実行時に Athena がAmazon S3 データソースの場所に作成するファイルを追跡するために生成されます。クエリが失敗した場合、マニフェストはクエリが書き込むことを意図したファイルも追跡します。マニフェストは、失敗したクエリの結果として孤立したファイルを識別するのに役立ちます。

クエリ出力ファイルは、設定がクライアント側の設定よりも優先されるワークグループでクエリが発生しない限り、次のパスパターンでサブフォルダに保存されます。ワークグループの設定がクライアント側の設定よりも優先される場合、クエリはワークグループによって指定された結果パスを使用します。

QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]

• QueryResultsLocationInS3 は、ワークグループ設定またはクライアント側設定で指定されたクエリ結果の場所です。以下の「the section called “クエリ結果の場所の指定” (p. 116)」を参照してください。

• 次のサブフォルダは、ワークグループ設定が結果パスよりも優先されていないコンソールから実行されるクエリに対してのみ作成されます。または AWS CLI API を使用して実行されるクエリは、 に直接保存されます。AthenaQueryResultsLocationInS3.• QueryName は結果を保存するクエリの名前です。クエリが実行されたものの、保存されなかった場

合は、Unsaved が使用されます。• yyyy/mm/dd は、クエリが実行された日付です。

CREATE TABLE AS SELECT クエリに関連付けられたファイルは、上記のパターンの tables サブフォルダに保存されます。

AWS CLI を使用してクエリ出力の場所とクエリ結果ファイルを特定する

• 次の例に示すように aws athena get-query-execution コマンドを使用します。置換abc1234d-5efg-67hi-jklm-89n0op12qr34 をクエリ ID に置き換えます。

aws athena get-query-execution --query-execution-id abc1234d-5efg-67hi-jklm-89n0op12qr34

このコマンドにより、以下のような出力が返されます。各出力パラメータの説明については、 の「get-query-execution」を参照してくださいAWS CLI Command Reference。

{ "QueryExecution": { "Status": { "SubmissionDateTime": 1565649050.175, "State": "SUCCEEDED", "CompletionDateTime": 1565649056.6229999 }, "Statistics": { "DataScannedInBytes": 5944497,

114

Page 124: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena コンソールを使用したクエリ結果ファイルのダウンロード

"DataManifestLocation": "s3://aws-athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34-manifest.csv", "EngineExecutionTimeInMillis": 5209 }, "ResultConfiguration": { "EncryptionConfiguration": { "EncryptionOption": "SSE_S3" }, "OutputLocation": "s3://aws-athena-query-results-123456789012-us-west-1/MyInsertQuery/2019/08/12/abc1234d-5efg-67hi-jklm-89n0op12qr34" }, "QueryExecutionId": "abc1234d-5efg-67hi-jklm-89n0op12qr34", "QueryExecutionContext": {}, "Query": "INSERT INTO mydb.elb_log_backup SELECT * FROM mydb.elb_logs LIMIT 100", "StatementType": "DML", "WorkGroup": "primary" }}

Athena コンソールを使用したクエリ結果ファイルのダウンロードクエリを実行した直後に、またはクエリの [History (履歴)] を使用して、クエリペインからクエリ結果のCSV ファイルをダウンロードできます。

最新のクエリのクエリ結果ファイルをダウンロードするには

1. クエリエディタにクエリを入力し、[Run query (クエリの実行)] を選択します。

クエリの実行が終了すると、[Results (結果)] ペインにクエリ結果が表示されます。2. クエリ結果ファイルをダウンロードするには、クエリ結果ペインでファイルアイコンを選択します。

ブラウザとブラウザの設定によっては、ダウンロードの確認が必要になる場合があります。

115

Page 125: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ結果の場所の指定

以前のクエリのクエリ結果ファイルをダウンロードするには

1. [History (履歴)] を選択します。2. クエリのリストをクエリが見つかるまで操作し、クエリの [Action (アクション)] で [Download results

(結果のダウンロード)] を選択します。

クエリ結果の場所の指定Athena が使用するクエリ結果の場所は、ワークグループ設定とクライアント側の設定の組み合わせによって決まります。クライアント側の設定は、クエリの実行方法に基づいています。

• Athenaコンソールを使用してクエリを実行する場合、ナビゲーションバーの [Settings (設定)] に入力されたクエリ結果の場所によってクライアント側の設定が決まります。

• AthenaAPI を使用してクエリを実行する場合、OutputLocationStartQueryExecutionアクションのパラメータによってクライアント側の設定が決まります。

• ODBC または JDBC ドライバーを使用してクエリを実行する場合、接続 URL で指定されたS3OutputLocation プロパティによってクライアント側の設定が決まります。

Important

API または ODBC または JDBC ドライバーを使用してクエリを実行する場合、コンソールの設定は適用されません。

各ワークグループ設定には、[Override client-side settings (クライアント側設定の上書き)] オプションがあり、有効にできます。このオプションを有効にすると、そのワークグループに関連付けられている IAM プリンシパルがクエリを実行するときに、適切なクライアント側の設定よりもワークグループの設定が優先されます。

Athena コンソールを使用したクエリ結果の場所の指定クエリを実行する前に、Amazon S3 でクエリ結果バケットの場所を指定するか、バケットが指定されており、設定がクライアント設定を上書きするワークグループを使用する必要があります。クエリ結果の場所が指定されていない場合、クエリはエラーで失敗します。

以前は、[クエリ結果の場所] の値を指定せずにクエリを実行し、クエリ結果の場所の設定がワークグループによって上書きされなかった場合、Athena によってデフォルトの場所が作成されていました。デフォルトの場所は で、aws-athena-query-results-MyAcctID-MyRegionMyAcctID はクエリを実行した IAM プリンシパルの AWS アカウント ID であり、MyRegion は、クエリが実行されたリージョンです(例: )us-west-1。

現在は、アカウントが以前に Athena を使用していないリージョンで Athena クエリを実行する前に、クエリ結果の場所を指定するか、クエリ結果の場所の設定を上書きするワークグループを使用する必要があります。Athena はデフォルトのクエリ結果の場所を作成しなくなりましたが、以前に作成したデフォルトのaws-athena-query-results-MyAcctID-MyRegion の場所は有効なままであり、引き続き使用できます。

Athena コンソールを使用して、クライアント側の設定クエリ結果の場所を指定するには

1. ナビゲーションバーから、[Settings (設定)] を選択します。2. [Query result location (クエリ結果の場所)] に、既存のフォルダへのパス (末尾のスラッシュを含む) を

入力します。Amazon S3Note

末尾にスラッシュを含めてください。エラーに末尾のスラッシュの結果を含めない Invalid S3folder location.

116

Page 126: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ結果の場所の指定

入力したAmazon S3場所は、以降のクエリで使用されます。この場所は、後で必要に応じて変更できます。

クエリ結果の場所を指定し、クライアント側の設定を上書きするワークグループのメンバーである場合、次の図に示すように、クエリ結果の場所を変更するオプションは使用できません。

ワークグループを使用したクエリ結果の場所の指定AWS マネジメントコンソール、AWS CLI、または Athena API を使用して、ワークグループ設定でクエリ結果の場所を指定できます。

AWS CLI を使用する場合、aws athena create-work-group コマンドまたは aws athena update-work-groupコマンドを実行するときに、--configuration オプションの OutputLocation パラメータを使用してクエリ結果の場所を指定します。

Athena コンソールを使用してワークグループのクエリ結果の場所を指定するには

1. ワークグループの選択:CurrentWorkgroupNameナビゲーションバーの 。2. 次のいずれかを行ってください。

• 既存のワークグループを編集する場合は、リストからそのワークグループを選択し、[View details(詳細を表示)]、[Edit Workgroup (ワークグループの編集)] の順に選択します。

117

Page 127: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ履歴の表示

• 新しいワークグループを作成する場合は、[Create workgroup (ワークグループの作成)] を選択します。

3. [Query result location (クエリ結果の場所)] で、[Select (選択)] フォルダを選択します。4. S3 の場所のリストから、使用するバケットとフォルダが一番上の行に表示されるまで、青色の矢印を

連続して選択します。[Select] を選択します。5. [Settings (設定)] で、次のいずれかを実行します。

• [Override client-side settings (クライアント側設定の上書き)] を選択して、このワークグループのメンバーが実行するすべてのクエリについて、上記で指定した場所にクエリファイルを保存します。

• [Override client-side settings (クライアント側設定の上書き)] をオフにして、上記で指定した場所にクエリファイルを保存すると、ワークグループのメンバーが Amazon S3 で出力場所を指定せずにAthena API、ODBC ドライバー、または JDBC ドライバーを使用してクエリを実行する場合にのみ、上記で指定したクエリの場所になります。

6. ワークグループを編集する場合は、[Save (保存)] を選択します。ワークグループを作成する場合は、[Create workgroup (ワークグループの作成)] を選択します。

クエリ履歴の表示Athena コンソールを使用して、成功したクエリと失敗したクエリの表示、成功したクエリのクエリ結果ファイルのダウンロード、失敗したクエリのエラー詳細の表示が可能です。Athena では、クエリの履歴が45 日間保持されます。

Athena コンソールでクエリ履歴を表示するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [History] タブを選択します。[履歴] タブには、実行された各クエリに関する情報が表示されます。

118

Page 128: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ履歴の表示

3. 次のいずれかを行ってください。

• クエリエディタでクエリステートメントを表示するには、[クエリ] 列でクエリのテキストを選択します。長いクエリステートメントは省略されます。

• クエリ ID を表示するには、その状態 (成功、失敗、またはキャンセル) を選択します。クエリ ID がポインタヒントに表示されます。

119

Page 129: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドビューの使用

• 成功したクエリの結果を .csv ファイルにダウンロードするには、[Download results (結果のダウンロード)] を選択します。

• 失敗したクエリの詳細を表示するには、クエリの [Error detail (エラー詳細)] を選択します。

クエリ履歴を 45 日より長く保持する場合は、クエリ履歴を取得して Amazon S3 などのデータストアに保存できます。このプロセスを自動化するには、Athena および Amazon S3 API アクションと CLI コマンドを使用できます。以下の手順は、これらのステップをまとめたものです。

クエリ履歴をプログラムで取得して保存するには

1. AthenaListQueryExecutionsAPI アクションまたは list-query-executions CLI コマンドを使用して、クエリを取得しますIDs。

2. AthenaGetQueryExecutionAPI アクションまたは get-query-execution CLI コマンドを使用して、ID に基づいて各クエリに関する情報を取得します。

3. Amazon S3PutObjectAPI アクションまたは put-object CLI コマンドを使用して、情報を に保存しますAmazon S3。

ビューの使用Amazon Athena のビューは、物理的なテーブルではなく、論理的なテーブルです。ビューを定義するクエリは、1 つのクエリでビューが参照されるたびに実行されます。

120

Page 130: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドどのようなときにビューを使うのでしょう。

SELECT クエリからビューを作成でき、今後のクエリでこのビューを参照できます。詳細については、CREATE VIEW (p. 426) を参照してください。

トピック• どのようなときにビューを使うのでしょう。 (p. 121)• Athena のビューでサポートされているアクション (p. 121)• ビューの考慮事項 (p. 122)• ビューの制限 (p. 123)• コンソールでビューを操作する (p. 123)• ビューの作成 (p. 124)• ビューの例 (p. 125)• ビューの更新 (p. 125)• ビューの削除 (p. 125)

どのようなときにビューを使うのでしょう。以下の目的でビューを作成できます。

• データのサブネットをクエリする。たとえば、元のテーブルの列のサブセットを含むビューを作成して、データのクエリを簡素化できます。

• 複数のテーブルを 1 つのクエリに結合する。複数のテーブルを持ち、それらを UNION ALLと組み合わせる場合は、その式でビューを作成して、結合テーブルに対するクエリを簡素化できます。

• 既存の基本クエリの複雑性を解消して、ユーザーによるクエリの実行を単純化する。基本クエリには、テーブル間の結合、列リストの表現や他の SQL 構文が含まれていることより、その理解とデバッグが困難なことがよくあります。複雑性を解消して、クエリを単純化するビューを作成できます。

• 最適化手法を試用して、最適化されたクエリを作成する。たとえば、WHERE 条件、JOIN 順序、あるいはベストパフォーマンスを示す他の表現の組み合わせを見つけた場合には、これらの句および表現でビューを作成することができます。こうして、アプリケーションはこのビューに対して比較的な単純なクエリを実行できます。後に、元のクエリを最適化するためのより良い方法を見つけた場合には、ビューを再作成するときに、すべてのアプリケーションは最適化された基本クエリを即時に採用します。

• 基礎となるテーブルおよび列の名前を隠し、メンテナンス問題を最小限に抑える (この名前が変更された場合)。この場合、新しい名前を使用して、ビューを再作成します。基礎となるテーブルではなく、このビューを使用するすべてのクエリは、変更なしで実行を続けます。

Athena のビューでサポートされているアクションAthena は、ビューで次のアクションをサポートします。このコマンドはクエリエディタで実行できます。

Statement 説明

CREATE VIEW (p. 426) 指定する SELECT クエリから新しいビューを作成します。詳細については、ビューの作成 (p. 124) を参照してください。

オプションの OR REPLACE 句は、既存のビューを更新して置き換えます。

DESCRIBEVIEW (p. 427)

名前が付けられたビューの列のリストを表示します。これにより、複雑なビューの属性を確認できます。

121

Page 131: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドビューの考慮事項

Statement 説明

DROP VIEW (p. 429) 既存のビューを削除します。オプションの IF EXISTS 句は、ビューが存在しない場合に、エラーを抑制します。詳細については、ビューの削除 (p. 125) を参照してください。

SHOW CREATEVIEW (p. 432)

指定するビューを作成する SQL ステートメントを表示します。

SHOW VIEWS (p. 434) 指定するデータベース、あるいは、データベース名を省略する場合の現在のデータベースのビューのリスト。オプションの LIKE 句を正規表現で使用して、ビュー名のリストを制限します。コンソールの左ペインでビューのリストを表示することもできます。

SHOWCOLUMNS (p. 431)

ビュー用のスキーマの列を一覧表示します。

ビューの考慮事項Athena でビューを作成して使用する場合、次の考慮事項が適用されます。

• Athena で作成されたビューをプレビューして操作できるのは、Athena コンソール、AWS Glue データカタログ (使用するために移行した場合)、同じカタログに接続している Amazon EMR クラスターで実行している Presto を使用する場合です。他の方法で作成された Athena ビューをプレビューあるいは追加することはできません。

• [ AWS GlueData Catalogには、 PartitionKeys パラメーターを空のリストに設定し、その値を次のように空リストに設定します。"PartitionKeys":[]. そうでない場合、ビュークエリは失敗します。Athena. 次の例では、"PartitionKeys":[] を使用して Data Catalog から作成されたビューを示します。

aws glue create-table --database-name mydb --table-input '{"Name":"test", "TableType": "EXTERNAL_TABLE", "Owner": "hadoop", "StorageDescriptor":{ "Columns":[{ "Name":"a","Type":"string"},{"Name":"b","Type":"string"}], "Location":"s3://xxxxx/Oct2018/25Oct2018/", "InputFormat":"org.apache.hadoop.mapred.TextInputFormat", "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat", "SerdeInfo":{"SerializationLibrary":"org.apache.hadoop.hive.serde2.OpenCSVSerde", "Parameters":{"separatorChar": "|", "serialization.format": "1"}}},"PartitionKeys":[]}'

• Data Catalog で Athena ビューを作成した場合、Data Catalog はビューをテーブルとして扱います。テーブルレベルのきめ細かなアクセスコントロールを Data Catalog で使用して、これらのビューへのアクセスを制限 (p. 249)できます。

• Athena は再帰的なビューの実行を回避し、そのような場合にはエラーメッセージを表示します。再帰的なビューとは、自身を参照するビュークエリです。

• Athena では、古いビューを検出するとエラーメッセージが表示されます。以下のいずれかが発生すると、古いビューがレポートされます。• このビューは、存在しないテーブルまたはデータベースを参照します。• スキーマまたはメタデータの変更は、参照されるテーブルで行われます。• 参照されるテーブルは削除され、異なるスキーマまたは設定で再度作成されます。

122

Page 132: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドビューの制限

• ネストされたビューのクエリが有効であり、テーブルおよびデータベースが存在する限り、ネストされたビューを作成して実行できます。

ビューの制限• Athena ビュー名には、アンダースコア以外の特殊文字は使用できません (_). 詳細については、以下を

参照してください。 テーブル、データベース、および列の名前 (p. 85).• ビューの名前に予約キーワードを使用しないようにします。予約キーワードを使用している場合、

ビューでのクエリでは予約キーワードを二重引用符で囲みます。「予約キーワード (p. 86)」を参照してください。

• 連合データ ソース、外部Hiveメタストア、または UDFs.• 地理空間関数ではビューを使用できません。• Amazon S3 でビューを使用してデータのアクセスをコントロールすることはできません。ビューをクエ

リするには、Amazon S3 に保存されているデータにアクセスするためのアクセス権限が必要です。詳細については、Amazon S3 にアクセスします (p. 249) を参照してください。

コンソールでビューを操作するAthena コンソールでは、以下のことができます。

• 左側のペインでテーブルがリストされているすべてのビューを見つけます。Athena は SHOWVIEWS (p. 434) オペレーションを実行して、このリストを示します。

• ビューをフィルタリングします。• ビューをプレビューしてプロパティを表示し、編集または削除します。

コンソールでビューアクションをリストするには

ビューは既に作成した場合にのみコンソールで表示されます。

1. Athena コンソールで、[ビュー] を選択してビューを選び、展開します。

次の例で示すように、ビューには含まれる列も表示されます。

2. ビューのリストでビューを選択し、コンテキスト (右クリック) メニューを開きます。アクションメニューアイコン (⋮) が選択したビューで強調され、次の例に示すように、アクションのリストが開きます。

123

Page 133: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドビューの作成

3. オプションを選択します。たとえば、[プロパティの表示] には、ビューの名前、Athena で作成されビューのテーブルのデータベースの名前、および作成されたタイムスタンプが表示されます。

ビューの作成すべての SELECT クエリからビューを作成することができます。

コンソールでビューを作成するには

ビューを作成する前に、データベースを選択してからテーブルを選択します。テーブルで SELECT クエリを実行し、そこからビューを作成します。

1. Athena コンソールで [ビューの作成] を選択します。

クエリエディタでは、サンプルのビュークエリが表示されます。2. サンプルのビュークエリを編集します。テーブル名を指定し、他の構文を追加します。詳細について

は、「CREATE VIEW (p. 426)」および「ビューの例 (p. 125)」を参照してください。

ビュー名にはアンダースコア以外の特殊文字は使用できません (_). 参照 テーブル、データベース、および列の名前 (p. 85). ビューの名前に予約キーワード (p. 86)を使用しないようにします。

3. ビュークエリを実行し、必要に応じてデバックを行い、保存します。

また、クエリエディタでクエリを作成してから、[クエリからビューを作成] を使用することもできます。

無効なビューを実行すると、Athena はエラーメッセージを表示します。

ビューが作成されたテーブルを削除すると、そのビューの実行を試みる場合に Athena はエラーメッセージを表示します。

既存のビューの上部のビューであるネストされたビューを作成することができます。Athena ではそれ自体を参照する、再帰的なビューを実行できません。

124

Page 134: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドビューの例

ビューの例ビュークエリの構文を表示するには、SHOW CREATE VIEW (p. 432) を使用します。

Example 例 1

次の 2 つのテーブルを考えてみます。2 つの列 (id と name) がある employees テーブルと 2 つの列 (idと salary) がある salaries テーブルです。

この例では、 name_salary として SELECT のクエリを IDs テーブルから給与にマップ employees および salaries:

CREATE VIEW name_salary ASSELECT employees.name, salaries.salary FROM employees, salaries WHERE employees.id = salaries.id

Example 例 2

次の例では、view1 という名前のビューを作成して、より複雑なクエリ構文を非表示にします。

このビューは 2 つのテーブル (table1 および table2) の上部で実行され、各テーブルは異なる SELECTクエリです。ビューは、 table1 結果と table2. 結合は列に基づきます a これは両方の表にあります。

CREATE VIEW view1 ASWITH table1 AS ( SELECT a, MAX(b) AS the_max FROM x GROUP BY a ), table2 AS ( SELECT a, AVG(d) AS the_avg FROM y GROUP BY a)SELECT table1.a, table1.the_max, table2.the_avgFROM table1JOIN table2 ON table1.a = table2.a;

ビューの更新ビューを作成すると、このビューは左ペインの [ビュー] リストに表示されます。

ビューを編集するには、そのビューを選択してコンテキストメニュー (右クリック) を選んでから、[クエリの表示/編集] を選択します。クエリエディタでビューを編集することもできます。詳細については、CREATE VIEW (p. 426) を参照してください。

ビューの削除ビューを削除するには、そのビューを選択してコンテキストメニュー (右クリック) を選んでから、[ビューの削除] を選択します。詳細については、DROP VIEW (p. 429) を参照してください。

125

Page 135: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ結果からのテーブルの作成 (CTAS)

クエリ結果からのテーブルの作成 (CTAS)CREATE TABLE AS SELECT (CTAS) クエリは Athena に新しいテーブルを、別のクエリの SELECT ステートメントの結果から作成します。Amazon S3 の指定された位置に、Athena が CTAS ステートメントによって作成されたデータファイルを保存します。構文については、「CREATE TABLE AS (p. 423)」を参照してください。

以下の目的で CTAS クエリを使用します。

• raw データセットのクエリを繰り返さずに、1 回のステップでクエリの結果からテーブルを作成する。これにより raw データセットの操作が簡単になります。

• クエリ結果を他のストレージ形式 (Parquet、ORC など) に変換する。これによりクエリのパフォーマンスが向上し、Athena のクエリコストを削減できます。詳細については、「列指向ストレージ形式 (p. 89)」を参照してください。

• 必要なデータのみが含まれる既存のテーブルのコピーを作成する。

トピック• CTAS クエリに関する考慮事項と制約事項 (p. 126)• コンソールでの CTAS クエリの実行 (p. 128)• バケット化とパーティション化の比較 (p. 131)• CTAS クエリの例 (p. 132)• ETL およびデータ分析での CTAS および INSERT INTO の使用 (p. 135)• CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作

成 (p. 141)

CTAS クエリに関する考慮事項と制約事項次の表に、Athena での CTAS クエリに関して理解する必要がある事項について説明します。

Item (項目) 把握しておくべきこと

CTAS クエリ構文

CTAS クエリ構文は、テーブル作成用の CREATE [EXTERNAL] TABLE 構文とは異なります。「CREATE TABLE AS (p. 423)」を参照してください。

Note

CTAS クエリのテーブル、データベース、または列名には、引用符やバックティックを含めることはできません。そのために、テーブル、データベース、または列名が予約語 (p. 86)を表していないこと、および特殊文字が含まれていないことを確認します (引用符またはバックティックで囲む必要があります)。詳細については、「テーブル、データベース、および列の名前 (p. 85)」を参照してください。

CTAS クエリとビューの違い

CTAS クエリでは Amazon S3 の指定した場所に新しいデータ書き込みますが、ビューではデータを書き込みません。

CTAS クエリ結果の場所

ワークグループが クライアント側の設定を上書きします。 (p. 340) クエリ結果の場所、 Athena 場所のテーブルを作成します。 s3://<workgroup-query-results-location>/tables/<query-id>/. ワークグループに指定されたクエリ結果の場所を表示するには、 ワークグループの詳細の表示 (p. 344).

126

Page 136: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCTAS クエリに関する考慮事項と制約事項

Item (項目) 把握しておくべきことワークグループがクエリ結果の場所を上書きしない場合は、CTAS クエリの構文 WITH(external_location ='s3://location/') を使用して、CTAS クエリ結果の保存場所を指定できます。

Note

external_location プロパティは、空の場所を指定する必要があります。CTAS クエリはバケットのパス位置 (プレフィックス) が空であるかどうかをチェックして、その場所に既にデータが含まれる場合は、データを上書きしません。同じ場所を再度使用するには、バケット内のキープレフィックスの場所のデータを削除します。

external_location 構文を省略し、ワークグループ設定を使用しない場合、Athena はクエリ結果の場所にクライアント側の設定 (p. 116)を使用し、場所 s3://<client-query-results-location>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/ にテーブルを作成します 。

孤立したファイルの検索

CTAS または INSERT INTO ステートメントが失敗した場合、孤立したデータがデータの場所に残っている可能性があります。Athena はバケットからデータ (部分データも含む) を削除しないため、後続のクエリでこの部分データが読み取り可能になる可能性があります。検査または削除する孤立したファイルを見つけるには、Athena に用意されているデータマニフェストファイルを使用して、書き込まれるファイルのリストを追跡できます。詳細については、「クエリ出力ファイルの識別 (p. 113)」および「DataManifestLocation」を参照してください。

クエリの結果を保管する形式

CTAS クエリの結果は、デフォルトで Parquet 形式で保存されます (データストレージ形式を指定しない場合)。CTAS 結果を PARQUET、 ORC、 AVRO、 JSON、および TEXTFILE. 複数文字の区切り文字は、CTAS ではサポートされていません。TEXTFILE フォーマット。CTASクエリは、 SerDe フォーマット変換を解釈します。「Example: Writing Query Results to a Different Format (p. 133)」を参照してください。

圧縮形式 デフォルトでは、GZIP 圧縮が CTAS クエリ結果に使用されます。Parquet および ORC では、SNAPPY を指定することもできます。「Example: Specifying DataStorage and Compression Formats (p. 133)」を参照してください。

パーティションとバケットの制限

CTAS クエリの結果データをパーティション化およびバケット化することができます。詳細については、「バケット化とパーティション化の比較 (p. 131)」を参照してください。Athena では、100 個の一意のパーティションとバケットの組み合わせへの書き込みがサポートされます。たとえば、送信先テーブルにバケットが定義されていない場合、最大 100 個のパーティションを指定できます。バケットを 5 個指定すると、(それぞれ 5 個のバケットを持つ) 20 個のパーティションが許可されます。この数を超えると、エラーが発生します。

送信先テーブルのプロパティを指定する WITH 句の最後に、パーティション化とバケット化の述語を含めます。詳細については、「Example: Creating Bucketedand Partitioned Tables (p. 135)」および「バケット化とパーティション化の比較 (p. 131)」を参照してください。

100 パーティションの制限を回避する方法については、「CTAS および INSERT INTOを使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141)」を参照してください。

暗号化 Amazon S3 で CTAS クエリの結果を暗号化できます。これは Athena で他のクエリの結果を暗号化する方法と同様です。詳細については、Amazon S3 に保存されたクエリ結果の暗号化 (p. 240) を参照してください。

127

Page 137: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドコンソールでの CTAS クエリの実行

Item (項目) 把握しておくべきこと

データ型 CTAS クエリの列のデータ型は元のクエリに指定されているものと同じです。

コンソールでの CTAS クエリの実行Athena コンソールでは、以下のことができます。

• 別のクエリから CTAS クエリを作成する (p. 128)• CTAS クエリを最初から作成する (p. 128)

別のクエリから CTAS クエリを作成するには

1. クエリを実行し、[作成] を選択してから、[Create table from query (クエリからテーブルを作成)] を選択します。

2. [Create a new table on the results of a query (クエリの結果をもとに新しいテーブルを作成)] フォームの各フィールドに次のとおり入力します。

a. [データベース] で、クエリが実行されたデータベースを選択します。b. [Table name (テーブル名)] に新しいテーブルの名前を指定します。小文字とアンダースコアのみ

を使用します。例: my_select_query_parquet。c. [Description (説明)] に、必要に応じてクエリを説明するコメントを追加します。d. 対象 出力位置、オプションで で場所を指定します。 Amazon S3など、 s3://

my_athena_results/mybucket/. 場所を指定せず、ワークグループが クライアントサイド設定の上書き (p. 340)では、次の定義済みの場所が使用されます。s3://aws-athena-query-results-<account>-<region>/<query-name-or-unsaved>/year/month/date/<query-id>/.

e. [Output data format (出力データ形式)] では、サポートされている形式のリストから選択します。形式を指定しない場合は、Parquet が使用されます。「列指向ストレージ形式 (p. 89)」を参照してください。

128

Page 138: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドコンソールでの CTAS クエリの実行

f. [Next (次へ)] を選択し、クエリを確認して必要に応じて修正します。クエリ構文については、「CREATE TABLE AS (p. 423)」を参照してください。以下の例に示すように、プレビューウィンドウが開きます。

129

Page 139: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドコンソールでの CTAS クエリの実行

g. [作成] を選択します。3. [クエリの実行] を選択します。

CTAS クエリを最初から作成するには

CREATE TABLE AS SELECT テンプレートを使用して、CTAS クエリを最初から作成します。

1. Athena コンソールで [クエリエディタ] を選択してから、[CREATE TABLE AS SELECT] を選択します。

2. [クエリエディタ] で必要に応じてクエリを編集します。クエリ構文については、「CREATE TABLEAS (p. 423)」を参照してください。

3. [クエリの実行] を選択します。

130

Page 140: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドバケット化とパーティション化の比較

4. 必要に応じて [名前を付けて保存] を選択して、クエリを保存します。

「CTAS クエリの例 (p. 132)」も参照してください。

バケット化とパーティション化の比較CTAS クエリの結果からデータを Amazon S3 に保存するために、パーティション化またはバケット化を指定することができます。CTAS クエリの詳細については、「CREATE TABLE AS SELECT(CTAS) (p. 126)」を参照してください。

このセクションでは、CTAS クエリにのみ適用されるパーティション化およびバケット化について説明します。CREATE TABLE クエリでのパーティション化に関する一般的なガイドラインについては、「Amazon Athena のパフォーマンスチューニング Tips トップ 10」を参照してください。

以下のヒントを使用して、パーティション化する、バケットを設定する、あるいは両方実行するかどうかを決定します。さらに、これを実行するために CTAS クエリ内の列を選択します。

• CTAS クエリ結果のパーティション化は、計画するパーティションの数が限られているときにうまく機能します。CTAS クエリを実行すると、Amazon S3 の指定した場所に Athena が結果を書き込みます。パーティションを指定する場合、パーティションが作成され、同じ場所の個別のパーティションフォルダに各パーティションが保存されます。CTAS クエリ結果で設定できるパーティションの最大数は、1クエリあたり 100 個です。ただし、この制限は回避できます。詳細については、CTAS および INSERTINTO を使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141) を参照してください。

Amazon S3 にパーティションがあると、Athena のクエリパフォーマンスを高められます。これは特定のパーティションのみに対象を限定したクエリを実行できるからです。その結果 Athena は対象のパーティションのみをスキャンし、クエリのコストとクエリ時間を節約します。パーティション化構文については、「CREATE TABLE AS (p. 423)」で partitioned_by を検索します。

特性が類似した列 (同じ部門のレコードなど)、さらに値の種類が限られている列 (組織内の限られた部門数など) によりデータをパーティション化します。この特性は、データのカーディナリティとして知られています。たとえば、列 department でパーティション化し、この列には限られた数の値しか保持されない場合は、department のパーティション分割がうまく機能し、クエリのレイテンシーが低下します。

• CTAS クエリ結果のバケット化は、カーディナリティが高く、値が均等に分散されている列によってデータをバケット化するときにうまく機能します。

たとえば、timestamp データを保存する列では、非常に多くの異なる値が含まれてしまう可能性があり、それらのデータはデータセット全体で均等に分散されます。つまり、timestamp 型データを格納する列には値が含まれ、NULL 値はありません。これはまた、このような列のデータを多くのバケットに格納できます。ここで、Amazon S3 の各バケットに格納されるデータ量はほぼ同じになります。

CTAS クエリの結果を格納するバケットを示す列を選択するには、値の種類が多い (カーディナリティの高い) 列、およびそのデータをほぼ同じ数に分割して多くのバケットに保管できるような列を使用します。値が含まれていないデータがあるような列はバケット化の適切な対象となりません。これは、データが少ないバケットとデータが大量にあるバケットが生まれることになってしまうからです。これに対し、ほとんど常に値が存在すると予測される列 (timestamp 型の値など) はバケット化に適しています。これはデータのカーディナリティが高く、ほぼ同じ量で格納できるからです。

バケット化構文については、「CREATE TABLE AS (p. 423)」で bucketed_by を検索します。

最終的な結果を得るために、同じ CTAS クエリの結果を格納するパーティション化とバケットを使用できます。データを書き込むこれらの手法は、共存できます。通常、バケット化に使用する列は、パーティション化に使用するものとは異なります。

131

Page 141: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCTAS クエリの例

たとえば、データセットに列がある場合、 department、 sales_quarter、および ts (保管用)timestamp データをタイプする)、 department および sales_quarter. これらの列は、限られた数の部門と営業四半期など、比較的低い値カーディナリティを持ちます。また、パーティションでは、データセットの一部のレコードが null であったり、これらの列に割り当てられた値がない場合でも問題ありません。重要なのは、同じ特性のデータ (同じ部門のデータなど) が、Athena でクエリを実行できる 1 つのパーティションに存在することです。

同時に、すべてのデータに timestamp に格納された値のタイプ ts 同じクエリー結果に対して、列ごとにバケットを設定できます。 ts. このカラムのカーディナリティは高い。そのデータは Amazon S3 の複数のバケットに保存できます。反対のシナリオを考えてみます。タイムスタンプ型のデータ用バケットを作成せず、特定の日付値または時刻値でクエリを実行する場合、Amazon S3 の 1 つの場所に保存された、極めて大量のデータをスキャンする必要があります。代わりに、日付と時間に関連した結果を保存するためのバケットを設定した場合、値があるバケットのみをスキャンしてクエリを実行でき、大量のデータをスキャンする、実行時間が長いクエリが不要になります。

CTAS クエリの例以下の例を使用して CTAS クエリを作成します。CTAS 構文の詳細については、「CREATE TABLEAS (p. 423)」を参照してください。

このセクションの内容:

• Example: Duplicating a Table by Selecting All Columns (p. 132)• Example: Selecting Specific Columns From One or More Tables (p. 132)• Example: Creating an Empty Copy of an Existing Table (p. 133)• Example: Specifying Data Storage and Compression Formats (p. 133)• Example: Writing Query Results to a Different Format (p. 133)• Example: Creating Unpartitioned Tables (p. 134)• Example: Creating Partitioned Tables (p. 134)• Example: Creating Bucketed and Partitioned Tables (p. 135)

Example 例: [すべての列] を選択してテーブルを複製する

次の例では、テーブルからすべての列をコピーしてテーブルを作成します。

CREATE TABLE new_table AS SELECT * FROM old_table;

同じ例の次のバリエーションで、SELECT ステートメントには WHERE 句も含まれています。この場合、クエリはテーブルから、WHERE 句を満たす行のみを選択します。

CREATE TABLE new_table AS SELECT * FROM old_table WHERE condition;

Example 例: 1 つ以上のテーブルから特定の列を選択

次の例では、別のテーブルからの列のセットで実行される新しいクエリが作成されます。

CREATE TABLE new_table AS SELECT column_1, column_2, ... column_n

132

Page 142: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCTAS クエリの例

FROM old_table;

同じ例のこのバリエーションで、複数のテーブルの特定の列から新しいテーブルを作成します。

CREATE TABLE new_table ASSELECT column_1, column_2, ... column_n FROM old_table_1, old_table_2, ... old_table_n;

Example 例: 既存のテーブルの空のコピーの作成

以下の例では、WITH NO DATA を使用して、元のテーブルと同じスキーマである、空の新しいテーブルを作成します。

CREATE TABLE new_table AS SELECT * FROM old_tableWITH NO DATA;

Example 例: データ ストレージと圧縮フォーマットの指定

次の例では、CTAS クエリを使用して、ソーステーブルから異なる形式の Parquet データを含む新しいテーブルを作成します。以下を指定できます。 PARQUET、 ORC、 AVRO、 JSON、および TEXTFILE 同様の方法で行います。

また、この例では、圧縮を次のように指定しています。 SNAPPY. 省略した場合は、GZIPが使用されます。Parquet と ORC で保存されている CTAS クエリ結果に対して GZIP および SNAPPY の圧縮形式がサポートされています。

CREATE TABLE new_tableWITH ( format = 'Parquet', parquet_compression = 'SNAPPY')AS SELECT *FROM old_table;

次の例は似ていますが、ORC で CTAS クエリの結果を保存し、orc_compression パラメータを使用して圧縮形式を指定します。圧縮形式を省略した場合、デフォルトで Athena は GZIP を使用します。

CREATE TABLE new_tableWITH (format = 'ORC', orc_compression = 'SNAPPY')AS SELECT *FROM old_table ;

Example 例: クエリ結果を異なるフォーマットに書き込む

次の CTAS クエリは、old_table からすべてのレコードを選択します (これは CSV 形式または別の形式で保存できます)。また、基になるデータを ORC 形式で Amazon S3 に保存した新しいテーブルを作成します。

CREATE TABLE my_orc_ctas_tableWITH ( external_location = 's3://my_athena_results/my_orc_stas_table/', format = 'ORC')AS SELECT * FROM old_table;

133

Page 143: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCTAS クエリの例

Example 例: パーティション化されていないテーブルの作成

次の例では、パーティション化されていないテーブルを作成します。このテーブル データは異なる形式で格納されます。これらの例の一部では、外部の場所を指定します。

次の例では、テキストファイルとして結果を保存する CTAS クエリが作成されます。

CREATE TABLE ctas_csv_unpartitioned WITH ( format = 'TEXTFILE', external_location = 's3://my_athena_results/ctas_csv_unpartitioned/') AS SELECT key1, name1, address1, comment1FROM table1;

次の例では、結果は Parquet で保存され、デフォルトの結果の場所が使用されます。

CREATE TABLE ctas_parquet_unpartitioned WITH (format = 'PARQUET') AS SELECT key1, name1, comment1FROM table1;

次のクエリでは、テーブルは JSON で格納され、特定の列が元のテーブルの結果から選択されます。

CREATE TABLE ctas_json_unpartitioned WITH ( format = 'JSON', external_location = 's3://my_athena_results/ctas_json_unpartitioned/') AS SELECT key1, name1, address1, comment1FROM table1;

次の例では、形式は ORC です。

CREATE TABLE ctas_orc_unpartitioned WITH ( format = 'ORC') AS SELECT key1, name1, comment1 FROM table1;

次の例では、形式は Avro です。

CREATE TABLE ctas_avro_unpartitioned WITH ( format = 'AVRO', external_location = 's3://my_athena_results/ctas_avro_unpartitioned/') AS SELECT key1, name1, comment1FROM table1;

Example 例: パーティション テーブルの作成

次の例では、WITH 句で partitioned_by と他のプロパティを使用した、異なるストレージ形式のパーティション テーブルに対する CREATE TABLE AS SELECT クエリを示します。構文については、「CTAS テーブルのプロパティ (p. 424)」を参照してください。パーティションの列の選択の詳細については、「バケット化とパーティション化の比較 (p. 131)」を参照してください。

Note

SELECT ステートメントの列リストの末尾にパーティション列をリストします。複数の列でパーティション化でき、最大 100 個の一意のパーティションとバケットの組み合わせを持つことがで

134

Page 144: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドETL での CTAS および INSERT INTO の使用

きます。たとえば、バケットが指定されていない場合、100 個のパーティションを持つことができます。

CREATE TABLE ctas_csv_partitioned WITH ( format = 'TEXTFILE', external_location = 's3://my_athena_results/ctas_csv_partitioned/', partitioned_by = ARRAY['key1']) AS SELECT name1, address1, comment1, key1FROM tables1;

CREATE TABLE ctas_json_partitioned WITH ( format = 'JSON', external_location = 's3://my_athena_results/ctas_json_partitioned/', partitioned_by = ARRAY['key1']) AS select name1, address1, comment1, key1 FROM table1;

Example 例: バケットおよびパーティション テーブルの作成

次の例では、Amazon S3 へのクエリ結果の保存にパーティション化とバケット化の両方を使用するCREATE TABLE AS SELECT クエリを示します。テーブルの結果は、異なる列でパーティション化およびバケット化されます。Athena は、最大 100 個の一意のバケットとパーティションの組み合わせをサポートします。たとえば、5 個のバケットを持つテーブルを作成する場合、それぞれ 5 個のバケットを持つ 20個のパーティションがサポートされます。構文については、「CTAS テーブルのプロパティ (p. 424)」を参照してください。

バケット化の列の選択の詳細については、「バケット化とパーティション化の比較 (p. 131)」を参照してください。

CREATE TABLE ctas_avro_bucketed WITH ( format = 'AVRO', external_location = 's3://my_athena_results/ctas_avro_bucketed/', partitioned_by = ARRAY['nationkey'], bucketed_by = ARRAY['mktsegment'], bucket_count = 3) AS SELECT key1, name1, address1, phone1, acctbal, mktsegment, comment1, nationkey FROM table1;

ETL およびデータ分析での CTAS および INSERTINTO の使用Athena で Create Table as Select (CTAS (p. 126)) および INSERT INTO (p. 408) ステートメントを使用して、データ処理のために、Amazon S3 へのデータの抽出、変換、ロード (ETL) を行うことができます。このトピックでは、これらのステートメントを使用することで、データセットをパーティション化して列指向データ形式に変換し、データ分析用に最適化する方法について説明します。

CTAS ステートメントでは、標準の SELECT (p. 403) クエリを使用して新しいテーブルを作成します。CTAS ステートメントを使用して、分析用のデータのサブセットを作成できます。1 つの CTAS ステートメントで、データのパーティション化、圧縮の指定、Apache Parquet や Apache ORC などの列指向形式へのデータ変換を行うことができます。CTAS クエリを実行すると、それによって作成されるテーブルとパーティションが自動的に AWS Glue データカタログ に追加されます。これにより、作成した新しいテーブルとパーティションは、その後のクエリですぐに使用できます。

INSERT INTO ステートメントは、ソーステーブルで実行される SELECT クエリステートメントに基づいて、ターゲットテーブルに新しい行を挿入します。INSERT INTO ステートメントを使用すると、CTAS が

135

Page 145: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドETL での CTAS および INSERT INTO の使用

サポートするすべての変換を使用して、CSV 形式のソーステーブルデータをターゲットテーブルデータに変換およびロードできます。

OverviewAthena では CTAS ステートメントを使用して、データの初期バッチ変換を実行します。次に、複数のINSERT INTO ステートメントを使用して、CTAS ステートメントによって作成されたテーブルに対して増分更新を行います。

Steps

• ステップ 1: 元のデータセットに基づいてテーブルを作成する (p. 136)• ステップ 2: CTAS を使用してデータをパーティション化、変換、圧縮する (p. 137)• ステップ 3: INSERT INTO を使用してデータを追加する (p. 138)• ステップ 4: パフォーマンスとコストの差を測定する (p. 140)

ステップ 1: 元のデータセットに基づいてテーブルを作成するこのトピックの例では、一般公開されている NOAA Global Historical Climatology Network Daily (GHCN-D)データセットの Amazon S3 が読み取り可能なサブセットを使用します。Amazon S3 のデータには以下の特徴があります。

Location: s3://aws-bigdata-blog/artifacts/athena-ctas-insert-into-blog/Total objects: 41727Size of CSV dataset: 11.3 GBRegion: us-east-1

元のデータは、パーティションなしで Amazon S3 に保存されます。データは、以下のようなファイルのCSV 形式です。

2019-10-31 13:06:57 413.1 KiB artifacts/athena-ctas-insert-into-blog/2010.csv00002019-10-31 13:06:57 412.0 KiB artifacts/athena-ctas-insert-into-blog/2010.csv00012019-10-31 13:06:57 34.4 KiB artifacts/athena-ctas-insert-into-blog/2010.csv00022019-10-31 13:06:57 412.2 KiB artifacts/athena-ctas-insert-into-blog/2010.csv01002019-10-31 13:06:57 412.7 KiB artifacts/athena-ctas-insert-into-blog/2010.csv0101

このサンプルのファイルサイズは比較的小さくなっています。それらを大きなファイルにマージすることで、ファイルの合計数を減らし、クエリのパフォーマンスを向上させることができます。CTAS ステートメントと INSERT INTO ステートメントを使用して、クエリのパフォーマンスを向上させることができます。

サンプルデータセットに基づいてデータベースとテーブルを作成するには

1. Athenaコンソールで、米国東部(バージニア北部)AWSリージョンを選択します。のこのチュートリアルのすべてのクエリを実行してくださいus-east-1。

2. Athena クエリエディタで、CREATE DATABASE (p. 419) コマンドを実行してデータベースを作成します。

CREATE DATABASE blogdb

3. 次のステートメントを実行して、テーブルを作成 (p. 420)します。

CREATE EXTERNAL TABLE `blogdb`.`original_csv` ( `id` string, `date` string,

136

Page 146: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドETL での CTAS および INSERT INTO の使用

`element` string, `datavalue` bigint, `mflag` string, `qflag` string, `sflag` string, `obstime` bigint)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://aws-bigdata-blog/artifacts/athena-ctas-insert-into-blog/'

ステップ 2: CTAS を使用してデータをパーティション化、変換、圧縮するテーブルを作成したら、1 つの CTAS (p. 126) ステートメントを使用して、データを Snappy 圧縮でParquet 形式に変換し、データを年ごとにパーティション化できます。

ステップ 1 で作成したテーブルには、日付が YYYYMMDD としてフォーマットされた date フィールド (例:20100104) があります。新しいテーブルが year でパーティション化されるため、次の手順のサンプルステートメントでは、Presto 関数 substr("date",1,4) を使用して date フィールドから値 year を抽出します。

Snappy 圧縮を使用して、年ごとにパーティション化して Parquet 形式にデータを変換するには

• 次の CTAS ステートメントを実行します。以下のように置き換えます。your-bucket Amazon S3バケットの場所に置き換えます。

CREATE table new_parquetWITH (format='PARQUET',parquet_compression='SNAPPY',partitioned_by=array['year'],external_location = 's3://your-bucket/optimized-data/')ASSELECT id, date, element, datavalue, mflag, qflag, sflag, obstime, substr("date",1,4) AS yearFROM original_csvWHERE cast(substr("date",1,4) AS bigint) >= 2015 AND cast(substr("date",1,4) AS bigint) <= 2019

Note

この例では、作成するテーブルには 2015 年から 2019 年のデータのみが含まれます。ステップ 3 では、INSERT INTO コマンドを使用して、このテーブルに新しいデータを追加します。

クエリが完了したら、次の手順を使用して、CTAS ステートメントで指定した Amazon S3 の場所の出力を検証します。

137

Page 147: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドETL での CTAS および INSERT INTO の使用

CTAS ステートメントによって作成されたパーティションと parquet ファイルを表示するには

1. 作成されたパーティションを表示するには、次の AWS CLI コマンドを実行します。必ず、最後にスラッシュ (/) を含めてください。

aws s3 ls s3://your-bucket/optimized-data/

出力はパーティションを示しています。

PRE year=2015/ PRE year=2016/ PRE year=2017/ PRE year=2018/ PRE year=2019/

2. Parquet ファイルを表示するには、次のコマンドを実行します。出力を最初の 5 つの結果に制限する| head-5 オプションは、Windows では使用できません。

aws s3 ls s3://your-bucket/optimized-data/ --recursive --human-readable | head -5

出力は次のようになります。

2019-10-31 14:51:05 7.3 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_1be48df2-3154-438b-b61d-8fb23809679d2019-10-31 14:51:05 7.0 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_2a57f4e2-ffa0-4be3-9c3f-28b16d86ed5a2019-10-31 14:51:05 9.9 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_34381db1-00ca-4092-bd65-ab04e06dc7992019-10-31 14:51:05 7.5 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_354a2bc1-345f-4996-9073-096cb863308d2019-10-31 14:51:05 6.9 MiB optimized-data/year=2015/20191031_215021_00001_3f42d_42da4cfd-6e21-40a1-8152-0b902da385a1

ステップ 3: INSERT INTO を使用してデータを追加するステップ 2 では、CTAS を使用して 2015 年から 2019 年までのデータのパーティションを持つテーブルを作成しました。しかし、元のデータセットには、2010 年から 2014 年までのデータも含まれています。次に、INSERT INTO (p. 408) ステートメントを使用してそのデータを追加します。

1 つ以上の INSERT INTO ステートメントを使用してテーブルにデータを追加するには

1. WHERE 句で 2015 年より前の年を指定して、次の INSERT INTO コマンドを実行します。

INSERT INTO new_parquetSELECT id, date, element, datavalue, mflag, qflag, sflag, obstime, substr("date",1,4) AS yearFROM original_csvWHERE cast(substr("date",1,4) AS bigint) < 2015

2. 次の構文を使用して aws s3 ls コマンドを再度実行します。

138

Page 148: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドETL での CTAS および INSERT INTO の使用

aws s3 ls s3://your-bucket/optimized-data/

出力には、新しいパーティションが表示されます。

PRE year=2010/ PRE year=2011/ PRE year=2012/ PRE year=2013/ PRE year=2014/ PRE year=2015/ PRE year=2016/ PRE year=2017/ PRE year=2018/ PRE year=2019/

3. Parquet 形式の圧縮と列指向ストレージを使用して取得したデータセットのサイズが小さくなっていることを確認するには、次のコマンドを実行します。

aws s3 ls s3://your-bucket/optimized-data/ --recursive --human-readable --summarize

次の結果は、Snappy 圧縮を使用した parquet 後のデータセットのサイズが 1.2 GB であることを示しています。

...2020-01-22 18:12:02 2.8 MiB optimized-data/year=2019/20200122_181132_00003_nja5r_f0182e6c-38f4-4245-afa2-9f5bfa8d6d8f2020-01-22 18:11:59 3.7 MiB optimized-data/year=2019/20200122_181132_00003_nja5r_fd9906b7-06cf-4055-a05b-f050e139946eTotal Objects: 300 Total Size: 1.2 GiB

4. さらに多くの CSV データが元のテーブルに追加されている場合は、INSERT INTO ステートメントを使用して、そのデータを parquet テーブルに追加できます。たとえば、2020 年の新しいデータがある場合は、次の INSERT INTO ステートメントを実行できます。このステートメントは、データおよび関連するパーティションを new_parquet テーブルに追加します。

INSERT INTO new_parquetSELECT id, date, element, datavalue, mflag, qflag, sflag, obstime, substr("date",1,4) AS yearFROM original_csvWHERE cast(substr("date",1,4) AS bigint) = 2020

Note

この INSERT INTO ステートメントは、最大 100 個のパーティションの送信先テーブルへの書き込みをサポートします。ただし、100 個を超えるパーティションを追加するには、複数の INSERT INTO ステートメントを実行できます。詳細については、CTAS および INSERTINTO を使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141) を参照してください。

139

Page 149: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドETL での CTAS および INSERT INTO の使用

ステップ 4: パフォーマンスとコストの差を測定するデータを変換した後、新しいテーブルと古いテーブルで同じクエリを実行し、結果を比較することで、パフォーマンスの向上とコスト削減を測定できます。

Note

Athena クエリごとのコストについては、「Amazon Athena の料金表」を参照してください。

パフォーマンスの向上とコストの差を測定するには

1. 元のテーブルで次のクエリを実行します。このクエリは、年のすべての値IDsで個別の数を検索します。

SELECT substr("date",1,4) as year, COUNT(DISTINCT id)FROM original_csvGROUP BY 1 ORDER BY 1 DESC

2. クエリが実行された時刻とスキャンされたデータの量を確認します。3. 新しいテーブルで同じクエリを実行し、クエリのランタイムとスキャンされたデータ量を確認しま

す。

SELECT year, COUNT(DISTINCT id)FROM new_parquetGROUP BY 1 ORDER BY 1 DESC

4. 結果を比較し、パフォーマンスとコストの差を計算します。次のサンプル結果は、新しいテーブルのテストクエリが古いテーブルのクエリよりも高速で安価であることを示しています。

表 ランタイム スキャンされたデータ

元 16.88 秒 11.35 GB

新規 3.79 秒 428.05 MB

5. 元のテーブルで次のサンプルクエリを実行します。このクエリでは、2018 年の地球の平均最高温度(摂氏)、平均最低気温 (摂氏)、平均降水量 (mm) を計算します。

SELECT element, round(avg(CAST(datavalue AS real)/10),2) AS valueFROM original_csvWHERE element IN ('TMIN', 'TMAX', 'PRCP') AND substr("date",1,4) = '2018'GROUP BY 1

6. クエリが実行された時刻とスキャンされたデータの量を確認します。7. 新しいテーブルで同じクエリを実行し、クエリのランタイムとスキャンされたデータ量を確認しま

す。

SELECT element, round(avg(CAST(datavalue AS real)/10),2) AS valueFROM new_parquetWHERE element IN ('TMIN', 'TMAX', 'PRCP') and year = '2018'GROUP BY 1

8. 結果を比較し、パフォーマンスとコストの差を計算します。次のサンプル結果は、新しいテーブルのテストクエリが古いテーブルのクエリよりも高速で安価であることを示しています。

140

Page 150: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド100 個を超えるパーティションを持つテーブルの作成

表 ランタイム スキャンされたデータ

元 18.65 秒 11.35 GB

新規 1.92 秒 68 MB

Summaryこのトピックでは、Athena で CTAS および INSERT INTO ステートメントを使用して ETL オペレーションを実行する方法を説明しました。最初の変換セットは、データを Snappy 圧縮で Parquet 形式に変換する CTAS ステートメントを使用して実行しました。また、この CTAS ステートメントでは、データセットをパーティション化されていないものからパーティション化されたものに変換しました。これにより、サイズが小さくなり、クエリの実行コストが削減されました。新しいデータが使用可能になったら、INSERT INTO ステートメントを使用して、CTAS ステートメントで作成したテーブルにデータを変換およびロードできます。

CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作成CREATE TABLE AS SELECT (CTAS (p. 126)) クエリを使用すると、クエリあたり最大 100 個のパーティションを作成できます。同様に、INSERT INTO ステートメントを使用すると、宛先テーブルに最大100 個のパーティションを追加できます。これらの制限を回避するには、CTAS ステートメントと、それぞれ最大 100 個のパーティションを作成または挿入する一連の INSERT INTO ステートメントを使用できます。

このトピックの例では、Amazon S3 バケットの場所 s3: //<my-tpch-bucket>/ にデータがある、tpch100 というデータベースを使用します。

CTAS および INSERT INTO を使用して 100 個を超えるパーティションのテーブルを作成するには

1. CREATE EXTERNAL TABLE ステートメントを使用して、目的のフィールドでパーティション化されたテーブルを作成します。

次の例のステートメントは、列 l_shipdate でデータを分割します。テーブルには 2525 個のパーティションがあります。

CREATE EXTERNAL TABLE `tpch100.lineitem_parq_partitioned`( `l_orderkey` int, `l_partkey` int, `l_suppkey` int, `l_linenumber` int, `l_quantity` double, `l_extendedprice` double, `l_discount` double, `l_tax` double, `l_returnflag` string, `l_linestatus` string, `l_commitdate` string, `l_receiptdate` string, `l_shipinstruct` string, `l_comment` string)PARTITIONED BY ( `l_shipdate` string)ROW FORMAT SERDE

141

Page 151: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド100 個を超えるパーティションを持つテーブルの作成

'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://<my-tpch-bucket>/lineitem/'

2. 次のような SHOW PARTITIONS <table_name> コマンドを実行して、パーティションをリストします。

SHOW PARTITIONS lineitem_parq_partitioned

次に、結果の一部を示します。

/*l_shipdate=1992-01-02l_shipdate=1992-01-03l_shipdate=1992-01-04l_shipdate=1992-01-05l_shipdate=1992-01-06

...

l_shipdate=1998-11-24l_shipdate=1998-11-25l_shipdate=1998-11-26l_shipdate=1998-11-27l_shipdate=1998-11-28l_shipdate=1998-11-29l_shipdate=1998-11-30l_shipdate=1998-12-01*/

3. CTAS クエリを実行して、パーティション化されたテーブルを作成します。

次の例では、my_lineitem_parq_partitioned というテーブルを作成し、WHERE 句を使用して、DATE を 1992-02-01 より前の日付に制限します。サンプルデータセットは 1992 年 1 月から始まるため、1992 年 1 月のパーティションのみが作成されます。

CREATE table my_lineitem_parq_partitionedWITH (partitioned_by = ARRAY['l_shipdate']) ASSELECT l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_commitdate, l_receiptdate, l_shipinstruct, l_comment, l_shipdateFROM tpch100.lineitem_parq_partitionedWHERE cast(l_shipdate as timestamp) < DATE ('1992-02-01');

4. SHOW PARTITIONS コマンドを実行して、必要なパーティションがテーブルに含まれていることを確認します。

SHOW PARTITIONS my_lineitem_parq_partitioned;

142

Page 152: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド100 個を超えるパーティションを持つテーブルの作成

この例のパーティションは 1992 年 1 月のものです。

/*l_shipdate=1992-01-02l_shipdate=1992-01-03l_shipdate=1992-01-04l_shipdate=1992-01-05l_shipdate=1992-01-06l_shipdate=1992-01-07l_shipdate=1992-01-08l_shipdate=1992-01-09l_shipdate=1992-01-10l_shipdate=1992-01-11l_shipdate=1992-01-12l_shipdate=1992-01-13l_shipdate=1992-01-14l_shipdate=1992-01-15l_shipdate=1992-01-16l_shipdate=1992-01-17l_shipdate=1992-01-18l_shipdate=1992-01-19l_shipdate=1992-01-20l_shipdate=1992-01-21l_shipdate=1992-01-22l_shipdate=1992-01-23l_shipdate=1992-01-24l_shipdate=1992-01-25l_shipdate=1992-01-26l_shipdate=1992-01-27l_shipdate=1992-01-28l_shipdate=1992-01-29l_shipdate=1992-01-30l_shipdate=1992-01-31*/

5. INSERT INTO ステートメントを使用して、テーブルにパーティションを追加します。

次の例では、1992 年 2 月の日付のパーティションを追加します。

INSERT INTO my_lineitem_parq_partitionedSELECT l_orderkey, l_partkey, l_suppkey, l_linenumber, l_quantity, l_extendedprice, l_discount, l_tax, l_returnflag, l_linestatus, l_commitdate, l_receiptdate, l_shipinstruct, l_comment, l_shipdateFROM tpch100.lineitem_parq_partitionedWHERE cast(l_shipdate as timestamp) >= DATE ('1992-02-01')AND cast(l_shipdate as timestamp) < DATE ('1992-03-01');

6. SHOW PARTITIONS をもう一度実行します。

SHOW PARTITIONS my_lineitem_parq_partitioned;

143

Page 153: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドスキーマの更新を処理する

サンプルテーブルには、1992 年 1 月と 2 月のパーティションがあります。

/*l_shipdate=1992-01-02l_shipdate=1992-01-03l_shipdate=1992-01-04l_shipdate=1992-01-05l_shipdate=1992-01-06

...

l_shipdate=1992-02-20l_shipdate=1992-02-21l_shipdate=1992-02-22l_shipdate=1992-02-23l_shipdate=1992-02-24l_shipdate=1992-02-25l_shipdate=1992-02-26l_shipdate=1992-02-27l_shipdate=1992-02-28l_shipdate=1992-02-29*/

7. 各パーティションが 100 個以下の INSERT INTO ステートメントを引き続き使用します。必要なパーティション数に達するまで続行します。

Important

WHERE 条件を設定するときは、クエリが重複しないようにしてください。そうしないと、一部のパーティションにデータが重複している可能性があります。

スキーマの更新を処理するこのセクションでは、さまざまなデータ形式におけるスキーマの更新を処理するガイドを紹介します。Athena はスキーマの読み取りクエリエンジンです。これは、Athena でテーブルを作成するときに、データの読み取りにスキーマを適用します。基盤となるデータは変更あるいは再作成されません。

テーブルスキーマの変更が予想される場合は、ニーズに適した形式で作成することを検討します。目的としては、進化するスキーマに対して既存の Athena クエリを再利用して、パーティションされたテーブルでクエリを実行するときにスキーマの不一致を回避することです。

この目的を達成するには、次のトピックに基づいてテーブルのデータ形式を選択します。

トピック• 総括 Athena における更新とデータ形式 (p. 144)• Parquet および ORC におけるインデックスアクセス (p. 146)• 更新型 (p. 147)• パーティションがあるテーブルを更新する (p. 152)

総括 Athena における更新とデータ形式次のテーブルは、データストレージ形式と、サポートされているスキーマ操作をまとめたものです。このテーブルを使用すると、形式を選択し、スキーマが時間の経過と共に変更しても引き続き Athena クエリを使用するのに役立ちます。

このテーブルでは、Parquet と ORC は、デフォルトの列アクセス方法が異なる列形式であることに注意してください。デフォルトでは、Parquet は名前とインデックス (順序値) による ORC で列にアクセスしま

144

Page 154: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド総括 Athena における更新とデータ形式

す。したがって、Athena は、テーブルの作成時に定義された SerDe プロパティを提供して、デフォルトの列アクセス方式を切り替えることで、スキーマの進化に柔軟性を持たせます。

Parquet では、parquet.column.index.access プロパティを true に設定します。これにより、列のアクセス方法で列の順序番号を使用する設定になります。このプロパティを falseに設定すると、列のアクセス方法で列名を使用するように変更されます。同様に、ORC ではorc.column.index.access プロパティを使用して列のアクセス方法を制御します。詳細については、「Index Access in ORC and Parquet(ORC および Parquet のインデックスアクセス) (p. 146)」を参照してください。

CSV と TSV を使用すると、列の並べ替えやテーブルの先頭に列を追加する以外のすべてのスキーマ操作を実行できます。たとえば、スキーマの変更で列の名前を変更するだけで、列の名前を削除する必要がない場合は、CSV または TSV でテーブルを作成することができます。列を削除する必要がある場合は、CSV または TSV を使用せず、その他のサポートされている形式のいずれかを使用します。好ましいのは、Parquet または ORC などの列方向の形式です。

Athena におけるスキーマの更新とデータ形式

予想されるスキーマ更新のタイプ

総括 CSV(ヘッダー有りあるいはなし) および TSV

JSON:AVROPARQUET名前で読む(デフォルト)

PARQUETインデックスで読み取る

ORCIndexによる読み取り(デフォルト)

ORC 名前で読む

列の名前変更 (p. 150)

データを CSV および TSV に保存するか、ORC およびParquet でインデックスに読み込んだ場合に保存します。

Y N N N Y Y N

テーブルの先頭または中間に列を追加する (p. 148)

データをJSON、AVRO に保存するか、Parquetおよび ORC で名前に読み込んだ場合に保存します。CSVや TSV を使用しないでください。

N Y Y Y N N Y

テーブルの末尾に列を追加する (p. 149)

CSV またはTSV、JSON、AVRO、ORC、または Parquet 形式でデータを保存します。

Y Y Y Y Y Y Y

列の削除 (p. 149)

データをJSON、AVRO に保存するか、Parquetおよび ORC で名前に読み込んだ場合に保存します。CSVや TSV を使用しないでください。

N Y Y Y N N Y

列の順序変更 (p. 151)

データをAVRO、JSON に保存するか、ORC お

N Y Y Y N N Y

145

Page 155: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドParquet および ORC におけるインデックスアクセス

予想されるスキーマ更新のタイプ

総括 CSV(ヘッダー有りあるいはなし) および TSV

JSON:AVROPARQUET名前で読む(デフォルト)

PARQUETインデックスで読み取る

ORCIndexによる読み取り(デフォルト)

ORC 名前で読む

よび Parquet で名前に読み込んだ場合に保存します。

列のデータ型の変更 (p. 151)

任意の形式でデータを保存できますが、データ型に互換性があることを確認するために Athena でクエリをテストします。Parquet および ORC のデータ型を変更した場合は、パーティション分割されたテーブルでのみ機能します。

Y Y Y Y Y Y Y

Parquet および ORC におけるインデックスアクセスPARQUET および ORC は、インデックス引または名前で読み取り可能な列データストレージ形式です。これらの形式のいずれかでデータを保存すると、スキーマのすべてのオペレーションを実行し、スキーマの不一致エラーなしで Athena クエリを実行できます。

• Athena デフォルトでインデックスでORCを読み取る、で定義 SERDEPROPERTIES( 'orc.column.index.access'='true')。 詳細については、以下を参照してください。 ORC: インデックスで読み取る (p. 146).

• Athenaは デフォルトで名前によるParquet、で定義 SERDEPROPERTIES( 'parquet.column.index.access'='false')。 詳細については、以下を参照してください。PARQUET: 名前で読む (p. 147).

これらはデフォルトであるため、これらの SerDe プロパティを CREATE TABLE クエリで使用するのはオプションで、暗黙的に使用されます。これらを使用すると、、他のオペレーションを防ぎながら、スキーマの更新オペレーションを実行することができます。これらのオペレーションを有効にするには、別のCREATE TABLE クエリを実行し、SerDe の設定を変更します。

Note

SerDe のプロパティは、各パーティションに自動的に伝播されません。各パーティションにSerDe プロパティを設定するには、ALTER TABLE ADD PARTITION ステートメントを使用します。このプロセスを自動化するには、ALTER TABLE ADD PARTITION ステートメントを実行するスクリプトを記述します。

以下のセクションで、これらのケースについて詳しく説明します。

ORC インデックスで読み取るORC 内のテーブルは、デフォルトでインデックスで読み取られます。これは、次の構文で定義されます。

146

Page 156: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド更新型

WITH SERDEPROPERTIES ( 'orc.column.index.access'='true')

インデックスで読み取ると、列の名前を変更できます。ただし、列の削除やテーブルの中間での追加ができなくなります。

ORC を名前で読み取り、テーブルの中間に列を追加したり、ORC の列を削除したりするには、CREATETABLE ステートメントで、SerDe プロパティ orc.column.index.access を false に設定します。この設定では、列の名前を変更する機能が失われます。

Note

いつ orc.column.index.access は に設定されます false、 Athena 大文字と小文字が区別されます。これにより、 Athena Spark を使用している場合は、データを読み取るのが難しくなります。Spark を使用するには、小文字と大文字を使用する列名が必要です。回避策は、列の名前を小文字に変更することです。

次の例は、ORC を変更して名前で読み取る方法を示しています。

CREATE EXTERNAL TABLE orders_orc_read_by_name ( `o_comment` string, `o_orderkey` int, `o_custkey` int, `o_orderpriority` string, `o_orderstatus` string, `o_clerk` string, `o_shippriority` int, `o_orderdate` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' WITH SERDEPROPERTIES ( 'orc.column.index.access'='false') STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'LOCATION 's3://schema_updates/orders_orc/';

Parquet 名前で読むParquet のテーブルはデフォルトで名前で読み取られます。これは、次の構文で定義されます。

WITH SERDEPROPERTIES ( 'parquet.column.index.access'='false')

名前で読み取ると、テーブルの中間に列を追加したり、列を削除したりできます。ただし、列の名前を変更することができなくなります。

Parquet にインデックスで読み取らせて列の名前を変更できるようにするには、parquet.column.index.access SerDe プロパティを true に設定してテーブルを作成する必要があります。

更新型これは、テーブルのスキーマが使用できる更新の型です。スキーマの各型を確認し、Athena で実行することができるデータ形式を指定します。

• テーブルの先頭または中間に列を追加する (p. 148)

147

Page 157: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド更新型

• テーブルの末尾に列を追加する (p. 149)• 列の削除 (p. 149)• 列の名前変更 (p. 150)• 列の順序変更 (p. 151)• 列のデータ型の変更 (p. 151)

スキーマがどのように発展するのか、あるいは Athena クエリで継続して使用するのかの予測に応じて、互換性のあるデータ形式を選択します。

指図情報を orders テーブルは2つの形式で存在します。CSVおよびParquet。

以下の例では、Parquet でテーブルを作成します。

CREATE EXTERNAL TABLE orders_parquet ( `orderkey` int, `orderstatus` string, `totalprice` double, `orderdate` string, `orderpriority` string, `clerk` string, `shippriority` int) STORED AS PARQUETLOCATION 's3://schema_updates/orders_ parquet/';

以下の例では、CSV で同じテーブルを作成します。

CREATE EXTERNAL TABLE orders_csv ( `orderkey` int, `orderstatus` string, `totalprice` double, `orderdate` string, `orderpriority` string, `clerk` string, `shippriority` int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','LOCATION 's3://schema_updates/orders_csv/';

以下のセクションでは、これらのテーブルの更新がどのように Athena クエリに影響するかを説明します。

テーブルの先頭または中間に列を追加する列の追加は最も頻繁なスキーマの変更の 1 つです。たとえば、新しいデータでテーブルをエンリッチ化するために、新しい列を追加することがあります。または、既存の列のソースが変更された場合に新しい列を追加し、この列の以前のバージョンを保持してそれに依存するアプリケーションを調整することもあります。

テーブルの先頭または中間に列を追加し、既存のテーブルに対してクエリを実行するには、SerDe プロパティが名前で読み取るように設定されている場合は、AVRO、JSON、および Parquet と ORC を使用します。詳細については、「Index Access in ORC and Parquet (ORC および Parquet のインデックスアクセス) (p. 146)」を参照してください。

これらの形式は順序に依存するため、CSV および TSV のテーブルの先頭または中間に列を追加しないでください。このような場合に列を追加すると、パーティションのスキーマが変更されたときにスキーマの不一致エラーが発生します。

以下の例では、JSON テーブルの中間に列を追加しています。

148

Page 158: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド更新型

CREATE EXTERNAL TABLE orders_json_column_addition ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_comment` string, `o_totalprice` double, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` int, ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'LOCATION 's3://schema_updates/orders_json/';

テーブルの末尾に列を追加するParquet、ORC、Avro、JSON、CSV、TSV など、Athena をサポートする形式のいずれかでテーブルを作成する場合、ALTER TABLE ADD COLUMNS ステートメントを使用して、既存の列の後、パーティション列の前に列を追加できます。

次の例では、パーティション comment 列の前の orders_parquet テーブルの末尾に列を追加します。

ALTER TABLE orders_parquet ADD COLUMNS (comment string)

Note

ALTER TABLE ADD COLUMNS を実行した後に Athena クエリエディタで新しいテーブル列を表示するには、エディタでテーブルリストを手動で更新してから、テーブルをもう一度展開します。

列の削除列に含まれるデータがなくなった場合、あるいは列に含まれているデータへのアクセスを制限する場合に、これらの列を削除する必要があることがあります。

• 名前で読み込まれている場合、JSON、Avro、および Parquet、ORC でテーブルから列を削除することができます。詳細については、「Index Access in ORC and Parquet (ORC および Parquet のインデックスアクセス) (p. 146)」を参照してください。

• 既に Athena で作成した表を保持する場合は、CSV および TSV のテーブルから列を削除することはお勧めしません。列を削除するとスキーマが壊れ、削除された列がない状態でテーブルを再作成しなければならなくなります。

この例では、Parquet のテーブルから `totalprice` 列を削除して、クエリを実行します。Athenaでは、Parquet はデフォルトで名前で読み込まれます。そのため、名前で読み込むことを指定するSERDEPROPERTIES 設定を省略しています。スキーマを変更しても、次のクエリは成功することに注意してください。

CREATE EXTERNAL TABLE orders_parquet_column_removed ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` int, `o_comment` string)

149

Page 159: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド更新型

STORED AS PARQUETLOCATION 's3://schema_updates/orders_parquet/';

列の名前変更綴りを修正するため、列名をより分かりやすくするため、あるいは列の再度の順序変更を回避するために、テーブルで列の名前変更が必要となることがあります。

データを CSV および TSV に保存する場合は列の名前を変更できます。また、インデックスで読み取るように設定されている場合は、Parquet および ORC に保存できます。詳細については、「Index Access inORC and Parquet (ORC および Parquet のインデックスアクセス) (p. 146)」を参照してください。

Athena は CSV と TSV のデータをスキーマの列順に読み取り、同じ順序で返します。ここでは、データを列にマッピングするために列名を使用しません。このため、Athena クエリを損なうことなく CSV またはTSV で列の名前を変更することができます。

列の名前を変更する方法の 1 つは、同じ基礎となるデータに基づいて新しいテーブルを作成する方法ですが、新しい列名を使用します。次の例では、 orders_parquet 呼び出されたテーブルorders_parquet_column_renamed。 この例では、列を変更します。 `o_totalprice` 名前先`o_total_price` 次に、 Athena:

CREATE EXTERNAL TABLE orders_parquet_column_renamed ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_total_price` double, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` int, `o_comment` string) STORED AS PARQUETLOCATION 's3://schema_updates/orders_parquet/';

Parquet テーブルの場合、次のクエリは実行されますが、列がインデックスではなく名前でアクセスされているため (Parquet のデフォルト)、名前が変更された列にはデータが表示されません。

SELECT * FROM orders_parquet_column_renamed;

CSV のテーブルでのクエリも類似しています。

CREATE EXTERNAL TABLE orders_csv_column_renamed ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_total_price` double, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` int, `o_comment` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','LOCATION 's3://schema_updates/orders_csv/';

CSV テーブルの場合、次のクエリを実行すると、名前が変更された列を含むすべての列でデータが表示されます。

150

Page 160: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド更新型

SELECT * FROM orders_csv_column_renamed;

列の順序変更デフォルトで名前で読み取る JSON や Parquet など、名前で読み取る形式のデータを含むテーブルの列の順序を変更できます。必要に応じて、ORC を名前で読み取ることもできます。詳細については、「IndexAccess in ORC and Parquet (ORC および Parquet のインデックスアクセス) (p. 146)」を参照してください。

次の例では、例の順序変更を示しています。

CREATE EXTERNAL TABLE orders_parquet_columns_reordered ( `o_comment` string, `o_orderkey` int, `o_custkey` int, `o_orderpriority` string, `o_orderstatus` string, `o_clerk` string, `o_shippriority` int, `o_orderdate` string) STORED AS PARQUETLOCATION 's3://schema_updates/orders_parquet/';

列のデータ型の変更列の ID が INT データ型のサイズを超過し、BIGINT データ型に変更する必要がある場合など、列のデータ型が情報量を保持できない場合に、列型を変更します。

列のデータ型を変更するには、次のような制限があります。

• 一部のデータ型のみ他のデータ型に変換することができます。変更できるデータ型については、このセクションの表を参照してください。

• Parquet および ORC のデータでは、テーブルがパーティション分割されていない場合、列のデータ型を変更することはできません。

Parquet および ORC でパーティション分割されたテーブルでは、パーティションの列タイプは別のパーティションの列タイプとは異なり、Athena は可能な場合に目的のタイプに CAST します。詳細については、「パーティションがあるテーブルのスキーマの不一致エラーを回避する (p. 153)」を参照してください。

Important

データ型の変換を実行する前に、クエリをテストして検証することを強くお勧めします。Athenaが元のデータ型からターゲットのデータ型にデータ型を変換できない場合、CREATE TABLE クエリは失敗します。

次の表に、変更可能なデータ型を一覧表示します。

互換性のあるデータ型

元のデータ型 使用可能なターゲットデータ型

STRING BYTE, TINYINT, SMALLINT, INT, BIGINT

151

Page 161: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドパーティションがあるテーブルを更新する

元のデータ型 使用可能なターゲットデータ型

BYTE TINYINT, SMALLINT, INT, BIGINT

TINYINT SMALLINT, INT, BIGINT

SMALLINT INT, BIGINT

INT BIGINT

FLOAT DOUBLE

次の orders_json テーブルの例では、`o_shippriority` 列のデータ型を BIGINT に変更します。

CREATE EXTERNAL TABLE orders_json ( `o_orderkey` int, `o_custkey` int, `o_orderstatus` string, `o_totalprice` double, `o_orderdate` string, `o_orderpriority` string, `o_clerk` string, `o_shippriority` BIGINT) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'LOCATION 's3://schema_updates/orders_json';

次のクエリは、元の SELECT クエリと同様に、データ型が変更される前に正常に実行されます。

Select * from orders_json LIMIT 10;

パーティションがあるテーブルを更新するAthena では、テーブルとそのパーティションでは同じデータ形式を使用する必要がありますが、スキーマは異なる場合があります。新しいパーティションを作成するとき、このパーティションは通常テーブルのスキーマを継承します。時間の経過とともに、このスキーマが変わり始める場合があります。その理由には次のようなものがあります。

• テーブルのスキーマの場合、パーティションのスキーマはテーブルのスキーマと同期するために更新されません。

• AWS Glue クローラでは、異なるスキーマのパーティションからデータを検出することができます。つまり、Athena の AWS Glue でテーブルを作成した場合、クローラの処理が終了すると、テーブルのスキーマとそのパーティションは異なる場合があります。

• AWS API を使用して、直接パーティションを追加した場合。

Athena は以下の制約を満たす場合に、パーティションがあるテーブルを正常に処理します。これらの制約が満たされない場合、Athena は HIVE_PARTITION_SCHEMA_MISMATCH エラーを発行します。

• 各パーティションのスキーマがテーブルのスキーマと互換性があること。• テーブルのデータ形式が実行する更新のタイプを許可すること (追加、削除、列の順序変更あるいは列

のデータ型の変更)。

たとえば、CSV および TSV 形式では列の名前変更、新しい列のテーブル末尾への追加および型に互換性がある場合の列のデータ型の変更のみを行うことができ、列を削除することはできません。その他の

152

Page 162: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列のクエリ

形式では、列の追加あるいは削除、型に互換性がある場合の列のデータ型の別への変更ができます。詳細については、「概要: Athena における更新とデータ形式 (p. 144)」を参照してください。

パーティションがあるテーブルのスキーマの不一致エラーを回避するクエリの実行開始時、Athena は各列のデータ型がテーブルとパーティション間で互換性があるかを確認して、テーブルのスキーマを検証します。

• Parquet および ORC データストレージ型の場合は、Athena は列の名前に依存し、これを使用して列の名前に基づいたスキーマ検証を行います。これにより、Parquet および ORC のパーティションがあるテーブルの HIVE_PARTITION_SCHEMA_MISMATCH エラーが解消されます。(ORC では、SerDe プロパティが名前でインデックスにアクセスするように設定されている場合にこれが機能します。orc.column.index.access=FALSE。Parquet はデフォルトで名前でインデックスを読み取ります。)

• CSV、JSON、および Avro の場合、Athena はインデックスベースのスキーマ検証を使用します。つまり、スキーマ不一致エラーが発生した場合、スキーマ不一致の原因となるパーティションを削除して置き換えることで、Athena で失敗なくクエリを実行できます。

Athena は、テーブルのスキーマとパーティションのスキーマを比較します。Athena の AWS Glue クローラで CSV、JSON、および AVRO でテーブルを作成した場合、クローラの処理が終了すると、テーブルのスキーマとそのパーティションは異なる場合があります。テーブルのスキーマとパーティションのスキーマ間に不一致がある場合、Athena のクエリは次のようなスキーマ検証エラーによって失敗します。「crawler_test.click_avro」は「文字列」タイプと宣言されていますが、パーティション「partition_0=2017-01-17」は「col68」列を「ダブル」タイプと宣言しています。

このようなエラーを回避する一般的な対処法は、エラーの原因となるパーティションを削除して、再作成することです。詳細については、「ALTER TABLE DROP PARTITION (p. 416)」および「ALTERTABLE ADD PARTITION (p. 415)」を参照してください。

配列のクエリAmazon Athena では、配列の作成、連結、異なるデータ型への変換ができます。さらに、フィルタ処理、フラット化、ソートができます。

トピック• 配列の作成 (p. 154)• 文字列と配列の連結 (p. 155)• 配列のデータ型の変換 (p. 156)• 長さの確認 (p. 157)• 配列要素へのアクセス (p. 157)• ネストされた配列のフラット化 (p. 158)• サブクエリからの配列の作成 (p. 160)• 配列のフィルタ処理 (p. 161)• 配列のソート (p. 162)• 配列での集計関数の使用 (p. 162)• 配列から文字列への変換 (p. 163)• 配列を使用してマップを作成する (p. 164)• 複合型の配列とネストされた構造のクエリ (p. 164)

153

Page 163: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列の作成

配列の作成Athena で配列リテラルを構築するには、ARRAY キーワードに続けて角括弧 [ ] を使用し、この中に配列要素をカンマで区切って含めます。

例次のクエリでは、4 つの要素を持つ 1 つの配列を作成します。

SELECT ARRAY [1,2,3,4] AS items

返される結果は次のとおりです。

+-----------+| items |+-----------+| [1,2,3,4] |+-----------+

次のクエリでは 2 つの配列を作成します。

SELECT ARRAY[ ARRAY[1,2], ARRAY[3,4] ] AS items

返される結果は次のとおりです。

+--------------------+| items |+--------------------+| [[1, 2], [3, 4]] |+--------------------+

互換性のある複数のタイプ間で選択した列から配列を作成するには、次の例に示すように、クエリを使用します。

WITHdataset AS ( SELECT 1 AS x, 2 AS y, 3 AS z)SELECT ARRAY [x,y,z] AS items FROM dataset

このクエリは以下を返します。

+-----------+| items |+-----------+| [1,2,3] |+-----------+

次の例では、2 つの配列を選択し、ウェルカムメッセージとして返します。

WITHdataset AS ( SELECT ARRAY ['hello', 'amazon', 'athena'] AS words, ARRAY ['hi', 'alexa'] AS alexa)

154

Page 164: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列の連結

SELECT ARRAY[words, alexa] AS welcome_msgFROM dataset

このクエリは以下を返します。

+----------------------------------------+| welcome_msg |+----------------------------------------+| [[hello, amazon, athena], [hi, alexa]] |+----------------------------------------+

キーと値のペアの配列を作成するには、次の例に示すように、MAP 演算子を使用してキーの配列に続けて値の配列を使用します。

SELECT ARRAY[ MAP(ARRAY['first', 'last', 'age'],ARRAY['Bob', 'Smith', '40']), MAP(ARRAY['first', 'last', 'age'],ARRAY['Jane', 'Doe', '30']), MAP(ARRAY['first', 'last', 'age'],ARRAY['Billy', 'Smith', '8'])] AS people

このクエリは以下を返します。

+-----------------------------------------------------------------------------------------------------+| people |+-----------------------------------------------------------------------------------------------------+| [{last=Smith, first=Bob, age=40}, {last=Doe, first=Jane, age=30}, {last=Smith, first=Billy, age=8}] |+-----------------------------------------------------------------------------------------------------+

文字列と配列の連結連結文字列2 つの文字列を連結するには、 || 演算子(次の例を参照)。

SELECT 'This' || ' is' || ' a' || ' test.' AS Concatenated_String

このクエリは以下を返します。

Concatenated_StringThis is a test.

以下を使用できます。 concat() 同じ結果を得るための関数です。

SELECT concat('This', ' is', ' a', ' test.') AS Concatenated_String

このクエリは以下を返します。

Concatenated_StringThis is a test.

155

Page 165: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列のデータ型の変換

配列の連結同じ手法を使用してアレイを連結できます。

複数の配列を連結するには、ダブルパイプを使用します。 || 演算子。

SELECT ARRAY [4,5] || ARRAY[ ARRAY[1,2], ARRAY[3,4] ] AS items

このクエリは以下を返します。

items[[4, 5], [1, 2], [3, 4]]

複数のアレイを1つのアレイに結合するには、ダブルパイプ演算子または concat() 関数。

WITHdataset AS ( SELECT ARRAY ['Hello', 'Amazon', 'Athena'] AS words, ARRAY ['Hi', 'Alexa'] AS alexa)SELECT concat(words, alexa) AS welcome_msgFROM dataset

このクエリは以下を返します。

welcome_msg[Hello, Amazon, Athena, Hi, Alexa]

詳細については、以下を参照してください。 concat() その他の文字列関数については、を参照してください。 文字列関数および演算子 Prestoの文書を参照してください。

配列のデータ型の変換配列のデータをサポート対象のデータ型に変換するには、CAST(value AS type) など CAST 演算子を使用します。Athena は Presto のすべてのネイティブデータ型をサポートします。

SELECT ARRAY [CAST(4 AS VARCHAR), CAST(5 AS VARCHAR)]AS items

このクエリは以下を返します。

+-------+| items |+-------+| [4,5] |+-------+

次の例では、キーと値のペアの要素を持つ配列を 2 つ作成し、この 2 つの配列を JSON に変換して連結します。

SELECT ARRAY[CAST(MAP(ARRAY['a1', 'a2', 'a3'], ARRAY[1, 2, 3]) AS JSON)] || ARRAY[CAST(MAP(ARRAY['b1', 'b2', 'b3'], ARRAY[4, 5, 6]) AS JSON)]AS items

156

Page 166: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド長さの確認

このクエリは以下を返します。

+--------------------------------------------------+| items |+--------------------------------------------------+| [{"a1":1,"a2":2,"a3":3}, {"b1":4,"b2":5,"b3":6}] |+--------------------------------------------------+

長さの確認cardinality 関数は、次の例に示すように、配列の長さを返します。

SELECT cardinality(ARRAY[1,2,3,4]) AS item_count

このクエリは以下を返します。

+------------+| item_count |+------------+| 4 |+------------+

配列要素へのアクセス配列要素にアクセスするには、[] 演算子を使用します。次の例のように、1 に最初の要素、2 に 2 番目の要素を指定し、以下同様に指定します。

WITH dataset AS (SELECT ARRAY[CAST(MAP(ARRAY['a1', 'a2', 'a3'], ARRAY[1, 2, 3]) AS JSON)] || ARRAY[CAST(MAP(ARRAY['b1', 'b2', 'b3'], ARRAY[4, 5, 6]) AS JSON)]AS items )SELECT items[1] AS item FROM dataset

このクエリは以下を返します。

+------------------------+| item |+------------------------+| {"a1":1,"a2":2,"a3":3} |+------------------------+

配列の特定の位置 (インデックス位置) にある要素にアクセスするには、element_at() 関数を使用して配列名とインデックス位置を指定します。

• インデックスが 0 より大きい場合は、配列の先頭から末尾へカウントした位置の要素がelement_at()から返されます。これは [] 演算子の動作と同じです。

• インデックスが 0 より小さい場合は、配列の末尾から先頭へカウントした位置の要素が element_at()から返されます。

次のクエリでは、配列 words を作成し、この配列の最初の要素 hello を first_word、2 番目の要素amazon (配列の末尾からカウント) を middle_word、3 番目の要素 athena を last_word として選択します。

WITH dataset AS (

157

Page 167: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドネストされた配列のフラット化

SELECT ARRAY ['hello', 'amazon', 'athena'] AS words)SELECT element_at(words, 1) AS first_word, element_at(words, -2) AS middle_word, element_at(words, cardinality(words)) AS last_wordFROM dataset

このクエリは以下を返します。

+----------------------------------------+| first_word | middle_word | last_word |+----------------------------------------+| hello | amazon | athena |+----------------------------------------+

ネストされた配列のフラット化ネストされた配列を使用する場合、必要に応じて、ネストされた配列の要素を単一の配列に展開したり、配列を複数の行に展開したりすることがあります。

例ネストされた配列の要素を単一の値配列にフラット化するには、flatten 関数を使用します。次のクエリは、配列の要素ごとに行を返します。

SELECT flatten(ARRAY[ ARRAY[1,2], ARRAY[3,4] ]) AS items

このクエリは以下を返します。

+-----------+| items |+-----------+| [1,2,3,4] |+-----------+

配列を複数の行にフラット化するには、次の例に示すように、CROSS JOIN 演算子を UNNEST 演算子と組み合わせて使用します。

WITH dataset AS ( SELECT 'engineering' as department, ARRAY['Sharon', 'John', 'Bob', 'Sally'] as users)SELECT department, names FROM datasetCROSS JOIN UNNEST(users) as t(names)

このクエリは以下を返します。

+----------------------+| department | names |+----------------------+| engineering | Sharon |+----------------------|| engineering | John |+----------------------|| engineering | Bob |+----------------------|

158

Page 168: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドネストされた配列のフラット化

| engineering | Sally |+----------------------+

キーと値のペアの配列をフラット化するには、次の例に示すように、選択したキーを列に入れ替えます。

WITHdataset AS ( SELECT 'engineering' as department, ARRAY[ MAP(ARRAY['first', 'last', 'age'],ARRAY['Bob', 'Smith', '40']), MAP(ARRAY['first', 'last', 'age'],ARRAY['Jane', 'Doe', '30']), MAP(ARRAY['first', 'last', 'age'],ARRAY['Billy', 'Smith', '8']) ] AS people )SELECT names['first'] AS first_name, names['last'] AS last_name, department FROM datasetCROSS JOIN UNNEST(people) AS t(names)

このクエリは以下を返します。

+--------------------------------------+| first_name | last_name | department |+--------------------------------------+| Bob | Smith | engineering || Jane | Doe | engineering || Billy | Smith | engineering |+--------------------------------------+

従業員の一覧から、総合スコアが最も高い従業員を選択します。UNNEST は、デフォルトの結合演算子で暗黙的に指定されるため、FROM 句において先行 CROSS JOIN なしで使用できます。

WITHdataset AS ( SELECT ARRAY[ CAST(ROW('Sally', 'engineering', ARRAY[1,2,3,4]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))), CAST(ROW('John', 'finance', ARRAY[7,8,9]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))), CAST(ROW('Amy', 'devops', ARRAY[12,13,14,15]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))) ] AS users),users AS ( SELECT person, score FROM dataset, UNNEST(dataset.users) AS t(person), UNNEST(person.scores) AS t(score))SELECT person.name, person.department, SUM(score) AS total_score FROM usersGROUP BY (person.name, person.department)ORDER BY (total_score) DESCLIMIT 1

このクエリは以下を返します。

+---------------------------------+| name | department | total_score |

159

Page 169: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサブクエリからの配列の作成

+---------------------------------+| Amy | devops | 54 |+---------------------------------+

従業員の一覧から、個別のスコアが最も高い従業員を選択します。

WITHdataset AS ( SELECT ARRAY[ CAST(ROW('Sally', 'engineering', ARRAY[1,2,3,4]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))), CAST(ROW('John', 'finance', ARRAY[7,8,9]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))), CAST(ROW('Amy', 'devops', ARRAY[12,13,14,15]) AS ROW(name VARCHAR, department VARCHAR, scores ARRAY(INTEGER))) ] AS users),users AS ( SELECT person, score FROM dataset, UNNEST(dataset.users) AS t(person), UNNEST(person.scores) AS t(score))SELECT person.name, score FROM usersORDER BY (score) DESCLIMIT 1

このクエリは以下を返します。

+--------------+| name | score |+--------------+| Amy | 15 |+--------------+

サブクエリからの配列の作成行のコレクションから配列を作成します。

WITHdataset AS ( SELECT ARRAY[1,2,3,4,5] AS items)SELECT array_agg(i) AS array_itemsFROM datasetCROSS JOIN UNNEST(items) AS t(i)

このクエリは以下を返します。

+-----------------+| array_items |+-----------------+| [1, 2, 3, 4, 5] |+-----------------+

行のセットから一意の値の配列を作成するには、distinct キーワードを使用します。

WITH

160

Page 170: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列のフィルタ処理

dataset AS ( SELECT ARRAY [1,2,2,3,3,4,5] AS items)SELECT array_agg(distinct i) AS array_itemsFROM datasetCROSS JOIN UNNEST(items) AS t(i)

このクエリは次の結果を返します。順序は保証されないことに注意してください。

+-----------------+| array_items |+-----------------+| [1, 2, 3, 4, 5] |+-----------------+

配列のフィルタ処理フィルタ条件に一致する行のコレクションから配列を作成します。

WITHdataset AS ( SELECT ARRAY[1,2,3,4,5] AS items)SELECT array_agg(i) AS array_itemsFROM datasetCROSS JOIN UNNEST(items) AS t(i)WHERE i > 3

このクエリは以下を返します。

+-------------+| array_items |+-------------+| [4, 5] |+-------------+

配列の各要素に特定の値 (2 など) が含まれているかどうかに基づいて配列をフィルタ処理します。次に例を示します。

WITHdataset AS ( SELECT ARRAY [ ARRAY[1,2,3,4], ARRAY[5,6,7,8], ARRAY[9,0] ] AS items)SELECT i AS array_items FROM datasetCROSS JOIN UNNEST(items) AS t(i)WHERE contains(i, 2)

このクエリは以下を返します。

+--------------+| array_items |+--------------+| [1, 2, 3, 4] |+--------------+

161

Page 171: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列のソート

filter 関数 filter(ARRAY [list_of_values], boolean_function)

filter 関数は、boolean_function が true の場合に list_of_values の項目から配列を作成します。filter 関数は、UNNEST 関数を使用できない場合に役立ちます。

以下の例では、配列 [1,0,5,-1] のゼロより大きい値から配列を作成します。

SELECT filter(ARRAY [1,0,5,-1], x -> x>0)

戻り値

[1,5]

以下の例では、配列 [-1, NULL, 10, NULL] の null 以外の値で構成される配列を作成します。

SELECT filter(ARRAY [-1, NULL, 10, NULL], q -> q IS NOT NULL)

戻り値

[-1,10]

配列のソート行のセットからソートした一意の値の配列を作成します。

WITHdataset AS ( SELECT ARRAY[3,1,2,5,2,3,6,3,4,5] AS items)SELECT array_sort(array_agg(distinct i)) AS array_itemsFROM datasetCROSS JOIN UNNEST(items) AS t(i)

このクエリは以下を返します。

+--------------------+| array_items |+--------------------+| [1, 2, 3, 4, 5, 6] |+--------------------+

配列での集計関数の使用• 配列内の値を加算するには、次の例のように SUM を使用します。• 配列内の複数の行を集計するには、array_agg を使用します。詳細については、「サブクエリからの

配列の作成 (p. 160)」を参照してください。

Note

ORDER BY は集計関数ではサポートされていません。たとえば、array_agg(x) 内で使用することはできません。

WITHdataset AS (

162

Page 172: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列から文字列への変換

SELECT ARRAY [ ARRAY[1,2,3,4], ARRAY[5,6,7,8], ARRAY[9,0] ] AS items),item AS ( SELECT i AS array_items FROM dataset, UNNEST(items) AS t(i))SELECT array_items, sum(val) AS totalFROM item, UNNEST(array_items) AS t(val)GROUP BY array_items;

最後の SELECT ステートメントでは、sum() と UNNEST を使用する代わりに、reduce() を使用して処理時間とデータ転送を短縮できます。次に例を示します。

WITHdataset AS ( SELECT ARRAY [ ARRAY[1,2,3,4], ARRAY[5,6,7,8], ARRAY[9,0] ] AS items),item AS ( SELECT i AS array_items FROM dataset, UNNEST(items) AS t(i))SELECT array_items, reduce(array_items, 0 , (s, x) -> s + x, s -> s) AS totalFROM item;

いずれのクエリも次の結果を返します。返される結果の順序は保証されません。

+----------------------+| array_items | total |+----------------------+| [1, 2, 3, 4] | 10 || [5, 6, 7, 8] | 26 || [9, 0] | 9 |+----------------------+

配列から文字列への変換配列を 1 つの文字列に変換するには、array_join 関数を使用します。次のスタンドアロンの例は、dataset というエイリアス配列を含む words. クエリは array_join で配列エレメントを結合するwordsをスペースで区切って、結果の文字列を次の名前の別名列で返します。 welcome_msg.

WITHdataset AS ( SELECT ARRAY ['hello', 'amazon', 'athena'] AS words)SELECT array_join(words, ' ') AS welcome_msgFROM dataset

このクエリは以下を返します。

+---------------------+

163

Page 173: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド配列を使用してマップを作成する

| welcome_msg |+---------------------+| hello amazon athena |+---------------------+

配列を使用してマップを作成するマップは、Athena で使用可能なデータ型で構成されるキーと値のペアです。マップを作成するには、MAP演算子を使用して 2 つの配列を渡します。最初の配列は列 (キー) 名、2 つ目の配列は値です。配列のすべての値は、同じ型にする必要があります。マップの値配列のいずれかの要素を別の型にする必要がある場合は、後で変換できます。

例次の例では、データセットからユーザーを選択します。MAP 演算子を使用して 2 つの配列を渡します。最初の配列には、値として「first」、「last」、「age」などの列名が含まれています。2 番目の配列は、これらの各列の値として「Bob」、「Smith」、「35」などで構成されます。

WITH dataset AS ( SELECT MAP( ARRAY['first', 'last', 'age'], ARRAY['Bob', 'Smith', '35'] ) AS user)SELECT user FROM dataset

このクエリは以下を返します。

+---------------------------------+| user |+---------------------------------+| {last=Smith, first=Bob, age=35} |+---------------------------------+

Map 値を取得するには、次の例に示すように、フィールド名に続けて [key_name] を選択します。

WITH dataset AS ( SELECT MAP( ARRAY['first', 'last', 'age'], ARRAY['Bob', 'Smith', '35'] ) AS user)SELECT user['first'] AS first_name FROM dataset

このクエリは以下を返します。

+------------+| first_name |+------------+| Bob |+------------+

複合型の配列とネストされた構造のクエリソースデータには、複雑なデータ型とネスト構造を持つ配列が含まれている場合があります。このセクションの例では、Athena のクエリを使用して、要素のデータ型の変更、配列内の要素の検索、およびキーワードの検索を行う方法を示します。

164

Page 174: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド複合型の配列とネストされた構造のクエリ

• ROW の作成 (p. 165)• CAST を使用した配列内のフィールド名の変更 (p. 165)• .表記を使用した配列のフィルタ処理 (p. 166)• ネスト値を含む配列のフィルタ処理 (p. 166)• UNNEST を使用した配列のフィルタ処理 (p. 167)• regexp_like を使用した配列内でのキーワードの検索 (p. 168)

ROW の作成Note

このセクションの例では、使用するサンプルデータの作成手段として ROW を使用します。Athena内のテーブルに対してクエリを実行する場合は、ROW データ型を作成する必要はありません (データソースから既に作成されています)。CREATE_TABLE を使用すると、Athena は STRUCT を定義してデータを入力し、データセット内の各行で ROW データ型を作成します。基となる ROW データ型は、サポートされている SQL データ型の名前付きフィールドで構成されます。

WITH dataset AS ( SELECT ROW('Bob', 38) AS users )SELECT * FROM dataset

このクエリは以下を返します。

+-------------------------+| users |+-------------------------+| {field0=Bob, field1=38} |+-------------------------+

CAST を使用した配列内のフィールド名の変更ROW 値が含まれている配列のフィールド名を変更するには、ROW 宣言を CAST できます。

WITH dataset AS ( SELECT CAST( ROW('Bob', 38) AS ROW(name VARCHAR, age INTEGER) ) AS users)SELECT * FROM dataset

このクエリは以下を返します。

+--------------------+| users |+--------------------+| {NAME=Bob, AGE=38} |+--------------------+

Note

上の例では、name を VARCHAR として宣言しています。Presto での型に合わせるためです。このSTRUCT を CREATE TABLE ステートメント内で宣言する場合は、String 型を使用します。Hiveでは、このデータ型を String として定義するためです。

165

Page 175: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド複合型の配列とネストされた構造のクエリ

. 表記を使用した配列のフィルタ処理次の例では、ドット . 表記を使用して、AWS CloudTrail ログの userIdentity 列から accountIdフィールドを選択します。詳細については、「AWS CloudTrail ログのクエリ (p. 206)」を参照してください。

SELECT CAST(useridentity.accountid AS bigint) as newidFROM cloudtrail_logsLIMIT 2;

このクエリは以下を返します。

+--------------+| newid |+--------------+| 112233445566 |+--------------+| 998877665544 |+--------------+

値の配列にクエリを実行するには、次のクエリを発行します。

WITH dataset AS ( SELECT ARRAY[ CAST(ROW('Bob', 38) AS ROW(name VARCHAR, age INTEGER)), CAST(ROW('Alice', 35) AS ROW(name VARCHAR, age INTEGER)), CAST(ROW('Jane', 27) AS ROW(name VARCHAR, age INTEGER)) ] AS users)SELECT * FROM dataset

次の結果が返されます。

+-----------------------------------------------------------------+| users |+-----------------------------------------------------------------+| [{NAME=Bob, AGE=38}, {NAME=Alice, AGE=35}, {NAME=Jane, AGE=27}] |+-----------------------------------------------------------------+

ネスト値を含む配列のフィルタ処理大きな配列にはネスト構造が含まれている場合があり、ネスト構造内の値をフィルタ処理または検索する必要があります。

ネストされた BOOLEAN 値を含む値配列のデータセットを定義するには、次のクエリを発行します。

WITH dataset AS ( SELECT CAST( ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN)) ) AS sites)SELECT * FROM dataset

次の結果が返されます。

166

Page 176: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド複合型の配列とネストされた構造のクエリ

+----------------------------------------------------------+| sites |+----------------------------------------------------------+| {HOSTNAME=aws.amazon.com, FLAGGEDACTIVITY={ISNEW=true}} |+----------------------------------------------------------+

次に、この要素の BOOLEAN 値のフィルタ処理およびアクセスには、引き続きドット . 表記を使用します。

WITH dataset AS ( SELECT CAST( ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN)) ) AS sites)SELECT sites.hostname, sites.flaggedactivity.isnewFROM dataset

このクエリは、ネストされたフィールドを選択し、次の結果を返します。

+------------------------+| hostname | isnew |+------------------------+| aws.amazon.com | true |+------------------------+

UNNEST を使用した配列のフィルタ処理ネスト構造を含む配列を、そのいずれかの子要素でフィルタ処理するには、UNNEST 演算子を使用してクエリを発行します。UNNEST の詳細については、「ネスト配列のフラット化 (p. 158)」を参照してください。

たとえば、次のクエリでは、データセットのサイトのホスト名を見つけます。

WITH dataset AS ( SELECT ARRAY[ CAST( ROW('aws.amazon.com', ROW(true)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN)) ), CAST( ROW('news.cnn.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN)) ), CAST( ROW('netflix.com', ROW(false)) AS ROW(hostname VARCHAR, flaggedActivity ROW(isNew BOOLEAN)) ) ] as items)SELECT sites.hostname, sites.flaggedActivity.isNewFROM dataset, UNNEST(items) t(sites)WHERE sites.flaggedActivity.isNew = true

返される結果は次のとおりです。

+------------------------+

167

Page 177: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド複合型の配列とネストされた構造のクエリ

| hostname | isnew |+------------------------+| aws.amazon.com | true |+------------------------+

regexp_like を使用した配列内でのキーワードの検索次の例では、regexp_like 関数を使用して、配列内の要素内でキーワードのデータセットを検索する方法を示します。入力として評価対象の正規表現パターン、またはパイプ (|) で区切られた要素のリストを使用し、パターンを評価して、指定された文字列にそれが含まれるかどうかを判別します。

正規表現パターンは文字列内に含まれている必要がありますが、文字列と一致している必要はありません。文字列全体と一致させるには、冒頭に ^、末尾に $ を付けてパターンを囲みます (例: '^pattern$')。

ホスト名と flaggedActivity 要素が含まれているサイトの配列について考えます。この要素内のARRAY には、複数の MAP 要素が含まれており、要素ごとに異なる一般的なキーワードと人気度カウントを示しています。この配列の MAP 内で特定のキーワードを検索するとします。

このデータセットを検索して特定のキーワードを持つサイトを見つけるには、類似した SQLregexp_like 演算子の代わりに LIKE を使用します。多数のキーワードの検索には regexp_like の方が効率的です。

Example 例 1: regexp_like の使用

この例のクエリでは、regexp_like 関数を使用して用語 'politics|bigdata' を検索します。これは配列内の値で見つかります。

WITH dataset AS ( SELECT ARRAY[ CAST( ROW('aws.amazon.com', ROW(ARRAY[ MAP(ARRAY['term', 'count'], ARRAY['bigdata', '10']), MAP(ARRAY['term', 'count'], ARRAY['serverless', '50']), MAP(ARRAY['term', 'count'], ARRAY['analytics', '82']), MAP(ARRAY['term', 'count'], ARRAY['iot', '74']) ]) ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) )) ), CAST( ROW('news.cnn.com', ROW(ARRAY[ MAP(ARRAY['term', 'count'], ARRAY['politics', '241']), MAP(ARRAY['term', 'count'], ARRAY['technology', '211']), MAP(ARRAY['term', 'count'], ARRAY['serverless', '25']), MAP(ARRAY['term', 'count'], ARRAY['iot', '170']) ]) ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) )) ), CAST( ROW('netflix.com', ROW(ARRAY[ MAP(ARRAY['term', 'count'], ARRAY['cartoons', '1020']), MAP(ARRAY['term', 'count'], ARRAY['house of cards', '112042']), MAP(ARRAY['term', 'count'], ARRAY['orange is the new black', '342']), MAP(ARRAY['term', 'count'], ARRAY['iot', '4']) ]) ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) )) ) ] AS items),sites AS ( SELECT sites.hostname, sites.flaggedactivity FROM dataset, UNNEST(items) t(sites)

168

Page 178: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド複合型の配列とネストされた構造のクエリ

)SELECT hostnameFROM sites, UNNEST(sites.flaggedActivity.flags) t(flags)WHERE regexp_like(flags['term'], 'politics|bigdata')GROUP BY (hostname)

このクエリは 2 つのサイトを返します。

+----------------+| hostname |+----------------+| aws.amazon.com |+----------------+| news.cnn.com |+----------------+

Example 例 2: regexp_like の使用

次の例のクエリでは、regexp_like 関数を使用して検索語句に一致するサイトの人気度スコアを合計し、最高から最低の順に並べます。

WITH dataset AS ( SELECT ARRAY[ CAST( ROW('aws.amazon.com', ROW(ARRAY[ MAP(ARRAY['term', 'count'], ARRAY['bigdata', '10']), MAP(ARRAY['term', 'count'], ARRAY['serverless', '50']), MAP(ARRAY['term', 'count'], ARRAY['analytics', '82']), MAP(ARRAY['term', 'count'], ARRAY['iot', '74']) ]) ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) )) ), CAST( ROW('news.cnn.com', ROW(ARRAY[ MAP(ARRAY['term', 'count'], ARRAY['politics', '241']), MAP(ARRAY['term', 'count'], ARRAY['technology', '211']), MAP(ARRAY['term', 'count'], ARRAY['serverless', '25']), MAP(ARRAY['term', 'count'], ARRAY['iot', '170']) ]) ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) )) ), CAST( ROW('netflix.com', ROW(ARRAY[ MAP(ARRAY['term', 'count'], ARRAY['cartoons', '1020']), MAP(ARRAY['term', 'count'], ARRAY['house of cards', '112042']), MAP(ARRAY['term', 'count'], ARRAY['orange is the new black', '342']), MAP(ARRAY['term', 'count'], ARRAY['iot', '4']) ]) ) AS ROW(hostname VARCHAR, flaggedActivity ROW(flags ARRAY(MAP(VARCHAR, VARCHAR)) )) ) ] AS items),sites AS ( SELECT sites.hostname, sites.flaggedactivity FROM dataset, UNNEST(items) t(sites))SELECT hostname, array_agg(flags['term']) AS terms, SUM(CAST(flags['count'] AS INTEGER)) AS totalFROM sites, UNNEST(sites.flaggedActivity.flags) t(flags)WHERE regexp_like(flags['term'], 'politics|bigdata')GROUP BY (hostname)ORDER BY total DESC

169

Page 179: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド地理空間データのクエリ

このクエリは 2 つのサイトを返します。

+------------------------------------+| hostname | terms | total |+----------------+-------------------+| news.cnn.com | politics | 241 |+----------------+-------------------+| aws.amazon.com | big data | 10 |+----------------+-------------------+

地理空間データのクエリ地理空間データには、オブジェクトの地理的位置を指定する識別子が含まれています。このタイプのデータの例としては、天気予報、地図の案内、位置情報を含むツイート、店舗の場所、航空路線などがあります。地理空間データは、ビジネス分析、レポート、および予測で重要な役割を果たします。

緯度や経度などの地理空間識別子を使用すると、郵送先住所を地理座標系に変換できます。

トピック• 地理空間クエリとは (p. 170)• 入力データ形式とジオメトリデータ型 (p. 170)• サポートされる地理空間関数のリスト (p. 171)• 例: 地理空間クエリ (p. 179)

地理空間クエリとは地理空間クエリとは、Athena でサポートされている特殊な SQL クエリタイプです。非空間 SQL クエリとは以下の点が異なります。

• 次の特殊なジオメトリ データ タイプを使用します。point、 line、 multiline、 polygon、およびmultipolygon.

• ジオメトリデータ型間の関係としてdistance、equals、crosses、touches、overlaps、disjoint などを表現する。

Athena で地理空間クエリを使用すると、以下のようなオペレーションを実行できます。

• 2 点間の距離を確認する。• あるエリア (ポリゴン) 内に別のエリアが含まれているかどうかを確認する。• 1 つの行が別の行や多角形と交差または接触しているかどうかを確認する。

たとえば、 point ジオメトリ データ タイプ タイプの値から double レーニア山の地理座標 Athena、ST_POINT (longitude, latitude) 地理空間関数(次の例を参照)。

ST_POINT(-121.7602, 46.8527)

入力データ形式とジオメトリデータ型Athena で地理空間関数を使用するには、データを WKT 形式で入力するか、Hive JSON SerDe を使用します。Athena でサポートされているジオメトリデータ型を使用することもできます。

170

Page 180: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

入力データ形式地理空間クエリを処理するために、Athena は入力データのデータ形式として以下をサポートしています。

• WKT (Well-known Text)。Athena では、WKT が varchar データ型として表されます。• JSON エンコード形式の地理空間データ。地理空間データが含まれている JSON ファイルを解析して

テーブルを作成する場合、Athena は Hive JSON SerDe を使用します。Athena でこの SerDe を使用する方法については、「JSON SerDe ライブラリ (p. 387)」を参照してください。

ジオメトリデータ型地理空間クエリを処理するために、Athena は以下の特化されたジオメトリデータ型をサポートしています。

• point

• line

• polygon

• multiline

• multipolygon

サポートされる地理空間関数のリストAthena の地理空間関数には以下の特性があります。

• 関数は、空間クエリの一般原則に従います。• 関数は、ESRI Java Geometry Library を使用する Presto プラグインとして実装されます。このライブラ

リには Apache 2 ライセンスが付いています。• 関数は、ESRI Geometry API に依存します。• ESRI でサポートされる関数の一部は Athena で使用できません。このトピックでは、Athena でサポー

トされる ESRI 地理空間関数のみを示しています。

Athena は 4 種類の地理空間関数をサポートしています。

• コンストラクター関数 (p. 172)• 地理空間関係関数 (p. 174)• オペレーション関数 (p. 175)• アクセサ関数 (p. 176)

開始する前に以下に示すように、2 つのテーブル earthquakes および counties を作成します。

CREATE external TABLE earthquakes( earthquake_date STRING, latitude DOUBLE, longitude DOUBLE, depth DOUBLE, magnitude DOUBLE, magtype string, mbstations string,

171

Page 181: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

gap string, distance string, rms string, source string, eventid string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILE LOCATION 's3://my-query-log/csv'

CREATE external TABLE IF NOT EXISTS counties ( Name string, BoundaryShape binary )ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.JsonSerde'STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedJsonInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://my-query-log/json'

以降の例のいくつかは、これらのテーブルに基づいており、Amazon S3 の場所に保存されている 2 つのサンプルファイルに依存します。これらのファイルは説明用であり、Athena には含まれていません。

• earthquakes.csv ファイルは、カリフォルニアで発生した地震を一覧表示します。このファイル内のフィールドは、earthquakes テーブルのフィールドに対応します。

• california-counties.json ファイルは、JSON エンコード形式の郡のデータを ESRI 準拠形式で表示します。AREA、PERIMETER、STATE、COUNTY、NAME など、多くのフィールドが含まれています。counties テーブルは、このファイルに基づいており、フィールドは Name (文字列) とBoundaryShape (バイナリ) の 2 つのみです。

コンストラクター関数コンストラクター関数では、point、line、または polygon ジオメトリデータ型のバイナリ表現を取得します。これらの関数を使用して、バイナリデータをテキストに変換し、Well-Known Text (WKT) として表現されるジオメトリデータのバイナリ値を取得することもできます。

ST_POINT(double, double)

point ジオメトリデータ型のバイナリ表現を返します。

point ジオメトリデータ型を取得するには、Athena の ST_POINT 関数を使用します。この関数への入力データ値には、ユニバーサル横メルカトル (UTM) 直交座標系の値などのジオメトリ値、または 10 進角で表した地図単位 (経度と緯度) を使用します。経度と緯度の値には、WGS 1984 または EPSG:4326 とも呼ばれる世界測地系が使用されます。WGS 1984 は、全地球測位システム (GPS) で使用されている座標系です。

たとえば、次の表記では、地図座標は経度と緯度で指定され、値 .072284 (バッファ距離) は 10 進角の角度単位で指定されます。

ST_BUFFER(ST_POINT(-74.006801, 40.705220), .072284)

構文:

SELECT ST_POINT(longitude, latitude) FROM earthquakes LIMIT 1;

例.次の例では、earthquakes.csv の特定の経度と緯度の座標系を使用しています。

SELECT ST_POINT(61.56, -158.54)

172

Page 182: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

FROM earthquakesLIMIT 1;

ジオメトリデータ型 point の次のバイナリ表現が返されます。

00 00 00 00 01 01 00 00 00 48 e1 7a 14 ae c7 4e 40 e1 7a 14 ae 47 d1 63 c0

次の例では、特定の経度と緯度の座標を使用しています。

SELECT ST_POINT(-74.006801, 40.705220);

ジオメトリデータ型 point の次のバイナリ表現が返されます。

00 00 00 00 01 01 00 00 00 20 25 76 6d 6f 80 52 c0 18 3e 22 a6 44 5a 44 40

次の例では、ST_GEOMETRY_TO_TEXT 関数を使用して WKT からバイナリ値を取得します。

SELECT ST_GEOMETRY_TO_TEXT(ST_POINT(-74.006801, 40.705220)) AS WKT;

このクエリは、point ジオメトリタイプの WKT 表現を返します。1 POINT (-74.006801 40.70522)

ST_LINE(varchar)

値を line データ型で返します。この値は、 ジオメトリデータ型 (p. 171) line のバイナリ表現です。例:

SELECT ST_Line('linestring(1 1, 2 2, 3 3)')

ST_POLYGON(varchar)

値を polygon データ型で返します。この値は、ジオメトリデータ型 (p. 171) polygon のバイナリ表現です。例:

SELECT ST_POLYGON('polygon ((1 1, 1 4, 4 4, 4 1))')

ST_GEOMETRY_TO_TEXT (varbinary)

指定した各ジオメトリデータ型 (p. 171)をテキストに変換します。値をジオメトリデータ型で返します。この値は、ジオメトリデータ型の WKT 表現です。例:

SELECT ST_GEOMETRY_TO_TEXT(ST_POINT(61.56, -158.54))

ST_GEOMETRY_FROM_TEXT (varchar)

テキストをジオメトリデータ型に変換します。値をジオメトリデータ型で返します。この値は、ジオメトリデータ型のバイナリ表現です。例:

SELECT ST_GEOMETRY_FROM_TEXT(ST_GEOMETRY_TO_TEXT(ST_Point(1, 2)))

Note

AmazonAthenaPreviewFunctionality ワークグループを使用している場合は、ST_GEOMETRYFROMTEXT (varchar) 構文を使用します。

173

Page 183: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

地理空間関係関数以下の関数は、入力として指定した 2 つの異なるジオメトリ間の関係を表現します。結果を boolean 型で返します。ジオメトリのペアを指定する順序が重要になります。最初のジオメトリ値は左ジオメトリ、2番目のジオメトリ値は右ジオメトリと呼ばれます。

これら関数は以下を返します。

• TRUE。関数が記述する関係が満たされた場合に限ります。• FALSE。関数が記述する関係が満たされない場合に限ります。

ST_CONTAINS (geometry, geometry)

左ジオメトリに右ジオメトリが含まれている場合に限り、TRUE を返します。例:

SELECT ST_CONTAINS('POLYGON((0 2,1 1,0 -1,0 2))', 'POLYGON((-1 3,2 1,0 -3,-1 3))')

SELECT ST_CONTAINS('POLYGON((0 2,1 1,0 -1,0 2))', ST_Point(0, 0));

SELECT ST_CONTAINS(ST_GEOMETRY_FROM_TEXT('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GEOMETRY_FROM_TEXT('POLYGON((-1 3,2 1,0 -3,-1 3))'))

ST_CROSSES (geometry, geometry)

左ジオメトリが右ジオメトリとクロスする場合に限り、TRUE を返します。例:

SELECT ST_CROSSES(ST_LINE('linestring(1 1, 2 2 )'), ST_LINE('linestring(0 1, 2 2)'))

ST_DISJOINT (geometry, geometry)

左ジオメトリと右ジオメトリの共通部分が空の場合に限り、TRUE を返します。例:

SELECT ST_DISJOINT(ST_LINE('linestring(0 0, 0 1)'), ST_LINE('linestring(1 1, 1 0)'))

ST_EQUALS (geometry, geometry)

左ジオメトリに右ジオメトリと等しい場合に限り、TRUE を返します。例:

SELECT ST_EQUALS(ST_LINE('linestring( 0 0, 1 1)'), ST_LINE('linestring(1 3, 2 2)'))

ST_INTERSECTS (geometry, geometry)

左ジオメトリが右ジオメトリとインターセクトする場合に限り、TRUE を返します。例:

SELECT ST_INTERSECTS(ST_LINE('linestring(8 7, 7 8)'), ST_POLYGON('polygon((1 1, 4 1, 4 4, 1 4))'))

ST_OVERLAPS (geometry, geometry)

左ジオメトリが右ジオメトリにオーバーラップする場合に限り、TRUE を返します。例:

SELECT ST_OVERLAPS(ST_POLYGON('polygon((2 0, 2 1, 3 1))'), ST_POLYGON('polygon((1 1, 1 4, 4 4, 4 1))'))

174

Page 184: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

ST_RELATE (geometry, geometry)

左ジオメトリが右ジオメトリとの間に指定した DE-9IM (Dimensionally Extended nine-Intersection Model)関係がある場合に限り、TRUE を返します。詳細については、Wikipedia のトピック「DE-9IM」を参照してください。例:

SELECT ST_RELATE(ST_LINE('linestring(0 0, 3 3)'), ST_LINE('linestring(1 1, 4 4)'), 'T********')

ST_TOUCHES (geometry, geometry)

左ジオメトリが右ジオメトリに接する場合に限り、TRUE を返します。

例:

SELECT ST_TOUCHES(ST_POINT(8, 8), ST_POLYGON('polygon((1 1, 1 4, 4 4, 4 1))'))

ST_WITHIN (geometry, geometry)

左ジオメトリが右ジオメトリ内にある場合に限り、TRUE を返します。

例:

SELECT ST_WITHIN(ST_POINT(8, 8), ST_POLYGON('polygon((1 1, 1 4, 4 4, 4 1))'))

オペレーション関数オペレーション関数では、ジオメトリデータ型の値に対してオペレーションを実行します。たとえば、単一のジオメトリデータ型の境界、2 つのジオメトリデータ型の共通部分、左ジオメトリと右ジオメトリ間の差異 (両方が同じデータ型の場合)、および特定のジオメトリデータ型の外部バッファや外部リングを取得できます。

すべてのオペレーション関数では、いずれかのジオメトリデータ型を入力として受け取り、そのバイナリ表現を返します。

ST_BOUNDARY (geometry)

いずれかのジオメトリデータ型を入力として受け取り、boundary ジオメトリデータ型のバイナリ表現を返します。

例:

SELECT ST_BOUNDARY(ST_LINE('linestring(0 1, 1 0)')))

SELECT ST_BOUNDARY(ST_POLYGON('polygon((1 1, 1 4, 4 4, 4 1))'))

ST_BUFFER (geometry, double)

いずれかのジオメトリデータ型 (point、line、polygon、multiline、multipolygon、および double 型としてdistance) を入力として受け取ります。指定した距離 (または半径) でバッファリングされたジオメトリデータ型のバイナリ表現を返します。例:

SELECT ST_BUFFER(ST_Point(1, 2), 2.0)

次の例では、地図座標は経度と緯度で指定され、値 .072284 (バッファ距離) は 10 進角の角度単位で指定されます。

175

Page 185: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

ST_BUFFER(ST_POINT(-74.006801, 40.705220), .072284)

ST_DIFFERENCE (geometry, geometry)

左ジオメトリと右ジオメトリ間の差異のバイナリ表現を返します。例:

SELECT ST_GEOMETRY_TO_TEXT(ST_DIFFERENCE(ST_POLYGON('polygon((0 0, 0 10, 10 10, 10 0))'), ST_POLYGON('polygon((0 0, 0 5, 5 5, 5 0))')))

ST_ENVELOPE (geometry)

line、polygon、multiline および multipolygon ジオメトリデータ型を入力として受け取ります。point ジオメトリデータ型はサポートされていません。エンベロープのバイナリ表現を返します。エンベロープは指定されたジオメトリデータ型を囲む四角形です。例:

SELECT ST_ENVELOPE(ST_LINE('linestring(0 1, 1 0)'))

SELECT ST_ENVELOPE(ST_POLYGON('polygon((1 1, 1 4, 4 4, 4 1))'))

ST_EXTERIOR_RING (geometry)

入力タイプ polygon の外部リングのバイナリ表現を返します。例:

SELECT ST_EXTERIOR_RING(ST_POLYGON(1,1, 1,4, 4,1))

SELECT ST_EXTERIOR_RING(ST_POLYGON('polygon ((0 0, 8 0, 0 8, 0 0), (1 1, 1 5, 5 1, 1 1))'))

ST_INTERSECTION (geometry, geometry)

左ジオメトリと右ジオメトリの共通部分のバイナリ表現を返します。例:

SELECT ST_INTERSECTION(ST_POINT(1,1), ST_POINT(1,1))

SELECT ST_INTERSECTION(ST_LINE('linestring(0 1, 1 0)'), ST_POLYGON('polygon((1 1, 1 4, 4 4, 4 1))'))

SELECT ST_GEOMETRY_TO_TEXT(ST_INTERSECTION(ST_POLYGON('polygon((2 0, 2 3, 3 0))'), ST_POLYGON('polygon((1 1, 4 1, 4 4, 1 4))')))

ST_SYMMETRIC_DIFFERENCE (geometry, geometry)

左ジオメトリと右ジオメトリ間の幾何学的な対称差のバイナリ表現を返します。例:

SELECT ST_GEOMETRY_TO_TEXT(ST_SYMMETRIC_DIFFERENCE(ST_LINE('linestring(0 2, 2 2)'), ST_LINE('linestring(1 2, 3 2)')))

アクセサ関数アクセサ関数は、varchar 型、bigint 型、または double 型を、さまざまな geometry データ型から取得するのに役立ちます。ここで、geometry は Athena でサポートされているジオメトリデータ型(point、line、polygon、multiline、および multipolygon) のいずれかです。たとえば、polygon

176

Page 186: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

ジオメトリデータ型の面積、指定したジオメトリデータ型の最大と最小の X 値と Y 値、line の長さ、または指定したジオメトリデータ型のポイント数を取得できます。

ST_AREA (geometry)

ジオメトリデータ型 polygon を入力として受け取り、面積を double 型で返します。例:

SELECT ST_AREA(ST_POLYGON('polygon((1 1, 4 1, 4 4, 1 4))'))

ST_CENTROID (geometry)

ジオメトリデータ型 (p. 171) polygon を入力として受け取り、ポリゴンのエンベロープの中心であるpoint を varchar 型で返します。例:

SELECT ST_CENTROID(ST_GEOMETRY_FROM_TEXT('polygon ((0 0, 3 6, 6 0, 0 0))'))

SELECT ST_GEOMETRY_TO_TEXT(ST_CENTROID(ST_ENVELOPE(ST_GEOMETRY_FROM_TEXT('POINT (53 27)'))))

ST_COORDINATE_DIMENSION (geometry)

サポートされているいずれかのジオメトリデータ型 (p. 171)を入力として受け取り、座標コンポーネントの数を bigint 型で返します。例:

SELECT ST_COORDINATE_DIMENSION(ST_POINT(1.5,2.5))

ST_DIMENSION (geometry)

サポートされているいずれかのジオメトリデータ型 (p. 171)を入力として受け取り、ジオメトリの空間ディメンションを bigint 型で返します。例:

SELECT ST_DIMENSION(ST_POLYGON('polygon((1 1, 4 1, 4 4, 1 4))'))

ST_DISTANCE (geometry, geometry)

空間参照に基づいて、2 つのジオメトリ間の 2 次元の最小デカルト距離を投影単位で返します。例:

SELECT ST_DISTANCE(ST_POINT(0.0,0.0), ST_POINT(3.0,4.0))

ST_IS_CLOSED (geometry)

line および multiline ジオメトリデータ型 (p. 171)のみを入力として受け取ります。ラインが閉じている場合に限り、TRUE (boolean 型) を返します。例:

SELECT ST_IS_CLOSED(ST_LINE('linestring(0 2, 2 2)'))

ST_IS_EMPTY (geometry)

line および multiline ジオメトリデータ型 (p. 171)のみを入力として受け取ります。指定したジオメトリが空、つまり line の開始値と終了値が一致する場合に限り、TRUE (boolean 型) を返します。例:

SELECT ST_IS_EMPTY(ST_POINT(1.5, 2.5))

177

Page 187: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる地理空間関数のリスト

ST_IS_RING (geometry)

line 型が閉じていてシンプルである場合に限り、TRUE (boolean 型) を返します。例:

SELECT ST_IS_RING(ST_LINE('linestring(0 2, 2 2)'))

ST_LENGTH (geometry)

line の長さを double 型で返します。例:

SELECT ST_LENGTH(ST_LINE('linestring(0 2, 2 2)'))

ST_MAX_X (geometry)

ジオメトリの X 座標の最大値を double 型で返します。例:

SELECT ST_MAX_X(ST_LINE('linestring(0 2, 2 2)'))

ST_MAX_Y (geometry)

ジオメトリの Y 座標の最大値を double 型で返します。例:

SELECT ST_MAX_Y(ST_LINE('linestring(0 2, 2 2)'))

ST_MIN_X (geometry)

ジオメトリの X 座標の最小値を double 型で返します。例:

SELECT ST_MIN_X(ST_LINE('linestring(0 2, 2 2)'))

ST_MIN_Y (geometry)

ジオメトリの Y 座標の最小値を double 型で返します。例:

SELECT ST_MAX_Y(ST_LINE('linestring(0 2, 2 2)'))

ST_START_POINT (geometry)

line ジオメトリデータ型の最初のポイントを point 型で返します。例:

SELECT ST_START_POINT(ST_LINE('linestring(0 2, 2 2)'))

ST_END_POINT (geometry)

line ジオメトリデータ型の最後のポイントを point 型で返します。例:

SELECT ST_END_POINT(ST_LINE('linestring(0 2, 2 2)'))

ST_X (point)

ポイントの X 座標を double 型で返します。例:

178

Page 188: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド例: 地理空間クエリ

SELECT ST_X(ST_POINT(1.5, 2.5))

ST_Y (point)

ポイントの Y 座標を double 型で返します。例:

SELECT ST_Y(ST_POINT(1.5, 2.5))

ST_POINT_NUMBER (geometry)

ジオメトリのポイント数を bigint 型で返します。例:

SELECT ST_POINT_NUMBER(ST_POINT(1.5, 2.5))

ST_INTERIOR_RING_NUMBER (geometry)

polygon ジオメトリの内部リング数を bigint 型で返します。例:

SELECT ST_INTERIOR_RING_NUMBER(ST_POLYGON('polygon ((0 0, 8 0, 0 8, 0 0), (1 1, 1 5, 5 1, 1 1))'))

例: 地理空間クエリこのトピックの例では、GitHub で利用可能なサンプルデータから 2 つのテーブルを作成し、そのデータに基づいてテーブルをクエリします。サンプルデータは、あくまで例に過ぎず、正確であることは保証されていません。以下のファイルにあります。

• earthquakes.csv– カリフォルニアで発生した地震を一覧表示しています。この earthquakes テーブルの例では、このデータのフィールドを使用しています。

• california-counties.json – カリフォルニア州の郡データを Esri 準拠の GeoJSON 形式で一覧表示しています。データには AREA、PERIMETER、STATE、COUNTY、および NAME など多くのフィールドが含まれていますが 、サンプルの counties テーブルでは Name (文字列) と BoundaryShape (バイナリ) の 2 つしか使用していません。

Note

Athena は、 com.esri.json.hadoop.EnclosedJsonInputFormat を使用して JSON データを地理空間バイナリ形式に変換します。

次のコード例では、earthquakes という名前のテーブルを作成します。

CREATE external TABLE earthquakes( earthquake_date string, latitude double, longitude double, depth double, magnitude double, magtype string, mbstations string, gap string, distance string, rms string, source string, eventid string)

179

Page 189: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド例: 地理空間クエリ

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILE LOCATION 's3://my-query-log/csv/';

次のコード例では、counties という名前のテーブルを作成します。

CREATE external TABLE IF NOT EXISTS counties ( Name string, BoundaryShape binary )ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.JsonSerde'STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedJsonInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://my-query-log/json/';

次のコード例では、前に作成した 2 つのテーブルに対して CROSS JOIN 関数を使用します。さらに、両方のテーブルに対して ST_CONTAINS を使用し、ST_POINT で指定した地震の地理的な場所を境界に含む郡を要求します。次に、該当する郡を名前でグループ化し、発生カウントの順に降順で並べて返します。

SELECT counties.name, COUNT(*) cntFROM countiesCROSS JOIN earthquakesWHERE ST_CONTAINS (counties.boundaryshape, ST_POINT(earthquakes.longitude, earthquakes.latitude))GROUP BY counties.nameORDER BY cnt DESC

このクエリは以下を返します。

+------------------------+| name | cnt |+------------------------+| Kern | 36 |+------------------------+| San Bernardino | 35 |+------------------------+| Imperial | 28 |+------------------------+| Inyo | 20 |+------------------------+| Los Angeles | 18 |+------------------------+| Riverside | 14 |+------------------------+| Monterey | 14 |+------------------------+| Santa Clara | 12 |+------------------------+| San Benito | 11 |+------------------------+| Fresno | 11 |+------------------------+| San Diego | 7 |+------------------------+| Santa Cruz | 5 |+------------------------+| Ventura | 3 |+------------------------+| San Luis Obispo | 3 |+------------------------+| Orange | 2 |

180

Page 190: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHudi データセットに対するクエリ

+------------------------+| San Mateo | 1 |+------------------------+

その他のリソース地理空間クエリのその他の例については、以下のブログ記事を参照してください。

• Amazon Athena を使用した OpenStreetMap のクエリ• Amazon Athena および Amazon QuickSight を使用した 200 年以上のグローバル気候データの視覚化。

Athena による Apache Hudi データセットに対するクエリ

Apache Hudi は、増分データ処理を簡素化するオープンソースのデータ管理フレームワークです。レコードレベルの挿入、更新、アップサート、および削除アクションは、より細かく処理され、オーバーヘッドが削減されます。Upsertは、既存のデータセットにレコードがまだ存在しない場合は挿入し、存在する場合は更新する機能を指します。

Hudi は、分析のパフォーマンス問題を引き起こす可能性のある小さなファイルを多数作成することなく、データの挿入と更新イベントを処理します。Apache Hudi は自動的に変更を追跡し、ファイルをマージして、最適なサイズを維持します。これにより、多数の小さなファイルをモニタリングし、より少ない数の大きなファイルに書き換えるカスタムソリューションを構築する必要がなくなります。

Hudi データセットは、次のユースケースに適しています。

• 一般データ保護規則 (GDPR) やカリフォルニア州消費者プライバシー法 (CCPA) など、個人情報を削除したり、個人データの使用方法を変更したりする権利を実施するプライバシー規制を遵守する。

• 特定のデータの挿入および更新イベントを必要とするセンサーやその他のモノのインターネット (IoT)デバイスからのストリーミングデータを操作する。

• 変更データキャプチャ (CDC) システムの実装

Hudi によって管理されるデータセットは、オープンストレージ形式を使用して S3 に保存されます。現在、Athena は圧縮された Hudi データセットを読み取ることができますが、Hudi データを書き込むことはできません。Athena はApache Hudi バージョン 0.5.2-incubating を使用しています (変更される可能性があります)。Hudi のこのバージョンの詳細については、apache/hudi リリース -0.52 を参照してください。https://github.com/apache/hudi/tree/release-0.5.2GitHub.com.

Hudi データセットストレージタイプHudi データセットは、次のタイプのいずれかになります。

• 書き込み時コピー (CoW) – データは列形式 (Parquet) で保存され、更新ごとに書き込み中にファイルの新しいバージョンが作成されます。

• 読み取り時マージ (MoR) – データは、列形式 (Parquet) 形式と行形式 (Avro) の組み合わせを使用して保存されます。更新は、行形式の delta ファイルに記録され、必要に応じて圧縮されて、新しいバージョンの列形式のファイルが作成されます。

CoWデータセットでは、レコードが更新されるたびに、レコードを含むファイルが更新された値で書き換えられます。MoRデータセットでは、更新があるたびに、Hudi は変更されたレコードの行だけを書き込みます。MoRは、読み取りが少なく書き込みまたは変更が多いワークロードに適しています。CoWは、頻繁に変更されないデータの読み取りが多いワークロードに適しています。

181

Page 191: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド考慮事項と制約事項

Hudi は、データにアクセスするための 3 つの論理ビューを提供します。

• 読み取り最適化ビュー – CoW テーブルからの最新のコミットされたデータセットと、テーブルからの最新の圧縮されたデータセットを提供します。MoR

• 増分ビュー - データセットからの 2 つのアクション間の変更ストリームを提供し、ダウンストリームジョブと ETL (抽出、変換、ロード) ワークフローをフィードします。CoW

• リアルタイムビュー – 列形式のファイルと行形式のファイルをインラインでマージすることで、テーブルからコミットされたデータを提供します。MoR

現在、Athena では、これらのうちの 1 つめの読み取り最適化ビューのみをサポートしています。読み取り最適化ビューのクエリは、すべての圧縮データを返します。これにより、パフォーマンスは向上しますが、最新のデルタコミットは含まれません。ストレージタイプ間での優先項目の選択の詳細については、Apache Hudi ドキュメントの「Storage Types & Views」を参照してください。

考慮事項と制約事項• Athena は、Hudi データの圧縮されたビューの読み取りのみをサポートします。

• 書き込み時コピー (CoW) の場合、Athena はスナップショットクエリをサポートします。• 読み取り時マージ (MOR) の場合、Athena は読み込み最適化クエリをサポートします。

• Athena は Hudi データに対する CTAS (p. 126) や INSERT INTO (p. 408) をサポートしていません。Hudi データセットの記述Athenaに関するサポートが必要な場合は、[email protected] < #################>。

Hudi データの記述の詳細については、次のリソースを参照してください。• 「Amazon EMR リリース ガイド」の「Hudi データセットを操作する」。• Apache Hudi ドキュメントの「Writing Hudi Tables」。

• Athena での Hudi テーブルに対する MSCK REPAIR TABLE はサポートされていません。AWSGlue 以外で作成された Hudi テーブルをロードする必要がある場合は、ALTER TABLE ADDPARTITION (p. 415) を使用してください。

• に登録された Hudi テーブルのクエリはサポートされていません。AWS Lake Formation

Hudi テーブルの作成このセクションでは、Athena の CREATE TABLE ステートメントの例を、Hudi データのパーティションを使用するテーブルおよびパーティションを使用しないテーブルについて示します。

AWS Glue で既に Hudi テーブルを作成している場合は、Athena で直接クエリを実行できます。Athena でHudi テーブルを作成する場合、クエリを実行する前に ALTER TABLE ADD PARTITION を実行して Hudiデータをロードする必要があります。

書き込み時コピー (CoW) テーブル作成の例パーティション分割されていないCoWテーブル

次の例では、 でパーティション分割されていないCoWテーブルを作成しますAthena。

CREATE EXTERNAL TABLE `non_partition_cow`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string,

182

Page 192: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドHudi テーブルの作成

`event_time` string, `event_name` string, `event_guests` int, `event_type` string)ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'LOCATION 's3://bucket/folder/non_partition_cow'

パーティション化されたCoWテーブル次の例では、パーティション分割されたCoWテーブルを に作成しますAthena。

CREATE EXTERNAL TABLE `partition_cow`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int)PARTITIONED BY ( `event_type` string)ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'LOCATION 's3://bucket/folder/partition_cow'

次の ALTER TABLE ADD PARTITION の例では、サンプル partition_cow テーブルに 2 つのパーティションを追加します。

ALTER TABLE partition_cow ADD PARTITION (event_type = 'one') LOCATION 's3://bucket/folder/partition_cow/one/' PARTITION (event_type = 'two') LOCATION 's3://bucket/folder/partition_cow/two/'

読み取り時マージ (MOR) テーブル作成の例Hudi MoR は の Hive メタストアに 2 つのテーブルを作成します。それらは、指定した名前のテーブル (読み取り最適化ビュー) と、同じ名前に _rt が付加されたテーブル (リアルタイムビュー) です。ただし、MoR でAthenaテーブルを作成するときは、読み取り最適化ビューのみをクエリできます。

パーティションを使用しない読み取り時マージ (MOR) テーブル次の例では、 でパーティション分割されていないMoRテーブルを作成しますAthena。

CREATE EXTERNAL TABLE `nonpartition_mor`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string,

183

Page 193: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON のクエリ

`event_id` string, `event_time` string, `event_name` string, `event_guests` int, `event_type` string)ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'LOCATION 's3://bucket/folder/nonpartition_mor'

パーティションを使用する読み取り時マージ (MOR) テーブル次の例では、パーティション分割されたMoRテーブルを に作成しますAthena。

CREATE EXTERNAL TABLE `partition_mor`( `_hoodie_commit_time` string, `_hoodie_commit_seqno` string, `_hoodie_record_key` string, `_hoodie_partition_path` string, `_hoodie_file_name` string, `event_id` string, `event_time` string, `event_name` string, `event_guests` int)PARTITIONED BY ( `event_type` string)ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hudi.hadoop.HoodieParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'LOCATION 's3://bucket/folder/partition_mor'

次の ALTER TABLE ADD PARTITION の例では、サンプル partition_mor テーブルに 2 つのパーティションを追加します。

ALTER TABLE partition_mor ADD PARTITION (event_type = 'one') LOCATION 's3://bucket/folder/partition_mor/one/' PARTITION (event_type = 'two') LOCATION 's3://bucket/folder/partition_mor/two/'

JSON のクエリAmazon Athena では、JSON エンコード形式の値の解析、JSON からのデータの抽出、値の検索、JSON配列の長さとサイズの確認を行うことができます。

トピック• JSON データ読み取りのベストプラクティス (p. 185)• JSON からのデータの抽出 (p. 186)• JSON 配列内の値の検索 (p. 188)• JSON 配列の長さとサイズの取得 (p. 190)• JSON クエリのトラブルシューティング (p. 191)

184

Page 194: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON データ読み取りのベストプラクティス

JSON データ読み取りのベストプラクティスJavaScript Object Notation (JSON) は、データ構造をテキストとしてエンコードするための一般的な方法です。多くのアプリケーションやツールは、JSON エンコード形式のデータを出力します。

Amazon Athena では、外部データからテーブルを作成し、このテーブルに JSON エンコード形式のデータを格納できます。このような種類のソースデータには、JSON SerDe ライブラリ (p. 387) とともにAthena を使用します。

JSON でエンコードされたデータを読み取るために以下のヒントを使用してください。

• 適切な SerDe、ネイティブ JSON SerDe、org.apache.hive.hcatalog.data.JsonSerDe、またはOpenX SerDe、org.openx.data.jsonserde.JsonSerDe を選択します。詳細については、「JSONSerDe ライブラリ (p. 387)」を参照してください。

• 各 JSON エンコード方式のレコードが個別の行に入力されていることを確認します。• JSON でエンコードされたデータを、大文字と小文字が区別されない列内に生成します。• 例に示すように、誤った形式のレコードを無視するオプションを指定します。

CREATE EXTERNAL TABLE json_table ( column_a string, column_b int ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true') LOCATION 's3://bucket/path/';

• スキーマが未定義であるソースデータのフィールドを、Athena で JSON 形式でエンコードされた文字列に変換します。

Athena は、JSON データに基づくテーブルを作成するときに、既存および定義済みのスキーマに基づいてデータを解析します。ただし、スキーマが未定義のデータもあり得ます。このような場合、スキーマ管理を簡素化するには、スキーマが未定義であるソースデータのフィールドを Athena で JSON 文字列に変換し、JSON SerDe ライブラリ (p. 387)を使用できます。

たとえば、さまざまなセンサーからのイベントを一般的なフィールドで発行する IoT アプリケーションについて考えます。これらのフィールドの 1 つに、イベントを送信するセンサー独自のカスタムペイロードを保存する必要があるとします。この場合、スキーマがわからないため、情報を JSON エンコード形式の文字列として保存することをお勧めします。これを行うには、次の例に示すように、Athena テーブル内のデータを JSON に変換します。JSON エンコード形式のデータを Athena のデータ型に変換することもできます。

• Athena のデータ型を JSON に変換する (p. 185)• JSON を Athena のデータ型に変換する (p. 186)

Athena のデータ型を JSON に変換するAthena のデータ型を JSON に変換するには、CAST を使用します。

WITH dataset AS ( SELECT CAST('HELLO ATHENA' AS JSON) AS hello_msg, CAST(12345 AS JSON) AS some_int, CAST(MAP(ARRAY['a', 'b'], ARRAY[1,2]) AS JSON) AS some_map)SELECT * FROM dataset

185

Page 195: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON からのデータの抽出

このクエリは以下を返します。

+-------------------------------------------+| hello_msg | some_int | some_map |+-------------------------------------------+| "HELLO ATHENA" | 12345 | {"a":1,"b":2} |+-------------------------------------------+

JSON を Athena のデータ型に変換するJSON データを Athena のデータ型に変換するには、CAST を使用します。

Note

次の例では、文字列を JSON エンコード形式にするために、JSON キーワードで開始し、文字列を単一引用符で囲んでいます (例: JSON '12345')。

WITH dataset AS ( SELECT CAST(JSON '"HELLO ATHENA"' AS VARCHAR) AS hello_msg, CAST(JSON '12345' AS INTEGER) AS some_int, CAST(JSON '{"a":1,"b":2}' AS MAP(VARCHAR, INTEGER)) AS some_map)SELECT * FROM dataset

このクエリは以下を返します。

+-------------------------------------+| hello_msg | some_int | some_map |+-------------------------------------+| HELLO ATHENA | 12345 | {a:1,b:2} |+-------------------------------------+

JSON からのデータの抽出ソースデータには、Athena のテーブル内に逆シリアル化しない JSON エンコード形式の文字列が含まれている場合もあります。このような場合でも、Presto の JSON 関数を使用し、このデータに対して SQLオペレーションを実行できます。

次の JSON 文字列をデータセット例として考えます。

{"name": "Susan Smith","org": "engineering","projects": [ {"name":"project1", "completed":false}, {"name":"project2", "completed":true} ]}

例: プロパティの抽出この JSON 文字列から name プロパティと projects プロパティを抽出するには、次の例に示すように、json_extract 関数を使用します。json_extract 関数は、JSON 文字列を含む列を対象にして、JSONPath (ドット . 表記を含む式など) を使用して JSON 文字列を検索します。

186

Page 196: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON からのデータの抽出

Note

JSONPath は、単純なツリー トラバーサルを行います。JSON ドキュメントのルートを示す $ 記号に続けて、ルートの直下にネストされたピリオドと要素を使用します (例: $.name)。

WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false}, {"name":"project2", "completed":true}]}' AS blob)SELECT json_extract(blob, '$.name') AS name, json_extract(blob, '$.projects') AS projectsFROM dataset

返される値は、Athena のネイティブデータ型ではなく、JSON エンコード形式の文字列です。

+-----------------------------------------------------------------------------------------------+| name | projects |+-----------------------------------------------------------------------------------------------+| "Susan Smith" | [{"name":"project1","completed":false},{"name":"project2","completed":true}] |+-----------------------------------------------------------------------------------------------+

JSON 文字列からスカラー値を抽出するには、json_extract_scalar 関数を使用します。これはjson_extract に似ていますが、スカラー値 (ブール値、数値、文字列) のみを返します。

Note

配列、マップ、または構造体に対して json_extract_scalar 関数は使用しないでください。

WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS blob)SELECT json_extract_scalar(blob, '$.name') AS name, json_extract_scalar(blob, '$.projects') AS projectsFROM dataset

このクエリは以下を返します。

+---------------------------+| name | projects |+---------------------------+| Susan Smith | |+---------------------------+

配列の例で projects プロパティの最初の要素を取得するには、json_array_get 関数を使用してインデックス位置を指定します。

187

Page 197: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON 配列内の値の検索

WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS blob)SELECT json_array_get(json_extract(blob, '$.projects'), 0) AS itemFROM dataset

JSON エンコード形式の配列で、指定したインデックス位置にある値が返されます。

+---------------------------------------+| item |+---------------------------------------+| {"name":"project1","completed":false} |+---------------------------------------+

Athena の文字列型を返すには、JSONPath 式内で [] 演算子を使用し、次に json_extract_scalar 関数を使用します。[] の詳細については、「配列要素へのアクセス (p. 157)」を参照してください。

WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS blob)SELECT json_extract_scalar(blob, '$.projects[0].name') AS project_nameFROM dataset

次の結果が返されます。

+--------------+| project_name |+--------------+| project1 |+--------------+

JSON 配列内の値の検索JSON エンコード形式の配列内に特定の値が存在するかどうかを確認するには、json_array_contains関数を使用します。

次のクエリでは「project2」に参加しているユーザーの名前を一覧表示します。

WITH dataset AS ( SELECT * FROM (VALUES (JSON '{"name": "Bob Smith", "org": "legal", "projects": ["project1"]}'), (JSON '{"name": "Susan Smith", "org": "engineering", "projects": ["project1", "project2", "project3"]}'), (JSON '{"name": "Jane Smith", "org": "finance", "projects": ["project1", "project2"]}') ) AS t (users))SELECT json_extract_scalar(users, '$.name') AS userFROM datasetWHERE json_array_contains(json_extract(users, '$.projects'), 'project2')

このクエリはユーザーのリストを返します。

188

Page 198: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON 配列内の値の検索

+-------------+| user |+-------------+| Susan Smith |+-------------+| Jane Smith |+-------------+

次のクエリ例では、プロジェクトを完了したユーザーの名前とユーザー別の完了したプロジェクト数を一覧表示します。実行するアクションは以下のとおりです。

• SELECT ステートメントをネストして見やすくします。• プロジェクトの配列を抽出します。• CAST で配列をキー/値ペアのネイティブ配列に変換します。• UNNEST 演算子を使用して配列の各要素を抽出します。• 取得した値をフィルタ処理して完了済みプロジェクトに絞り込み、カウントします。

Note

CAST を使用して MAP する場合、キー要素を VARCHAR (Presto のネイティブ文字列) として指定できますが、値は JSON のままにします。MAP の値は、最初のキー/値ペアが文字列型で、2 番目のペアがブール型であるなど、さまざまな型になるためです。

WITH dataset AS ( SELECT * FROM (VALUES (JSON '{"name": "Bob Smith", "org": "legal", "projects": [{"name":"project1", "completed":false}]}'), (JSON '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project2", "completed":true}, {"name":"project3", "completed":true}]}'), (JSON '{"name": "Jane Smith", "org": "finance", "projects": [{"name":"project2", "completed":true}]}') ) AS t (users)),employees AS ( SELECT users, CAST(json_extract(users, '$.projects') AS ARRAY(MAP(VARCHAR, JSON))) AS projects_array FROM dataset),names AS ( SELECT json_extract_scalar(users, '$.name') AS name, projects FROM employees, UNNEST (projects_array) AS t(projects))SELECT name, count(projects) AS completed_projects FROM namesWHERE cast(element_at(projects, 'completed') AS BOOLEAN) = trueGROUP BY name

このクエリは次の結果を返します。

+----------------------------------+| name | completed_projects |+----------------------------------+| Susan Smith | 2 |+----------------------------------+| Jane Smith | 1 |+----------------------------------+

189

Page 199: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON 配列の長さとサイズの取得

JSON 配列の長さとサイズの取得例: json_array_lengthJSON エンコード形式の配列の長さを取得するには、json_array_length 関数を使用します。

WITH dataset AS ( SELECT * FROM (VALUES (JSON '{"name": "Bob Smith", "org": "legal", "projects": [{"name":"project1", "completed":false}]}'), (JSON '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project2", "completed":true}, {"name":"project3", "completed":true}]}'), (JSON '{"name": "Jane Smith", "org": "finance", "projects": [{"name":"project2", "completed":true}]}') ) AS t (users))SELECT json_extract_scalar(users, '$.name') as name, json_array_length(json_extract(users, '$.projects')) as countFROM datasetORDER BY count DESC

このクエリは次の結果を返します。

+---------------------+| name | count |+---------------------+| Susan Smith | 2 |+---------------------+| Bob Smith | 1 |+---------------------+| Jane Smith | 1 |+---------------------+

例: json_sizeJSON エンコード形式の配列やオブジェクトのサイズを取得するには、json_size 関数を使用し、JSON文字列を含む列とその配列やオブジェクトへの JSONPath 式を指定します。

WITH dataset AS ( SELECT * FROM (VALUES (JSON '{"name": "Bob Smith", "org": "legal", "projects": [{"name":"project1", "completed":false}]}'), (JSON '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project2", "completed":true},{"name":"project3", "completed":true}]}'), (JSON '{"name": "Jane Smith", "org": "finance", "projects": [{"name":"project2", "completed":true}]}') ) AS t (users))SELECT json_extract_scalar(users, '$.name') as name, json_size(users, '$.projects') as countFROM dataset

190

Page 200: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON クエリのトラブルシューティング

ORDER BY count DESC

このクエリは次の結果を返します。

+---------------------+| name | count |+---------------------+| Susan Smith | 2 |+---------------------+| Bob Smith | 1 |+---------------------+| Jane Smith | 1 |+---------------------+

JSON クエリのトラブルシューティングJSON 関連のクエリに関する問題のトラブルシューティングについては、次のリソースを参照してください。

• Amazon Athena で JSON データを読み込もうとすると、エラーが発生します。• 「HIVE_CURSOR_ERROR」を解決する方法。行が有効な JSON オブジェクトではありません -

JSONException : Athena で AWS Config からファイルを読み取るときの重複キー• JSON ファイルに複数のレコードがあるにも関わらず、Amazon Athena の SELECT COUNT クエリがレ

コードを 1 件しか返しません。• Athena テーブルの行の Amazon S3 ソースファイルを表示するにはどうすればよいですか?

「Amazon Athena での SQL クエリに関する考慮事項と制約事項 (p. 435)」も参照してください。

Machine Learning (ML) with Amazon Athena(Preview) を使用する

Machine Learning (ML) with Amazon Athena (Preview) では、Amazon SageMaker を使用する機械学習(ML) 推論を実行する SQL ステートメントを Athena を使用して記述できます。この機能により、データ分析用の ML モデルへのアクセスが簡単になり、複雑なプログラミング方法を使用して推論を実行する必要がなくなります。

ML with Athena (Preview) を使用するには、USING FUNCTION 句を使用して ML with Athena (Preview) 関数を定義します。この関数は、使用する SageMaker モデルエンドポイントを指し、モデルに渡す変数名とデータ型を指定します。クエリの後続の句は、関数を参照してモデルに値を渡します。モデルは、クエリが渡す値に基づいて推論を実行し、推論結果を返します。詳細については、以下を参照してください。 SageMaker どのように SageMaker エンドポイントが機能します。を参照してください。 AmazonSageMaker 開発者ガイド.

考慮事項と制約事項• 利用可能な地域 – は、 Athena ML 機能は、 米国東部(バージニア北部)、 アジアパシフィック (ムンバ

イ)、 欧州 (アイルランド)、および 米国西部 (オレゴン) 地域。• AmazonAthenaPreviewFunctionality ワークグループ – To use this feature in preview, you must create an

Athena workgroup named AmazonAthenaPreviewFunctionality and join that workgroup. For moreinformation, see ワークグループの管理 (p. 340).

• SageMaker モデルエンドポイントは承認して返さなければなりません text/csv – データ形式の詳細については、以下を参照してください。 推論の共通データ形式 の Amazon SageMaker 開発者ガイド.

191

Page 201: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドML with Athena (Preview) 構文

• SageMaker エンドポイントのスケーリング – 参照された SageMaker モデルのエンドポイントが、エンドポイントへの Athena 呼び出しに対して、十分にスケールアップされていることを確認します。詳細については、以下を参照してください。 自動スケール SageMaker モデル の Amazon SageMaker 開発者ガイド および エンドポイント設定を作成 の Amazon SageMaker API リファレンス.

• IAM アクセス許可 – ML with Athena (Preview) 関数を指定するクエリ を実行するには、クエリを実行する IAM プリンシパルが、参照される SageMaker モデルエンドポイントに対するsagemaker:InvokeEndpoint アクションの実行を許可されている必要があります。詳細については、「ML with Athena (Preview) のアクセスの許可 (p. 273)」を参照してください。

• ML with Athena (Preview) 関数は で使用できません。 GROUP BY 直接条項

ML with Athena (Preview) 構文USING FUNCTION 句は、クエリで後続の SELECT ステートメントで参照できる ML with Athena (Preview)関数または複数の関数を指定します。関数名、変数名、および変数と戻り値のデータ型を定義します。

Synopsis次の例は、ML with Athena (Preview) 関数を指定する USING FUNCTION 句を示しています。

USING FUNCTION ML_function_name(variable1 data_type[, variable2 data_type][,...]) RETURNS data_type TYPE SAGEMAKER_INVOKE_ENDPOINT WITH (sagemaker_endpoint= 'my_sagemaker_endpoint')[, FUNCTION...][, ...] SELECT [...] ML_function_name(expression) [...]

Parameters機能の使用 ML_function_name(variable1 data_type[, variable2 data_type][,...])

ML_function_name 関数名を定義します。関数名は、後続のクエリ句で使用できます。各variable data_type は、対応するデータ型を持つ名前付き変数を指定します。 SageMaker モデルは入力として受け付けます。 を指定します。data_type サポート対象の Athena データタイプをSageMaker モデルは入力として受け付けます。

RETURNS data_type TYPE

data_type は、SageMaker モデルからの出力として ML_function_name がクエリに返す SQLデータ型を指定します。

SAGEMAKER_INVOKE_ENDPOINT WITH (sagemaker_endpoint= 'my_sagemaker_endpoint')

my_sagemaker_endpoint は、 SageMaker モデル。SELECT [...] ML_function_name(expression) [...]

関数変数に値を渡す SELECT クエリと、 SageMaker 結果を返すモデル。ML_function_name は、クエリで以前に定義された関数を指定し、 expression 値が渡されるように評価されます。渡される値および返される値は、USING FUNCTION 句内の関数に指定された対応するデータ型と一致する必要があります。

Examples次の例は、ML with Athena (Preview) を使用したクエリを示しています。

Example

USING FUNCTION predict_customer_registration(age INTEGER)

192

Page 202: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドUDF を使用したクエリ(プレビュー)

RETURNS DOUBLE TYPE SAGEMAKER_INVOKE_ENDPOINT WITH (sagemaker_endpoint = 'xgboost-2019-09-20-04-49-29-303') SELECT predict_customer_registration(age) AS probability_of_enrolling, customer_id FROM "sampledb"."ml_test_dataset" WHERE predict_customer_registration(age) < 0.5;

ユーザー定義関数を使用したクエリ(プレビュー)Amazon Athena のユーザー定義関数 (UDF) を使用すると、レコードまたはレコードのグループを処理するカスタム関数を作成できます。UDF は、パラメータを受け入れ、作業を実行し、結果を返します。

Athena で UDF を使用するには、SQL クエリの SELECT ステートメントの前に USING FUNCTION 句を記述します。この SELECT ステートメントは UDF を参照し、クエリの実行時に、UDF に渡される変数を定義します。SQL クエリは、UDF を呼び出すときに Java ランタイムを使用して Lambda 関数を呼び出します。UDF は、Java デプロイパッケージのメソッドとして Lambda 関数内で定義されます。1 つの Lambda 関数に対して同じ Java デプロイパッケージで複数の UDF を定義できます。また、USINGFUNCTION 句で Lambda 関数の名前も指定します。

Athena UDF の Lambda 関数をデプロイするための 2 つのオプションがあります。Lambda を使用して直接関数をデプロイするか、AWS Serverless Application Repository を使用できます。UDF の既存のLambda 関数を検索するには、パブリック AWS Serverless Application Repository またはプライベートリポジトリを検索し、Lambda にデプロイします。また、Java ソースコードを作成または変更して、JARファイルにパッケージ化、Lambda またはAWS Serverless Application Repository を使用してデプロイすることもできます。開始するために、Java ソースコードとパッケージの例を提供します。Lambda の詳細については、「AWS Lambda Developer Guide」を参照してください。AWS Serverless ApplicationRepository の詳細については、AWS Serverless Application Repository 開発者ガイド を参照してください。

考慮事項と制約事項• 利用できるリージョン – Athena UDF 機能は、米国東部(バージニア北部)、アジアパシフィック (ムン

バイ)、欧州 (アイルランド)、および 米国西部 (オレゴン) リージョンのプレビューで利用できます。• AmazonAthenaPreviewFunctionality ワークグループ – To use this feature in preview, you must create an

Athena workgroup named AmazonAthenaPreviewFunctionality and join that workgroup. For moreinformation, see ワークグループの管理 (p. 340).

• 組み込み Athena 関数 – Athena の組み込み Presto 関数は、高い性能を発揮するように設計されています。可能な場合は、UDF よりも組み込み関数を使用することをお勧めします。組み込み関数の詳細については、「Amazon Athena の Presto 関数 (p. 411)」を参照してください。

• スカラー UDF のみ – Athena は、一度に 1 行を処理し 1 つの列の値を返す、スカラー UDF のみをサポートします。Athena は、Lambda を呼び出すたびに、行のバッチを UDF に渡します(並行処理される可能性があります)。UDF とクエリを設計するときは、この処理設計がネットワークトラフィックに与える可能性のある影響に注意する必要があります。

• Java ランタイムのみ – 現在、Athena UDF は Lambda の Java 8 ランタイムのみをサポートします。• IAM アクセス許可 – UDF クエリステートメントを含むで Athena クエリを実行し、UDF ステートメント

を作成するには、クエリを実行する IAM プリンシパルが Athena 関数に加えてアクションの実行を許可される必要があります。詳細については、「Amazon Athena User Defined Functions (UDF) を許可するIAM アクセス許可ポリシーの例 (p. 269)」を参照してください。

• Lambda クォータ – Lambda クォータは UDF に適用されます。詳細については、AWS LambdaDeveloper Guideの「AWS Lambda のクォータ」を参照してください。

• 既知の問題 – 最新の既知の問題の一覧については、Athena Federated Query (Preview) の「Limitationsand Issues」を参照してください。

193

Page 203: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドUDF クエリ構文

UDF クエリ構文USING FUNCTION 句は、クエリで後続の SELECT ステートメントで参照できる UDF または複数の UDFを指定します。UDF のメソッド名と UDF をホストする Lambda 関数の名前が必要です。

概要

USING FUNCTION UDF_name(variable1 data_type[, variable2 data_type][,...]) RETURNS data_type TYPE LAMBDA_INVOKE WITH (lambda_name = 'my_lambda_function')[, FUNCTION][, ...] SELECT [...] UDF_name(expression) [...]

パラメータ関数 UDF_name(variable1 data_type[, variable2 data_type][,...]) の使用

UDF_name は、UDF の名前を指定します。UDF の名前は、参照される Lambda 関数内の Java メソッドに対応している必要があります。各 variable data_type は、UDF が入力として受け入れることができる、対応するデータ型により名前付き変数を指定します。data_type は、次の表に示す、サポートされている Athena データ型の 1 つとして指定します。データ型は、対応する Java データ型にマッピングする必要があります。

Athena データ型 Java データ型

TIMESTAMP java.time.LocalDateTime (UTC)

DATE java.time.LocalDate (UTC)

TINYINT java.lang.Byte

SMALLINT java.lang.Short

REAL java.lang.Float

DOUBLE java.lang.Double

DECIMAL java.math.BigDecimal

BIGINT java.lang.Long

INTEGER java.lang.Int

VARCHAR java.lang.String

VARBINARY byte[]

BOOLEAN java.lang.Boolean

ARRAY java.util.List

ROW java.util.Map<文字列、オブジェクト>

RETURNS data_type TYPE

data_type は、UDF が出力として返す SQL データ型を指定します。上記の表にリストされているAthena データ型がサポートされています。

194

Page 204: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドLambda 使用した UDF の作成とデプロイ

LAMBDA_INVOKE WITH (lambda_name = 'my_lambda_function')

my_lambda_function は、UDF の実行時に呼び出される Lambda 関数の名前を指定します。SELECT [...] UDF_name(expression) [...]

UDF に値を渡して結果を返す SELECT クエリ。UDF_name は、使用する UDF を指定し、その後に値を渡すために評価される expression を指定します。渡される値および返される値は、USINGFUNCTION 句内の UDF に指定された対応するデータ型と一致する必要があります。

例次に、UDF を使用したクエリの例を示します。Athena クエリの例は、GitHub の AthenaUDFHandler.javaコードに基づいています。

Example – 文字列の圧縮と圧縮解除

Athena SQL

次の例は、MyAthenaUDFLambda という名前の Lambda 関数で定義された compress UDF の使用方法を示しています。

USING FUNCTION compress(col1 VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'MyAthenaUDFLambda') SELECT compress('StringToBeCompressed');

クエリ結果は、ewLLinKzEsPyXdKdc7PLShKLS5OTQEAUrEH9w== を返します。

次の例は、同じ Lambda 関数で定義された decompress UDF の使用方法を示しています。

USING FUNCTION decompress(col1 VARCHAR) RETURNS VARCHAR TYPE LAMBDA_INVOKE WITH (lambda_name = 'MyAthenaUDFLambda') SELECT decompress('ewLLinKzEsPyXdKdc7PLShKLS5OTQEAUrEH9w==');

クエリ結果は、StringToBeCompressed を返します。

Lambda 使用した UDF の作成とデプロイカスタム UDF を作成するには、UserDefinedFunctionHandler クラスを拡張して新しい Java クラスを作成します。SDK の UserDefinedFunctionHandler.java のソースコードは、GitHub の awslabs/aws-athena-query-federation/athena-federation-sdk リポジトリで入手できます。このコードには、検証および変更して UDF を作成するために使用できる UDF 実装例が付属しています。

このセクションの手順では、コマンドラインとデプロイから Apache Maven を使用してカスタム UDF Jarファイルを記述し、構築する方法を示します。

Maven を使用する Athena にカスタム UDF を作成する手順• SDK のクローン作成と開発環境の準備 (p. 196)• Maven プロジェクトを作成する (p. 196)• Maven プロジェクトへの依存関係とプラグインの追加 (p. 196)• UDF に Java コードを記述する (p. 197)• JAR ファイルのビルド (p. 199)• JAR を AWS Lambda にデプロイする (p. 199)

195

Page 205: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドLambda 使用した UDF の作成とデプロイ

SDK のクローン作成と開発環境の準備始める前に、sudo yum install git -y を使用して git がシステムにインストールされていることを確認してください。

AWS クエリフェデレーション SDK をインストールするには

• コマンドラインで次のコマンドを入力して、SDK リポジトリのクローンを作成します。このリポジトリには、SDK、例、データソースコネクタのスイートが含まれています。データソースコネクタの詳細については、「Amazon Athena Federated Query (Preview) を使用する (p. 55)」を参照してください。

git clone https://github.com/awslabs/aws-athena-query-federation.git

この手順の前提条件をインストールするには

Apache Maven、AWS CLI、および AWS サーバーレスアプリケーションモデル ビルドツールがすでにインストールされている開発マシンで作業している場合は、このステップをスキップできます。

1. クローン作成時に作成した aws-athena-query-federation ディレクトリのルートから、開発環境を準備する prepare_dev_env.sh スクリプトを実行します。

2. インストールプロセスによって作成された新しい変数を調達するようにシェルを更新するか、ターミナルセッションを再起動します。

source ~/.profile

Important

この手順をスキップすると、後で AWS CLI または AWS SAM ビルドツールが Lambda 関数を公開できないというエラーが表示されます。

Maven プロジェクトを作成する次のコマンドを実行して、Maven プロジェクトを作成します。groupId を組織の一意の ID に置き換え、my-athena-udf をアプリケーション名に置き換えます。詳細については、Apache Maven ドキュメントの「How do I make my first Maven project?」を参照してください。

mvn -B archetype:generate \-DarchetypeGroupId=org.apache.maven.archetypes \-DgroupId=groupId \-DartifactId=my-athena-udfs

Maven プロジェクトへの依存関係とプラグインの追加Maven プロジェクト pom.xml ファイルに次の設定を追加します。例については、GitHub の pom.xmlファイルを参照してください。

<properties> <aws-athena-federation-sdk.version>2019.48.1</aws-athena-federation-sdk.version></properties>

<dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-athena-federation-sdk</artifactId>

196

Page 206: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドLambda 使用した UDF の作成とデプロイ

<version>${aws-athena-federation-sdk.version}</version> </dependency></dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version> <configuration> <createDependencyReducedPom>false</createDependencyReducedPom> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin> </plugins></build>

UDF に Java コードを記述するUserDefinedFunctionHandler.java を拡張して、新しいクラスを作成します。クラス内に UDF を記述します。

次の例では、UDF の 2 つの Java メソッド、compress() および decompress() がクラスMyUserDefinedFunctions 内に作成されます。

*package *com.mycompany.athena.udfs;

public class MyUserDefinedFunctions extends UserDefinedFunctionHandler{ private static final String SOURCE_TYPE = "MyCompany";

public MyUserDefinedFunctions() { super(SOURCE_TYPE); }

/** * Compresses a valid UTF-8 String using the zlib compression library. * Encodes bytes with Base64 encoding scheme. * * @param input the String to be compressed * @return the compressed String */ public String compress(String input) {

197

Page 207: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドLambda 使用した UDF の作成とデプロイ

byte[] inputBytes = input.getBytes(StandardCharsets.UTF_8);

// create compressor Deflater compressor = new Deflater(); compressor.setInput(inputBytes); compressor.finish();

// compress bytes to output stream byte[] buffer = new byte[4096]; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(inputBytes.length); while (!compressor.finished()) { int bytes = compressor.deflate(buffer); byteArrayOutputStream.write(buffer, 0, bytes); }

try { byteArrayOutputStream.close(); } catch (IOException e) { throw new RuntimeException("Failed to close ByteArrayOutputStream", e); }

// return encoded string byte[] compressedBytes = byteArrayOutputStream.toByteArray(); return Base64.getEncoder().encodeToString(compressedBytes); }

/** * Decompresses a valid String that has been compressed using the zlib compression library. * Decodes bytes with Base64 decoding scheme. * * @param input the String to be decompressed * @return the decompressed String */ public String decompress(String input) { byte[] inputBytes = Base64.getDecoder().decode((input));

// create decompressor Inflater decompressor = new Inflater(); decompressor.setInput(inputBytes, 0, inputBytes.length);

// decompress bytes to output stream byte[] buffer = new byte[4096]; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(inputBytes.length); try { while (!decompressor.finished()) { int bytes = decompressor.inflate(buffer); if (bytes == 0 && decompressor.needsInput()) { throw new DataFormatException("Input is truncated"); } byteArrayOutputStream.write(buffer, 0, bytes); } } catch (DataFormatException e) { throw new RuntimeException("Failed to decompress string", e); }

try { byteArrayOutputStream.close(); } catch (IOException e) { throw new RuntimeException("Failed to close ByteArrayOutputStream", e);

198

Page 208: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドLambda 使用した UDF の作成とデプロイ

}

// return decoded string byte[] decompressedBytes = byteArrayOutputStream.toByteArray(); return new String(decompressedBytes, StandardCharsets.UTF_8); }}

JAR ファイルのビルドmvn clean install を実行して、プロジェクトをビルドします。正常にビルドされると、JAR ファイルが artifactId-version.jar という名前のプロジェクトの target フォルダに作成されます。ここで、artifactId は Maven プロジェクトで指定した名前(例: my-athena-udfs)です。

JAR を AWS Lambda にデプロイするコードを Lambda にデプロイする、次の 2 つの方法があります。

• AWS Serverless Application Repository を使用してデプロイする(推奨)• JAR ファイルから Lambda 関数を作成する

オプション 1: AWS Serverless Application Repository にデプロイするJAR ファイルを AWS Serverless Application Repository にデプロイするときは、アプリケーションのアーキテクチャを表す AWS SAM テンプレート YAML ファイルを作成します。次に、この YAML ファイルと、アプリケーションのアーティファクトがアップロードされて AWS Serverless Application Repositoryに対して利用可能になる Amazon S3 バケットを指定します。以下の手順では、以前にクローンを作成した Athena クエリフェデレーション SDK の athena-query-federation/tools ディレクトリにあるpublish.sh スクリプトを使用します。

詳細および要件については、AWS Serverless Application Repository 開発者ガイド の「アプリケーションの公開 」、AWS サーバーレスアプリケーションモデル 開発者ガイド の「AWS SAM テンプレートの概念」、および「Publishing Serverless Applications Using the AWS SAM CLI」を参照してください。

次の例は、YAML ファイルのパラメータを示しています。同様のパラメータを YAML ファイルに追加し、プロジェクトディレクトリに保存します。完全な例については、GitHub の athena-udf.yaml を参照してください。

Transform: 'AWS::Serverless-2016-10-31'Metadata: 'AWS::ServerlessRepo::Application': Name: MyApplicationName Description: 'The description I write for my application' Author: 'Author Name' Labels: - athena-federation SemanticVersion: 1.0.0Parameters: LambdaFunctionName: Description: 'The name of the Lambda function that will contain your UDFs.' Type: String LambdaTimeout: Description: 'Maximum Lambda invocation runtime in seconds. (min 1 - 900 max)' Default: 900 Type: Number LambdaMemory: Description: 'Lambda memory in MB (min 128 - 3008 max).' Default: 3008 Type: NumberResources:

199

Page 209: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS サービスログをクエリする

ConnectorConfig: Type: 'AWS::Serverless::Function' Properties: FunctionName: !Ref LambdaFunctionName Handler: "full.path.to.your.handler. For example, com.amazonaws.athena.connectors.udfs.MyUDFHandler" CodeUri: "Relative path to your JAR file. For example, ./target/athena-udfs-1.0.jar" Description: "My description of the UDFs that this Lambda function enables." Runtime: java8 Timeout: !Ref LambdaTimeout MemorySize: !Ref LambdaMemory

YAML ファイルを保存したプロジェクトディレクトリに publish.sh スクリプトをコピーし、次のコマンドを実行します。

./publish.sh MyS3Location MyYamlFile

たとえば、バケットの場所が s3://mybucket/mysarapps/athenaudf で、YAML ファイルが my-athena-udfs.yaml として保存された場合:

./publish.sh mybucket/mysarapps/athenaudf my-athena-udfs

Lambda 関数を作成するには

1. https://console.aws.amazon.com/lambda/ で Lambda コンソールを開き、[関数の作成] を選択し、[Browse serverless app repository (サーバーレスアプリケーションリポジトリを参照)] を選択します。

2. [プライベートアプリケーション] を選択し、リストでアプリケーションを見つけるか、キーワードを使用してアプリケーションを検索して選択します。

3. アプリケーションの詳細を確認して指定し、[デプロイ] を選択します。

Lambda 関数の JAR ファイルで定義されたメソッド名を Athena で UDF として使用できるようになりました。

オプション 2: Lambda 関数を直接作成するコンソールまたは AWS CLI を使用して直接 Lambda 関数を作成することもできます。次の例は、Lambdacreate-function CLI コマンドを使用する方法を示しています。

aws lambda create-function \ --function-name MyLambdaFunctionName \ --runtime java8 \ --role arn:aws:iam::1234567890123:role/my_lambda_role \ --handler com.mycompany.athena.udfs.MyUserDefinedFunctions \ --timeout 900 \ --zip-file fileb://./target/my-athena-udfs-1.0-SNAPSHOT.jar

AWS サービスログをクエリするこのセクションでは、Amazon Athena を使用して一般的なデータセット (AWS CloudTrail ログ、AmazonCloudFront ログ、Classic Load Balancer ログ、Application Load Balancer ログ、Amazon VPC フローログ、Network Load Balancer ログなど) をクエリするための手順をいくつか示します。

このセクションのタスクでは、Athena コンソールを使用していますが、JDBC を介して接続する他のツールを使うこともできます。詳細については、「JDBC ドライバーを介した Athena の使用 (p. 72)」、「AWS CLI」、または Amazon Athena API リファレンス を参照してください。

200

Page 210: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApplication Load Balancer ログのクエリ

このセクションのトピックでは、Athena にアクセスするための適切なアクセス許可を持つ IAM ユーザーと、クエリ対象のデータを格納する Amazon S3 バケットの両方を設定済みであるものとします。詳細については、「セットアップ (p. 6)」と「開始方法 (p. 8)」を参照してください。

トピック• Application Load Balancer ログのクエリ (p. 201)• Classic Load Balancer ログのクエリ (p. 203)• Amazon CloudFront ログのクエリ (p. 204)• AWS CloudTrail ログのクエリ (p. 206)• Amazon EMR ログのクエリ (p. 211)• AWS Global Accelerator フローログのクエリ (p. 214)• Amazon GuardDuty 結果のクエリの実行 (p. 216)• Network Load Balancer ログのクエリ (p. 217)• Amazon VPC フローログのクエリ (p. 219)• AWS WAF ログのクエリ (p. 221)

Application Load Balancer ログのクエリApplication Load Balancerは、コンテナを使用したマイクロサービスのデプロイでトラフィック分散を有効にする、 の負荷分散オプションです。Elastic Load BalancingApplication Load Balancerログをクエリすることで、トラフィックの送信元、レイテンシー、Elastic Load Balancingおよびインスタンスとバックエンドアプリケーションとの間で転送されるバイト数を確認できます。詳細については、次のガイドの「Application Load Balancer のアクセスログ」を参照してくださいApplication Load Balancer 用ユーザーガイド。

トピック• Prerequisites (p. 201)• ALB ログのテーブルの作成 (p. 201)• ALB ログのクエリ例 (p. 202)

Prerequisites• アクセスのログ記録を有効にして、Application Load BalancerログをAmazon S3バケットに保存できる

ようにします。

ALB ログのテーブルの作成1. 次のCREATE TABLEステートメントをコピーしてAthenaコンソールに貼り付けます。の値をバ

ケットの場所に対応する値に置き換えます。LOCATION 's3://your-alb-logs-directory/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/<REGION>/'Amazon S3各フィールドの詳細については、 の「アクセスログのエントリ」を参照してくださいApplication Load Balancer 用ユーザーガイド。

CREATE EXTERNAL TABLE IF NOT EXISTS alb_logs ( type string, time string, elb string, client_ip string, client_port int, target_ip string, target_port int,

201

Page 211: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApplication Load Balancer ログのクエリ

request_processing_time double, target_processing_time double, response_processing_time double, elb_status_code string, target_status_code string, received_bytes bigint, sent_bytes bigint, request_verb string, request_url string, request_proto string, user_agent string, ssl_cipher string, ssl_protocol string, target_group_arn string, trace_id string, domain_name string, chosen_cert_arn string, matched_rule_priority string, request_creation_time string, actions_executed string, redirect_url string, lambda_error_reason string, target_port_list string, target_status_code_list string, classification string, classification_reason string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\s]+?)\" \"([^\s]+)\" \"([^ ]*)\" \"([^ ]*)\"') LOCATION 's3://your-alb-logs-directory/AWSLogs/<ACCOUNT-ID>/elasticloadbalancing/<REGION>/';

2. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は alb_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

ALB ログのクエリ例次のクエリでは、ロードバランサーで受信し、クライアント IP アドレス別にグループ分けした HTTPGET リクエストの数をカウントします。

SELECT COUNT(request_verb) AS count, request_verb, client_ipFROM alb_logsGROUP BY request_verb, client_ipLIMIT 100;

別のクエリでは、Safari ブラウザのユーザーがURLsアクセスした を表示します。

SELECT request_urlFROM alb_logsWHERE user_agent LIKE '%Safari%'LIMIT 10;

202

Page 212: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドClassic Load Balancer ログのクエリ

次の例は、datetime でログを解析する方法を示しています。

SELECT client_ip, sum(received_bytes) FROM alb_logsWHERE parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') BETWEEN parse_datetime('2018-05-30-12:00:00','yyyy-MM-dd-HH:mm:ss') AND parse_datetime('2018-05-31-00:00:00','yyyy-MM-dd-HH:mm:ss') GROUP BY client_ip;

• 詳細と例については、AWSナレッジセンターの記事「Athena を使用して Application Load Balancer のアクセスログを分析する方法」を参照してください。

• による Athena ALB ログのパーティション化の詳細については、 の athena-add-partition を参照してくださいGitHub。

Classic Load Balancer ログのクエリClassic Load Balancer ログを使用して、Elastic Load Balancing インスタンスおよびバックエンドアプリケーションとの間で送受信されるトラフィックのパターンを分析して理解します。トラフィックの送信元、レイテンシー、および転送されたバイト数を確認できます。

Elastic Load Balancing ログを分析する前に、ログの保存先として Amazon S3 バケットを設定します。詳細については、Classic Load Balancer のアクセスログの有効化」を参照してください。

• Elastic Load Balancing ログのテーブルの作成 (p. 203)• Elastic Load Balancing クエリの例 (p. 204)

Elastic Load Balancing ログのテーブルを作成するには1. 次の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。Elastic Load Balancing

ログレコードの構文を確認します。次のクエリを更新して、最新バージョンのレコードの列と正規表現の構文を含めることが必要になる場合があります。

CREATE EXTERNAL TABLE IF NOT EXISTS elb_logs ( timestamp string, elb_name string, request_ip string, request_port int, backend_ip string, backend_port int, request_processing_time double, backend_processing_time double, client_response_time double, elb_response_code string, backend_response_code string, received_bytes bigint, sent_bytes bigint, request_verb string, url string, protocol string, user_agent string, ssl_cipher string, ssl_protocol string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'WITH SERDEPROPERTIES ( 'serialization.format' = '1',

203

Page 213: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon CloudFront ログのクエリ

'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (\"[^\"]*\") ([A-Z0-9-]+) ([A-Za-z0-9.-]*)$' )LOCATION 's3://your_log_bucket/prefix/AWSLogs/AWS_account_ID/elasticloadbalancing/';

2. LOCATION Amazon S3 バケットを変更し、Elastic Load Balancing ログの保存先を指定します。3. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は elb_logs テーブルを登

録し、そのデータに対してクエリを発行できるように準備します。詳細については、「Elastic LoadBalancing クエリの例 (p. 204)」を参照してください。

Elastic Load Balancing クエリの例次の例のようなクエリを使用します。この例では、4XX または 5XX エラーレスポンスコードを返したバックエンドアプリケーションサーバーを示しています。LIMIT 演算子を使用すると、一度にクエリするログの数を制限できます。

SELECT timestamp, elb_name, backend_ip, backend_response_codeFROM elb_logsWHERE backend_response_code LIKE '4%' OR backend_response_code LIKE '5%'LIMIT 100;

次のクエリを使用して、バックエンド IP アドレスと Elastic Load Balancing インスタンス名ごとにグループ分けしたすべてのトランザクションの応答時間を合算します。

SELECT sum(backend_processing_time) AS total_ms, elb_name, backend_ipFROM elb_logs WHERE backend_ip <> ''GROUP BY backend_ip, elb_nameLIMIT 100;

詳細については、「Athena を使用した S3 のデータの分析」を参照してください。

Amazon CloudFront ログのクエリウェブディストリビューションのアクセスログを Amazon Simple Storage Service にエクスポートするように Amazon CloudFront CDN を設定できます。これらのログを使用して、CloudFront が提供するウェブプロパティ全体でのユーザーのサーフィンパターンを調べます。

ログのクエリを開始する前に、使用する CloudFront ディストリビューションでウェブディストリビューションのアクセスログを有効にします。詳細については、Amazon CloudFront 開発者ガイドの「アクセスログ」を参照してください。

ログの保存先の Amazon S3 バケットを書き留めます。Note

この手順は、CloudFront のウェブディストリビューションのアクセスログ用です。RTMP ディストリビューションのストリーミングログには該当しません。

• CloudFront ログのテーブルの作成 (p. 205)• CloudFront ログのクエリ例 (p. 205)

204

Page 214: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon CloudFront ログのクエリ

CloudFront ログのテーブルの作成CloudFront テーブルを作成するには

1. 次の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。ログを保存する AmazonS3 バケットの LOCATION を変更します。

このクエリでは、デフォルトで使用される LazySimpleSerDe (p. 391) が省略されています。

列 date は、Athena の予約語であるため、バックティック (`) を使用してエスケープされています。詳細については、予約キーワード (p. 86) を参照してください。

CREATE EXTERNAL TABLE IF NOT EXISTS default.cloudfront_logs ( `date` DATE, time STRING, location STRING, bytes BIGINT, request_ip STRING, method STRING, host STRING, uri STRING, status INT, referrer STRING, user_agent STRING, query_string STRING, cookie STRING, result_type STRING, request_id STRING, host_header STRING, request_protocol STRING, request_bytes BIGINT, time_taken FLOAT, xforwarded_for STRING, ssl_protocol STRING, ssl_cipher STRING, response_result_type STRING, http_version STRING, fle_status STRING, fle_encrypted_fields INT, c_port INT, time_to_first_byte FLOAT, x_edge_detailed_result_type STRING, sc_content_type STRING, sc_content_len BIGINT, sc_range_start BIGINT, sc_range_end BIGINT)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'LOCATION 's3://CloudFront_bucket_name/CloudFront/'TBLPROPERTIES ( 'skip.header.line.count'='2' )

2. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は cloudfront_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

CloudFront ログのクエリ例次のクエリでは、2018 年 6 月 9 日~6 月 11 日に CloudFront で処理されたバイト数を加算します。date列名は予約語であるため、二重引用符で囲みます。

SELECT SUM(bytes) AS total_bytes

205

Page 215: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CloudTrail ログのクエリ

FROM cloudfront_logsWHERE "date" BETWEEN DATE '2018-06-09' AND DATE '2018-06-11'LIMIT 100;

クエリ結果から重複する行 (重複する空の行など) を削除するには、次の例のように SELECT DISTINCTステートメントを使用します。

SELECT DISTINCT * FROM cloudfront_logs LIMIT 10;

その他のリソースAthena を使用して CloudFront ログのクエリを実行する方法の詳細については、AWS ビッグデータブログの次の投稿を参照してください。

Amazon Athena を使用して AWS のサービスログを簡単にクエリする (2019 年 5 月 29 日)。

Amazon CloudFront のアクセスログを大規模に分析する (December 21, 2018 年 12 月 21 日)。

AWS Lambda、Amazon Athena、Amazon Kinesis Analytics を使用して Amazon CloudFront アクセスログを分析するためのサーバーレスアーキテクチャを構築する (2017 年 5 月 26 日)。

AWS CloudTrail ログのクエリAWS CloudTrail は、AWS アカウントの AWS API コールとイベントを記録するサービスです。

CloudTrail ログには、AWS のサービス (コンソールなど) に対する API コールの詳細が含まれています。CloudTrail は暗号化されたログファイルを生成し、Amazon S3 に保存します。詳細については、AWSCloudTrail ユーザーガイドを参照してください。

CloudTrail ログで Athena を使用すると、AWS サービスのアクティビティ分析が大幅に強化されます。たとえば、クエリを使用して傾向を識別したり、アクティビティを属性 (ソース IP アドレスやユーザーなど)でさらに分離したりできます。

CloudTrail ログの一般的な用途として、運用上のアクティビティを分析してセキュリティやコンプライアンスに役立てることができます。詳細な例について詳しくは、AWS Big Data Blog の記事「AWSCloudTrail と Amazon Athena を使用してセキュリティ、コンプライアンス、運用上のアクティビティを分析する方法」を参照してください。

Athena では、保存先の Amazon S3 を LOCATION で指定し、そこでログファイルを直接クエリできます。これには以下の 2 つの方法があります。

• CloudTrail コンソールから直接 CloudTrail ログファイルのテーブルを作成する。• Athena コンソールで CloudTrail ログファイルのテーブルを手動で作成する。

トピック• CloudTrail ログと Athena テーブルについて (p. 207)• CloudTrail コンソールを使用した CloudTrail ログの Athena テーブルの作成 (p. 207)• Athena での CloudTrail ログのテーブルの手動作成 (p. 208)• CloudTrail ログのクエリ例 (p. 210)• CloudTrail ログのクエリに関するヒント (p. 210)

206

Page 216: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CloudTrail ログのクエリ

CloudTrail ログと Athena テーブルについてテーブルの作成を開始する前に、CloudTrail の詳細およびデータの保存方法についてもう少し理解しておく必要があります。これは、テーブルを CloudTrail コンソールから作成するにしても Athena から作成するにしても、必要なテーブルを作成する役に立ちます。

CloudTrail は、ログを JSON テキストファイルとして gzip 圧縮形式 (*.json.gzip) で保存します。ログファイルの保存先は、証跡、ログを記録する AWS リージョン、その他の要因の設定方法に応じて異なります。

ログの保存先、JSON 構造、およびレコードファイルの内容の詳細については、AWS CloudTrail ユーザーガイドの以下のトピックを参照してください。

• CloudTrail ログファイルの検索• CloudTrail ログファイルの例• CloudTrail レコードの内容• CloudTrail イベントリファレンス

ログを収集して Amazon S3 に保存するには、コンソールで CloudTrail を有効にします。詳細については、AWS CloudTrail ユーザーガイドの「証跡の作成」を参照してください。

ログを保存する送信先 Amazon S3 バケットをメモしておきます。LOCATION 句を CloudTrail の保存先および作業対象のオブジェクトセットへのパスに置き換えてください。例では、特定のアカウントに関するログの LOCATION 値を使用していますが、目的に応じた保存先を指定できます。

たとえば、 と指定します。

• 複数のアカウントのデータを分析するには、LOCATION を元の設定に戻し、LOCATION 's3://MyLogFiles/AWSLogs/ を使用してすべての AWSLogs を分析対称にします。

• 特定の日付、アカウント、リージョンのデータを分析するには、LOCATION `s3://MyLogFiles/123456789012/CloudTrail/us-east-1/2016/03/14/'. を使用します。

オブジェクト階層の最上位レベルを使用すると、Athena でのクエリを最も柔軟に実行できます。

CloudTrail コンソールを使用した CloudTrail ログの Athena テーブルの作成パーティションなし Athena クエリ用テーブル CloudTrail ログは、 CloudTrail コンソール。CloudTrail コンソールから Athena テーブルを作成するには、Athena でテーブルを作成するのに十分なアクセス許可を持つ IAM ユーザーまたはロールでログインする必要があります。

• Athena のアクセス許可の設定については、「セットアップ (p. 6)」を参照してください。• パーティションを含むテーブルの作成については、「Athena での CloudTrail ログのテーブルの手動作

成」を参照してください。

CloudTrail コンソールを使用して CloudTrail 証跡の Athena テーブルを作成するには

1. https://console.aws.amazon.com/cloudtrail/ にある CloudTrail コンソールを開きます。2. ナビゲーションペインで [Event history (イベント履歴)] を選択します。3. 以下のいずれかの操作を行います。

• 新しい CloudTrail コンソール、選択 Athenaテーブルを作成.

207

Page 217: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CloudTrail ログのクエリ

• 古いバージョンを使用している場合、 CloudTrail コンソール、選択 詳細クエリの実行先 AmazonAthena.

4. [保存場所] で、下矢印を使用し、ログファイルが保存され証跡がクエリされる Amazon S3 バケットを選択します。

Note

トレールに関連付けられているバケットの名前を検索するには、 トレイル の CloudTrail ナビゲーションペインとトレイルの S3バケット 列。_を表示するには Amazon S3 バケットの場所から、 S3バケット 列。これにより、 Amazon S3 コンソールから CloudTrail バケットの位置。

5. [Create table] を選択します。Amazon S3 バケットの名前を含むデフォルト名が付いたテーブルが作成されます。

Athena での CloudTrail ログのテーブルの手動作成Athena コンソールで、CloudTrail ログファイルのテーブルを手動で作成し、Athena でクエリを実行できます。

Athena コンソールを使用して CloudTrail 証跡の Athena テーブルを作成するには

1. 次の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。このステートメントは、CloudTrail コンソールの [Amazon Athena にテーブルを作成] ダイアログボックスにあるステートメントと同じですが、テーブルをパーティション化する PARTITIONED BY 句を追加します。

2. ログデータの保存先の Amazon S3 バケットを参照するように s3://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/ を変更します。

3. フィールドが正しく表示されていることを確認します。CloudTrail レコードのフィールドの完全リストに関する詳細については、「CloudTrail レコードの内容」を参照してください。

この例では、フィールド requestparameters、responseelements、およびadditionaleventdata は、クエリでタイプ STRING としてリストされていますが、JSONで使用される STRUCT データ型です。そのため、これらのフィールドからデータを取得するには、JSON_EXTRACT 関数を使用します。詳細については、「the section called “JSON からのデータの抽出” (p. 186)」を参照してください。パフォーマンスを向上させるために、この例ではリージョン、年、月、日に基づいてデータをパーティション分割しています。

208

Page 218: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CloudTrail ログのクエリ

CREATE EXTERNAL TABLE cloudtrail_logs (eventversion STRING,useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, userName:STRING,sessioncontext:STRUCT<attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>,sessionissuer:STRUCT< type:STRING, principalId:STRING, arn:STRING, accountId:STRING, userName:STRING>>>,eventtime STRING,eventsource STRING,eventname STRING,awsregion STRING,sourceipaddress STRING,useragent STRING,errorcode STRING,errormessage STRING,requestparameters STRING,responseelements STRING,additionaleventdata STRING,requestid STRING,eventid STRING,resources ARRAY<STRUCT< ARN:STRING, accountId:STRING, type:STRING>>,eventtype STRING,apiversion STRING,readonly STRING,recipientaccountid STRING,serviceeventdetails STRING,sharedeventid STRING,vpcendpointid STRING)PARTITIONED BY (region string, year string, month string, day string)ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/';

4. Athena コンソールでクエリを実行します。5. 以下の例のように、ALTER TABLE ADD PARTITION (p. 415) コマンドを使用してパーティションを

ロードすることで、データをクエリできるようにします。

ALTER TABLE table_name ADD PARTITION (region='us-east-1', year='2019', month='02', day='01') LOCATION 's3://CloudTrail_bucket_name/AWSLogs/Account_ID/CloudTrail/us-east-1/2019/02/01/'

209

Page 219: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CloudTrail ログのクエリ

CloudTrail ログのクエリ例次の例は、CloudTrail イベントログの先頭に作成されたテーブルからすべての匿名 (署名されていない) リクエストを返すクエリの一部を示しています。このクエリは、useridentity.accountid が匿名、および useridentity.arn が指定されていないリクエストを選択します。

SELECT *FROM cloudtrail_logsWHERE eventsource = 's3.amazonaws.com' AND eventname in ('GetObject') AND useridentity.accountid LIKE '%ANONYMOUS%' AND useridentity.arn IS NULL AND requestparameters LIKE '%[your bucket name ]%';

詳細については、AWS Big Data Blog の記事「AWS CloudTrail と Amazon Athena を使用してセキュリティ、コンプライアンス、運用上のアクティビティを分析する方法」を参照してください。

CloudTrail ログのクエリに関するヒントCloudTrail ログデータを探索するには、以下のヒントを参考にしてください。

• ログをクエリする前に、ログテーブルが「the section called “Athena での CloudTrail ログのテーブルの手動作成” (p. 208)」に示している内容と同じになっていることを確認します。これが最初のテーブルではない場合は、コマンド を使用して既存のテーブルを削除します。DROP TABLEcloudtrail_logs;.

• 既存のテーブルを削除した後、再作成します。詳細については、「CloudTrail ログのテーブルの作成 (p. 208)」を参照してください。

Athena クエリのフィールドが正しく表示されていることを確認します。CloudTrail レコードのフィールドの完全リストについては、「CloudTrail レコードの内容」を参照してください。

クエリ内のフィールドが JSON 形式 (STRUCT など) である場合は、JSON からデータを抽出します。詳細については、「JSON からのデータの抽出 (p. 186)」を参照してください。

これで CloudTrail テーブルに対してクエリを発行する準備完了です。• 最初に、どの IAM ユーザーが、どの送信元 IP アドレスから API オペレーションを呼び出したかを確認

します。• 次の基本的な SQL クエリをテンプレートとして使用します。このクエリを Athena コンソールに貼り付

けて実行します。

SELECT useridentity.arn, eventname, sourceipaddress, eventtimeFROM cloudtrail_logsLIMIT 100;

• さらに、前述のクエリを変更してデータを探索します。• パフォーマンスを強化するには、LIMIT 句を追加して、指定したサブセットの行のみが返るようにしま

す。

210

Page 220: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon EMR ログのクエリ

Amazon EMR ログのクエリAmazon EMR と、Amazon EMR で実行されるビッグデータアプリケーションは、ログファイルを生成します。ログファイルはマスターノードに書き込まれます。ログファイルを自動的に Amazon S3 にアーカイブするように Amazon EMR を設定することもできます。Amazon Athena を使用してこれらのログをクエリし、アプリケーションとクラスターのイベントや傾向を特定できます。Amazon EMR でのログファイルの型と Amazon S3 への保存の詳細については、Amazon EMR 管理ガイドの「ログファイルの表示」を参照してください。

Amazon EMR ログファイルに基づく基本的なテーブルの作成とクエリ次の例では、s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/elasticmapreduce/ に保存されたログファイルに基づいて、基本的なテーブル myemrlogs を作成します。以下の例で使用されている Amazon S3 の場所は、リージョン us-west-2 の AWS アカウント 123456789012 によって作成された EMR クラスター用のデフォルトのログの場所のパターンを反映しています。カスタムの場所を使用する場合、パターンはs3://PathToEMRLogs/ClusterID になります。

パーティション化されたテーブルを作成してクエリのパフォーマンスを向上させ、データ転送を削減できる可能性のある方法については、「Amazon EMR ログに基づくパーティションテーブルの作成とクエリ (p. 212)」を参照してください。

CREATE EXTERNAL TABLE `myemrlogs`( `data` string COMMENT 'from deserializer')ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'LINES TERMINATED BY '\n'STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'

次の例のクエリは、前の例で作成した myemrlogs テーブルに対して実行できます。

Example – エラー、警告、情報、例外、致命的、またはデバッグの発生について、ステップログをクエリする

SELECT data, "$PATH"FROM "default"."myemrlogs"WHERE regexp_like("$PATH",'s-86URH188Z6B1') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

Example – エラー、警告、情報、例外、致命的、デバッグについて、特定のインスタンスログi-00b3c0a839ece0a9c をクエリする

SELECT "data", "$PATH" AS filepathFROM "default"."myemrlogs"WHERE regexp_like("$PATH",'i-00b3c0a839ece0a9c') AND regexp_like("$PATH",'state') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

211

Page 221: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon EMR ログのクエリ

Example – エラー、警告、情報、例外、致命的、デバッグについて、 Presto アプリケーションログをクエリする

SELECT "data", "$PATH" AS filepathFROM "default"."myemrlogs"WHERE regexp_like("$PATH",'presto') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

Example – エラー、警告、情報、例外、致命的、デバッグについて、Namenode アプリケーションログをクエリする

SELECT "data", "$PATH" AS filepathFROM "default"."myemrlogs"WHERE regexp_like("$PATH",'namenode') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

Example – エラー、警告、情報、例外、致命的、デバッグについて、日付と時間を基準にしてすべてのログをクエリする

SELECT distinct("$PATH") AS filepathFROM "default"."myemrlogs"WHERE regexp_like("$PATH",'2019-07-23-10') AND regexp_like(data, 'ERROR|WARN|INFO|EXCEPTION|FATAL|DEBUG') limit 100;

Amazon EMR ログに基づくパーティションテーブルの作成とクエリこれらの例では、同じログの場所を使用して Athena テーブルを作成しますが、テーブルはパーティション化され、ログの場所ごとにパーティションが作成されます。詳細については、「データのパーティション分割 (p. 93)」を参照してください。

次のクエリは、mypartitionedemrlogs という名前のパーティション化されたテーブルを作成します。

CREATE EXTERNAL TABLE `mypartitionedemrlogs`( `data` string COMMENT 'from deserializer') partitioned by (logtype string)ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'LINES TERMINATED BY '\n'STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6'

次のクエリステートメントは、Amazon EMR が Amazon S3 で作成するさまざまなログタイプのサブディレクトリに基づいて、テーブルパーティションを作成します。

ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='containers') LOCATION s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/containers/

212

Page 222: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon EMR ログのクエリ

ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='hadoop-mapreduce') LOCATION s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-mapreduce/

ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='hadoop-state-pusher') LOCATION s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/hadoop-state-pusher/

ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='node') LOCATION s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/node/

ALTER TABLE mypartitionedemrlogs ADD PARTITION (logtype='steps') LOCATION s3://aws-logs-123456789012-us-west-2/elasticmapreduce/j-2ABCDE34F5GH6/steps/

パーティションを作成したら、テーブルで SHOW PARTITIONS クエリを実行して、以下を確認します。

SHOW PARTITIONS mypartitionedemrlogs;

次の例では、上記の例で作成されたテーブルとパーティションを使用した、特定のログエントリに対するクエリを示します。

Example – エラーまたは警告について、コンテナパーティションでアプリケーションapplication_1561661818238_0002 のログをクエリする

SELECT data, "$PATH"FROM "default"."mypartitionedemrlogs"WHERE logtype='containers' AND regexp_like("$PATH",'application_1561661818238_0002') AND regexp_like(data, 'ERROR|WARN') limit 100;

Example – Hadoop-Mapreduce パーティションでジョブ job_1561661818238_0004 および失敗した削減をクエリする

SELECT data, "$PATH"FROM "default"."mypartitionedemrlogs"WHERE logtype='hadoop-mapreduce' AND regexp_like(data,'job_1561661818238_0004|Failed Reduces') limit 100;

Example – Hive ログのノードパーティションでクエリ ID056e0609-33e1-4611-956c-7a31b42d2663 をクエリする

SELECT data, "$PATH"FROM "default"."mypartitionedemrlogs"WHERE logtype='node'

213

Page 223: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Global Accelerator フローログのクエリ

AND regexp_like("$PATH",'hive') AND regexp_like(data,'056e0609-33e1-4611-956c-7a31b42d2663') limit 100;

Example – Resourcemanager ログのノードパーティションでアプリケーション1567660019320_0001_01_000001 をクエリする

SELECT data, "$PATH"FROM "default"."mypartitionedemrlogs"WHERE logtype='node' AND regexp_like(data,'resourcemanager') AND regexp_like(data,'1567660019320_0001_01_000001') limit 100

AWS Global Accelerator フローログのクエリAWS Global Accelerator を使用して、ネットワークトラフィックを AWS グローバルネットワーク経由で最適なエンドポイントに転送するアクセラレーターを作成できます。グローバルアクセラレーター の詳細については、「AWS Global Accelerator とは」を参照してください。

グローバルアクセラレーター フローログにより、アクセラレーター内のネットワークインターフェイス間で送信される IP アドレスに関する情報を取得できるようになります。フローログデータは Amazon S3 にパブリッシュされ、そこでデータを取得して表示できます。詳細については、「AWS Global Acceleratorのフローログ」を参照してください。

Athena を使用して グローバルアクセラレーター フローログをクエリするには、Amazon S3 でその場所を指定するテーブルを作成します。

グローバルアクセラレーター フローログのテーブルを作成するには

1. 次の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。このクエリでは、ROW FORMAT DELIMITED を指定し、SerDe (p. 374) の指定は省略します。この場合、クエリでは LazySimpleSerDe (p. 391) が使用されます。このクエリでは、フィールドはスペースで終了します。

CREATE EXTERNAL TABLE IF NOT EXISTS aga_flow_logs ( version string, account string, acceleratorid string, clientip string, clientport int, gip string, gipport int, endpointip string, endpointport int, protocol string, ipaddresstype string, numpackets bigint, numbytes int, starttime int, endtime int, action string, logstatus string, agasourceip string, agasourceport int, endpointregion string, agaregion string, direction string)PARTITIONED BY (dt string)ROW FORMAT DELIMITED

214

Page 224: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Global Accelerator フローログのクエリ

FIELDS TERMINATED BY ' 'LOCATION 's3://your_log_bucket/prefix/AWSLogs/account_id/globalaccelerator/region/'TBLPROPERTIES ("skip.header.line.count"="1");

2. ログデータの保存先の Amazon S3 バケットを指すように LOCATION の値を変更します。

's3://your_log_bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/'

3. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は aga_flow_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

4. 次のサンプルクエリのように、パーティションを作成してデータを読み取ります。このクエリは、指定日の 1 つのパーティションを作成します。日付と場所のプレースホルダーを置き換えます。

ALTER TABLE aga_flow_logsADD PARTITION (dt='YYYY-MM-dd')LOCATION 's3://your_log_bucket/prefix/AWSLogs/account_id/globalaccelerator/region_code/YYYY/MM/dd';

AWS Global Accelerator フローログのクエリの例Example – 特定のエッジロケーションを通過するリクエストをリストする

次のクエリ例は、LHR エッジロケーションを通過したリクエストをリストします。LIMIT 演算子を使用すると、一度にクエリするログの数を制限できます。

SELECT clientip, agaregion, protocol, action FROM aga_flow_logs WHERE agaregion LIKE 'LHR%' LIMIT 100;

Example – ほとんどの HTTPS リクエストを受信するエンドポイント IP アドレスをリストします。

最大数の HTTPS リクエストを受信しているエンドポイント IP アドレスを確認するには、次のクエリを使用します。このクエリは、HTTPS ポート 443 で受信したパケット数をカウントし、送信先 IP アドレス別にグループ分けして、上位 10 の IP アドレスを返します。

SELECT SUM(numpackets) AS packetcount, endpointip FROM aga_flow_logs WHERE endpointport = 443 GROUP BY endpointip ORDER BY packetcount DESC LIMIT 10;

215

Page 225: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon GuardDuty 結果のクエリの実行

Amazon GuardDuty 結果のクエリの実行Amazon GuardDuty は、AWS 環境内の予期しない、不正な、または悪意のあるアクティビティを識別するためのセキュリティ監視サービスです。予期しない、また、悪意のあるアクティビティを検出すると、GuardDuty は、ストレージと分析のために Amazon S3 にエクスポートできるセキュリティ結果を生成します。結果を Amazon S3 にエクスポートした後、Athena を使用してクエリを実行できます。この記事では、Athena で GuardDuty 結果用のテーブルを作成し、クエリを実行する方法について説明します。

Amazon GuardDuty の詳細については、「Amazon GuardDuty ユーザーガイド」を参照してください。

前提条件• 結果を Amazon S3 にエクスポートするために GuardDuty 機能を有効にします。手順について

は、Amazon GuardDuty ユーザーガイド の「結果のエクスポート」を参照してください。

GuardDuty 結果のための Athena でのテーブルの作成Athena から GuardDuty 結果のクエリを実行するには、それらの結果に対するテーブルを作成する必要があります。

GuardDuty 結果のために Athena でテーブルをで作成するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. 次の DDL ステートメントを Athena コンソール内に貼り付けます。LOCATION 's3://findings-

bucket-name/AWSLogs/account-id/GuardDuty/' の値を変更して、Amazon S3 の GuardDuty結果を指します。

CREATE EXTERNAL TABLE `gd_logs` ( `schemaversion` string, `accountid` string, `region` string, `partition` string, `id` string, `arn` string, `type` string, `resource` string, `service` string, `severity` string, `createdate` string, `updatedate` string, `title` string, `description` string)ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION 's3://findings-bucket-name/AWSLogs/account-id/GuardDuty/' TBLPROPERTIES ('has_encrypted_data'='true')

3. Athena コンソールでクエリを実行して、gd_logs テーブルを登録します。クエリが完了すると、結果は Athena からクエリを実行できる状態になります。

クエリの例次の例は、Athena から GuardDuty 結果のクエリを実行する方法を示しています 。

Example – DNS データの不正引き出し

次のクエリは、DNS クエリを介してデータを流出している可能性がある Amazon EC2 インスタンスに関する情報を返します。

216

Page 226: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドNetwork Load Balancer ログのクエリ

SELECT title, severity, type, id AS FindingID, accountid, region, createdate, updatedate, json_extract_scalar(service, '$.count') AS Count, json_extract_scalar(resource, '$.instancedetails.instanceid') AS InstanceID, json_extract_scalar(service, '$.action.actiontype') AS DNS_ActionType, json_extract_scalar(service, '$.action.dnsrequestaction.domain') AS DomainName, json_extract_scalar(service, '$.action.dnsrequestaction.protocol') AS protocol, json_extract_scalar(service, '$.action.dnsrequestaction.blocked') AS blockedFROM gd_logsWHERE type = 'Trojan:EC2/DNSDataExfiltration'ORDER BY severity DESC

Example – 権限のない IAM ユーザーアクセス

次のクエリは、すべてのリージョンから IAM プリンシパルのすべての UnauthorizedAccess:IAMUser結果タイプを返します。

SELECT title, severity, type, id, accountid, region, createdate, updatedate, json_extract_scalar(service, '$.count') AS Count, json_extract_scalar(resource, '$.accesskeydetails.username') AS IAMPrincipal, json_extract_scalar(service,'$.action.awsapicallaction.api') AS APIActionCalledFROM gd_logsWHERE type LIKE '%UnauthorizedAccess:IAMUser%' ORDER BY severity desc;

GuardDuty 結果のクエリの実行に関するヒントクエリを作成するときは、次の点に注意してください。

• ネストされた JSON フィールドからデータを抽出するには、Presto json_extract 関数、または json_extract_scalar 関数を使用します。詳細については、「JSON からのデータの抽出 (p. 186)」を参照してください。

• JSON フィールドのすべての文字が小文字であることを確認します。• クエリ結果のダウンロードについては、「Athena コンソールを使用したクエリ結果ファイルのダウン

ロード (p. 115)」を参照してください。

Network Load Balancer ログのクエリAthena を使用して、Network Load Balancer からのログを分析および処理します。これらのログは、Network Load Balancer に送信された Transport Layer Security (TLS) リクエストに関する詳細情報を受け取ります。これらのアクセスログを使用して、トラフィックパターンの分析や、問題のトラブルシューティングを行うことができます。

217

Page 227: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドNetwork Load Balancer ログのクエリ

Network Load Balancer アクセスログを分析する前に、ログを有効にし、ログの保存先として Amazon S3バケットを設定します。詳細については、「Network Load Balancer のアクセスログ」を参照してください。

• のテーブルを作成 Network Load Balancer ログ (p. 218)• Network Load Balancer クエリの例 (p. 218)

Network Load Balancer ログのテーブルを作成するには1. 次の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。Network Load

Balancer ログレコードの構文を確認します。次のクエリを更新して、最新バージョンのレコードの列と正規表現の構文を含めることが必要になる場合があります。

CREATE EXTERNAL TABLE IF NOT EXISTS nlb_tls_logs ( type string, version string, time string, elb string, listener_id string, client_ip string, client_port int, target_ip string, target_port int, tcp_connection_time_ms double, tls_handshake_time_ms double, received_bytes bigint, sent_bytes bigint, incoming_tls_alert int, cert_arn string, certificate_serial string, tls_cipher_suite string, tls_protocol_version string, tls_named_group string, domain_name string, alpn_fe_protocol string, alpn_be_protocol string, alpn_client_preference_list string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*):([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-0-9]*) ([-0-9]*) ([-0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)$') LOCATION 's3://your_log_bucket/prefix/AWSLogs/AWS_account_ID/elasticloadbalancing/region';

2. LOCATION Amazon S3 バケットを変更し、Network Load Balancer ログの保存先を指定します。3. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は nlb_tls_logs テーブ

ルを登録し、そのデータに対してクエリを発行できるように準備します。

Network Load Balancer クエリの例証明書の使用回数を確認するには、次の例のようなクエリを使用します。

SELECT count(*) AS ct, cert_arn

218

Page 228: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon VPC フローログのクエリ

FROM "nlb_tls_logs"GROUP BY cert_arn;

次のクエリは、古い TLS バージョンを使用しているユーザーの数を示します。

SELECT tls_protocol_version, COUNT(tls_protocol_version) AS num_connections, client_ipFROM "nlb_tls_logs"WHERE tls_protocol_version < 'tlsv12'GROUP BY tls_protocol_version, client_ip;

次のクエリを使用して、TLS ハンドシェイクに長い時間がかかっている接続を特定します。

SELECT *FROM "nlb_tls_logs"ORDER BY tls_handshake_time_ms DESC LIMIT 10;

Amazon VPC フローログのクエリAmazon Virtual Private Cloud フローログは VPC のネットワークインターフェイスとの間で行き来する IPトラフィックに関する情報をキャプチャします。このログを使用してネットワークトラフィックのパターンを調査し、VPC ネットワーク全体の脅威やリスクを特定します。

Athena でログのクエリを開始する前に、VPC フローログを有効化し、ログが Amazon S3 バケットに保存されるように設定します。ログを作成したら、それを数分間実行していくらかのデータを収集します。ログは Athena により直接クエリできる、GZIP 圧縮形式で作成されます。

VPC フローログを作成するときは、デフォルトの形式を使用するか、カスタム形式を指定できます。カスタム形式では、フローログで返すフィールドと、フィールドが表示される順序を指定します。詳細については、Amazon VPC ユーザーガイド の「フローログレコード」を参照してください。

• VPC フローログのテーブルの作成 (p. 219)• Amazon VPC フローログのクエリ例 (p. 220)

VPC フローログのテーブルの作成次の手順では、デフォルト形式を使用する VPC フローログの Amazon VPC テーブルを作成します。カスタム形式でフローログを作成する場合は、フローログの作成時に指定したフィールドと一致するフィールドを使用して、指定した順序と同じ順番でテーブルを作成する必要があります。

Amazon VPC テーブルを作成するには

1. 次の DDL ステートメントをコピーして Athena コンソールクエリエディタ内に貼り付けます。

CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs ( version int, account string, interfaceid string, sourceaddress string, destinationaddress string, sourceport int, destinationport int, protocol int, numpackets int,

219

Page 229: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon VPC フローログのクエリ

numbytes bigint, starttime int, endtime int, action string, logstatus string)PARTITIONED BY (`date` date)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ' 'LOCATION 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'TBLPROPERTIES ("skip.header.line.count"="1");

次の点に注意してください。

• このクエリは ROW FORMAT DELIMITED を指定し、SerDe の指定が省略されます。これは、クエリが CSV、TSV、およびカスタム区切りファイルの LazySimpleSerDe (p. 391) を使用しているということです。このクエリでは、フィールドはスペースで終了します。

• PARTITIONED BY 句は、date 型を使用します。これにより、クエリで数学演算子を使用して、特定の日付より古いものまたは新しいものを選択できます。

Note

date は DDL ステートメントの予約済みキーワードであるため、バックティック文字でエスケープされます。詳細については、「予約キーワード (p. 86)」を参照してください。

• カスタム形式の VPC フローログの場合、フローログの作成時に指定したフィールドと一致するようにフィールドを変更します。

2. ログデータの保存先の Amazon S3 バケットを指すように LOCATION's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/' を変更します。

3. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は vpc_flow_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

4. 次のサンプルクエリのように、パーティションを作成してデータを読み取れるようにします。このクエリは、指定日の 1 つのパーティションを作成します。必要に応じて、日付と場所のプレースホルダーを置き換えます。

Note

このクエリは、指定日に対して単一のパーティションのみを作成します。プロセスを自動化するには、このクエリを実行し、この方法で year/month/day にパーティションを作成するスクリプトを使用します。

ALTER TABLE vpc_flow_logsADD PARTITION (`date`='YYYY-MM-dd')location 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';

Amazon VPC フローログのクエリ例次のクエリ例では、指定された日付に対して最大 100 のフローログを一覧表示します。

SELECT * FROM vpc_flow_logs WHERE date = DATE('2020-05-04') LIMIT 100;

次のクエリは、すべての拒否された TCP 接続を一覧表示します。新しく作成した日付パーティション列date を使用して、該当イベントが発生した週の曜日を抽出します。

220

Page 230: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS WAF ログのクエリ

SELECT day_of_week(date) AS day, date, interfaceid, sourceaddress, action, protocolFROM vpc_flow_logsWHERE action = 'REJECT' AND protocol = 6LIMIT 100;

最大数の HTTPS リクエストを受信しているサーバーを確認するには、次のクエリを使用します。HTTPSポート 443 で受信したパケット数をカウントし、送信先 IP アドレス別にグループ分けして、過去 1 週間の上位 10 のサーバーを返します。

SELECT SUM(numpackets) AS packetcount, destinationaddressFROM vpc_flow_logsWHERE destinationport = 443 AND date > current_date - interval '7' dayGROUP BY destinationaddressORDER BY packetcount DESCLIMIT 10;

詳細については、AWS Big Data Blog の記事「Amazon Kinesis Firehose、Athena、および AmazonQuickSight による VPC フローログの分析」を参照してください。

AWS WAF ログのクエリAWS WAF ログには、AWS WAF が AWS リソースからリクエストを受信した時間、このリクエストの詳細、各リクエストが一致したルールのアクションなど、ウェブ ACL によって分析されたトラフィックに関する情報が含まれます。

AWS WAF ログのアクセスログを有効にし、このログを Amazon S3 に保存して Athena でクエリすることができます。AWS WAF ログを有効にする方法について詳しくは、AWS WAF 開発者ガイドにあるウェブACL トラフィック情報のログ記録をご覧ください。

ログの保存先の Amazon S3 バケットを書き留めます。

• AWS WAF ログのテーブルの作成 (p. 221)• AWS WAF ログのクエリの 例 (p. 222)

AWS WAF ログのテーブルの作成AWS WAF テーブルを作成するには

1. 次の DDL ステートメントをコピーして Athena コンソール内に貼り付けます。ログを保存する AmazonS3 バケットの LOCATION を変更します。

このクエリでは、OpenX JSON SerDe (p. 388) を使用します。テーブル形式と SerDe は、AWS Glueクローラによって AWS WAF ログが分析される際に提案されます。

Note

SerDe では、WAF ログインの各 JSON レコードが、レコード内の Amazon S3 フィールドを区切る行終端文字なしの 1 行のテキストにあると想定しています。WAF ログ JSON テキスト

221

Page 231: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS WAF ログのクエリ

がプリティ印刷形式の場合、テーブルの作成後にクエリを実行しようとすると、エラーメッセージ HIVE_CURSOR_ERROR: 行は有効な JSON オブジェクトではありませんが表示されます。

CREATE EXTERNAL TABLE `waf_logs`( `timestamp` bigint, `formatversion` int, `webaclid` string, `terminatingruleid` string, `terminatingruletype` string, `action` string, `terminatingrulematchdetails` array< struct< conditiontype:string, location:string, matcheddata:array<string> > >, `httpsourcename` string, `httpsourceid` string, `rulegrouplist` array<string>, `ratebasedrulelist` array< struct< ratebasedruleid:string, limitkey:string, maxrateallowed:int > >, `nonterminatingmatchingrules` array< struct< ruleid:string, action:string > >, `httprequest` struct< clientip:string, country:string, headers:array< struct< name:string, value:string > >, uri:string, args:string, httpversion:string, httpmethod:string, requestid:string > )ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'WITH SERDEPROPERTIES ( 'paths'='action,formatVersion,httpRequest,httpSourceId,httpSourceName,nonTerminatingMatchingRules,rateBasedRuleList,ruleGroupList,terminatingRuleId,terminatingRuleMatchDetails,terminatingRuleType,timestamp,webaclId')STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://athenawaflogs/WebACL/'

2. Athena コンソールでクエリを実行します。クエリが完了すると、Athena は waf_logs テーブルを登録し、そのデータに対してクエリを発行できるように準備します。

AWS WAF ログのクエリ例次のクエリは、IP アドレスが RATE_BASED 終了ルールによってブロックされた回数を数えます。

222

Page 232: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS WAF ログのクエリ

SELECT COUNT(httpRequest.clientIp) as count,httpRequest.clientIpFROM waf_logsWHERE terminatingruletype='RATE_BASED' AND action='BLOCK'GROUP BY httpRequest.clientIpORDER BY count LIMIT 100;

次のクエリは、アイルランド (IE) に属し、RATE_BASED 終了ルールによってブロックされた IP アドレスからリクエストが到着した回数を数えます。

SELECT COUNT(httpRequest.country) as count,httpRequest.countryFROM waf_logsWHERE terminatingruletype='RATE_BASED' AND httpRequest.country='IE'GROUP BY httpRequest.countryORDER BY countLIMIT 100;

次のクエリは、リクエストがブロックされた回数をカウントし、結果を WebACL、RuleId、ClientIP、および HTTP リクエスト URI によってグループ化します。

SELECT COUNT(*) AScount,webaclid,terminatingruleid,httprequest.clientip,httprequest.uriFROM waf_logsWHERE action='BLOCK'GROUP BY webaclid, terminatingruleid, httprequest.clientip, httprequest.uriORDER BY count DESCLIMIT 100;

次のクエリは、特定の終了ルール ID (WHERE terminatingruleid='e9dd190d-7a43-4c06-bcea-409613d9506e') が一致した回数を数え、その結果を WebACL、Action、ClientIP、および HTTPRequest URI によってグループ化します。

SELECT COUNT(*) AScount,webaclid,action,httprequest.clientip,httprequest.uriFROM waf_logsWHERE terminatingruleid='e9dd190d-7a43-4c06-bcea-409613d9506e'GROUP BY webaclid, action, httprequest.clientip, httprequest.uriORDER BY count DESCLIMIT 100;

クエリに関する情報は、 Amazon S3 ログについては、次のトピックを参照してください。

• Athenaを使用してAmazon S3サーバーアクセスログを分析するにはどうすればよいですか? の AWS ナレッジセンター

• Amazon Athenaを使用した要求に対するAmazon S3アクセスログのクエリ の Amazon Simple StorageService 開発者ガイド

223

Page 233: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue データカタログ のクエリ

• AWS CloudTrailを使用してAmazon S3リクエストを特定する の Amazon Simple Storage Service 開発者ガイド

AWS Glue データカタログ のクエリAWS Glue データカタログ は多くの AWS のサービスで中央メタデータリポジトリとして使用されるため、Data Catalog メタデータのクエリが必要になる場合があります。そのためには、Athena で SQL クエリを使用できます。Athena を使用して、データベース、テーブル、パーティション、列などの AWS Glueカタログメタデータをクエリできます。

Note

個別のハイブが使える DDLコマンド (p. 411) Athenaから特定のデータベース、テーブル、ビュー、パーティション、列のメタデータ情報を抽出しますが、出力は表形式ではありません。

AWS Glue Catalog のメタデータを取得するには、Athena バックエンドで information_schema データベースをクエリします。このトピックのクエリ例は、Athena を使用して一般的ユースケースについてAWS Glue Catalog メタデータをクエリする方法を示しています。

Important

CREATE VIEW を使用して information_schema データベース上にビューを作成することはできません。

トピック• データベースのリスト化と指定したデータベースの検索 (p. 224)• 指定したデータベース内のテーブルのリスト化と名前によるテーブルの検索 (p. 225)• 特定の表のパーティションのリスト化 (p. 226)• 指定した表またはビューの列のリスト化または検索 (p. 226)

データベースのリスト化と指定したデータベースの検索このセクションの例では、メタデータ内のデータベースをスキーマ名別にリストする方法を示します。

Example – データベースのリスト化

次のクエリ例は、information_schema.schemata テーブルのデータベースを一覧表示します。

SELECT schema_nameFROM information_schema.schemataLIMIT 10;

次の表に項目の例を示します。

6 alb-databas1

7 alb_original_cust

8 alblogsdatabase

9 athena_db_test

10 athena_ddl_db

224

Page 234: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド指定したデータベース内のテーブルのリスト化と名前によるテーブルの検索

Example – 指定したデータベースの検索

次のクエリの例では、rdspostgresql はサンプルデータベースです。

SELECT schema_nameFROM information_schema.schemataWHERE schema_name = 'rdspostgresql'

次の表に項目の例を示します。

  schema_name

1 rdspostgresql

指定したデータベース内のテーブルのリスト化と名前によるテーブルの検索テーブルのメタデータを一覧表示するには、テーブルスキーマまたはテーブル名でクエリを実行します。

Example – スキーマ別のテーブルのリスト化

次のクエリは、rdspostgresql テーブルスキーマを使用するテーブルを一覧表示します。

SELECT table_schema, table_name, table_typeFROM information_schema.tablesWHERE table_schema = 'rdspostgresql'

次の表は、サンプル結果を示しています。

  table_schema table_name table_type

1 rdspostgresql rdspostgresqldb1_public_accountBASE TABLE

Example – 名前によるテーブルの検索

次のクエリは、テーブル athena1 のメタデータ情報を取得します。

SELECT table_schema, table_name, table_typeFROM information_schema.tablesWHERE table_name = 'athena1'

次の表は、サンプル結果を示しています。

  table_schema table_name table_type

1 デフォルト athena1 BASE TABLE

225

Page 235: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド特定の表のパーティションのリスト化

特定の表のパーティションのリスト化メタデータクエリを使用して、特定のテーブルのパーティション番号とパーティション値を一覧表示できます。

Example – 表のパーティションのクエリ

次のクエリ例は、テーブル CloudTrail_logs_test2 のパーティションを一覧表示します。

SELECT *FROM information_schema.__internal_partitions__WHERE table_schema = 'default' AND table_name = 'cloudtrail_logs_test2'ORDER BY partition_number

クエリが想定どおりに動作しない場合は、SHOW PARTITIONS table_name を使用して、指定したテーブルのパーティションの詳細を抽出します。次の例を参照してください。

SHOW PARTITIONS CloudTrail_logs_test2

次の表に項目の例を示します。

  table_catalog table_schema table_name partition_number partition_key partition_value

1 awsdatacatalogdefault CloudTrail_logs_test2 1 年 2018

2 awsdatacatalogdefault CloudTrail_logs_test2 1 か月 09

3 awsdatacatalogdefault CloudTrail_logs_test2 1 日 30

指定した表またはビューの列のリスト化または検索指定したデータベースとテーブルで、テーブルのすべての列、ビューのすべての列を一覧表示したり、名前で列を検索したりできます。

Example – 指定したテーブルのすべての列のリスト化

次のクエリ例は、テーブル rdspostgresqldb1_public_account のすべての列を一覧表示します。

SELECT *FROM information_schema.columnsWHERE table_schema = 'rdspostgresql' AND table_name = 'rdspostgresqldb1_public_account'

次の表に項目の例を示します。

  table_catalogtable_schematable_name column_nameordinal_positioncolumn_defaultis_nullabledata_typeコメント

extra_info

1 awsdatacatalogrdspostgresqlrdspostgresqldb1_public_accountpassword 1   はい varchar    

2 awsdatacatalogrdspostgresqlrdspostgresqldb1_public_accountuser_id 2.   はい integer    

3 awsdatacatalogrdspostgresqlrdspostgresqldb1_public_accountcreated_on3.   はい タイムス

   

226

Page 236: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド指定した表またはビューの列のリスト化または検索

  table_catalogtable_schematable_name column_nameordinal_positioncolumn_defaultis_nullabledata_typeコメント

extra_info

タンプ

4 awsdatacatalogrdspostgresqlrdspostgresqldb1_public_accountlast_login 4.   はい タイムスタンプ

   

5 awsdatacatalogrdspostgresqlrdspostgresqldb1_public_accountemail 5*   はい varchar    

6 awsdatacatalogrdspostgresqlrdspostgresqldb1_public_accountusername 6   はい varchar    

Example – 指定したビューの列のリスト化

次のクエリ例は、ビュー arrayview の default データベース内のすべての列を一覧表示します。

SELECT *FROM information_schema.columnsWHERE table_schema = 'default' AND table_name = 'arrayview'

次の表に項目の例を示します。

  table_catalogtable_schematable_namecolumn_nameordinal_positioncolumn_defaultis_nullabledata_type コメント

extra_info

1 awsdatacatalogデフォルト

arrayviewsearchdate 1   はい varchar    

2 awsdatacatalogデフォルト

arrayviewsid 2.   はい varchar    

3 awsdatacatalogデフォルト

arrayviewbtid 3.   はい varchar    

4 awsdatacatalogデフォルト

arrayviewp 4.   はい varchar    

5 awsdatacatalogデフォルト

arrayviewinfantprice 5*   はい varchar    

6 awsdatacatalogデフォルト

arrayviewsump 6   はい varchar    

7 awsdatacatalogデフォルト

arrayviewjourneymaparray7   はい array(varchar)   

Example – 指定したデータベースおよびテーブル内の列の名前による検索

次のクエリ例は、default データベースの arrayview ビューで sid 列のメタデータを検索します。

SELECT *FROM information_schema.columnsWHERE table_schema = 'default'

227

Page 237: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドWeb サーバ ログのクエリ

AND table_name = 'arrayview' AND column_name='sid'

次の表は、サンプル結果を示しています。

  table_catalogtable_schematable_namecolumn_nameordinal_positioncolumn_defaultis_nullabledata_typeコメント

extra_info

1 awsdatacatalogデフォルト

arrayview sid 2.   はい varchar    

Web サーバ ログのクエリが に保存されましたAmazon S3

以下を使用できます。 Athena 保管されているウェブサーバーログをクエリする Amazon S3. このセクションのトピックでは、 Athena さまざまな形式で Web サーバー ログを照会します。

トピック• 保存されたApacheログのクエリ Amazon S3 (p. 228)• インターネット情報サーバー (IIS) ログのクエリが Amazon S3 (p. 230)

保存されたApacheログのクエリ Amazon S3以下を使用できます。 Amazon Athena クエリーへ Apache HTTP Server ログ ファイル 保管されているAmazon S3 アカウント。このトピックでは、Apache をクエリするテーブル スキーマを作成する方法を説明します。 アクセスログ ファイルを共通のログ形式で保存します。

共通ログ形式のフィールドには、クライアントIPアドレス、クライアントID、ユーザーID、リクエスト受信タイムスタンプ、クライアントリクエストのテキスト、サーバステータスコード、クライアントに返されるオブジェクトのサイズが含まれます。

次のデータ例は、Apache の共通ログ形式を示しています。

198.51.100.7 - Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232198.51.100.14 - Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165198.51.100.22 - Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287198.51.100.9 - Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230198.51.100.2 - Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30198.51.100.13 - Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608198.51.100.11 - Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344

でのテーブルの作成 Athena Apacheログ用保存されているApacheログを照会する前に、 Amazon S3では、テーブル スキーマを Athena ログデータを読み取ることができます。_を作成するには Athena Apacheログのテーブルでは、 GrokSerDe (p. 384). Grok SerDeの使用の詳細については、以下を参照してください。 Grokカスタム分類器の書き込み の AWS Glue 開発者ガイド.

でテーブルを作成するには Athena Apache Web Server ログ

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。

228

Page 238: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドApache ログのクエリ

2. 次のDDLステートメントを Athena クエリ エディター。の値の変更 LOCATION 's3://bucket-name/apache-log-folder/' Apacheログインをポイントします Amazon S3.

CREATE EXTERNAL TABLE apache_logs( client_ip string, client_id string, user_id string, request_received_time string, client_request string, server_status string, returned_obj_size string )ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'WITH SERDEPROPERTIES ( 'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{USERNAME:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$' )STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://bucket-name/apache-log-folder/';

3. Athena コンソールでクエリを実行して、apache_logs テーブルを登録します。クエリーが完了すると、ログはクエリーを実行する準備が整います。 Athena.

例 Apache ログのクエリの選択

Example – 404エラーのフィルタリング

次の例では、リクエスト受信時刻、クライアントリクエストのテキスト、およびサーバーステータスコードを apache_logs 表。は、 WHERE HTTPステータスコードの句フィルタ 404 (ページが見つかりません)。

SELECT request_received_time, client_request, server_statusFROM apache_logsWHERE server_status = '404'

次の図は、 Athena クエリ エディター。

Example – 成功したリクエストのフィルタリング

次の例では、ユーザーID、リクエスト受信時間、クライアントリクエストのテキスト、およびサーバーステータスコードを apache_logs 表。は、 WHERE HTTPステータスコードの句フィルタ 200 (成功)。

229

Page 239: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドIIS ログのクエリ

SELECT user_id, request_received_time, client_request, server_statusFROM apache_logsWHERE server_status = '200'

次の図は、 Athena クエリ エディター。

インターネット情報サーバー (IIS) ログのクエリがAmazon S3以下を使用できます。 Amazon Athena Microsoft Internet Information Services (IIS) ウェブ サーバーのログを照会するには、 Amazon S3 アカウント。IISは バラエティ このトピックでは、W3C 拡張および IIS ログ ファイル形式のログをクエリするためのテーブル スキーマの作成方法について説明します。 Athena.

W3C拡張ログ ファイル形式とIISログ ファイル形式では、1文字の区切り文字(それぞれスペースとコンマ)が使用され、引用符で囲まれた値がないため、 LazySimpleSerDe(レイジー・シンプティック・サーデ) (p. 391) 作成するために Athena テーブルに表示します。

W3C 拡張ログ ファイル フォーマットは、 W3C 拡張 ログ ファイル データ形式には、スペース区切りフィールドがあります。W3C拡張ログに表示されるフィールドは、含めるログフィールドを選択するWebサーバー管理者が決定します。次のログ データの例には、 date, time、 c-ip、 s-ip、 cs-method、 cs-uri-stem、 sc-status、 sc-bytes、 cs-bytes、 time-taken、および cs-version.

2020-01-19 22:48:39 203.0.113.5 198.51.100.2 GET /default.html 200 540 524 157 HTTP/1.02020-01-19 22:49:40 203.0.113.10 198.51.100.12 GET /index.html 200 420 324 164 HTTP/1.02020-01-19 22:50:12 203.0.113.12 198.51.100.4 GET /image.gif 200 324 320 358 HTTP/1.02020-01-19 22:51:44 203.0.113.15 198.51.100.16 GET /faq.html 200 330 324 288 HTTP/1.0

でのテーブルの作成 Athena W3C拡張ログ用W3C拡張ログを照会する前に、テーブルスキーマを作成して、 Athena ログデータを読み取ることができます。

でテーブルを作成するには Athena W3C 拡張ログ用

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. 次のようなDDLステートメントを Athena コンソールで、次の点に注意してください。

a. クエリーするログのフィールドに対応するように、例の列を追加または削除します。b. W3C 拡張ログ ファイル形式の列名にはハイフン (-)。ただし、 Athena 命名規則 (p. 85)、例

CREATE TABLE ステートメントはアンダースコア(_)。

230

Page 240: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドIIS ログのクエリ

c. スペース区切り文字を指定するには、 FIELDS TERMINATED BY ' '.d. の値の変更 LOCATION 's3://bucket-name/w3c-log-folder/' W3C拡張ログをポイントす

るには Amazon S3.

CREATE EXTERNAL TABLE `iis_w3c_logs`( date_col string, time_col string, c_ip string, s_ip string, cs_method string, cs_uri_stem string, sc_status string, sc_bytes string, cs_bytes string, time_taken string, cs_version string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://bucket-name/w3c-log-folder/'

3. Athena コンソールでクエリを実行して、iis_w3c_logs テーブルを登録します。クエリーが完了すると、ログはクエリーを実行する準備が整います。 Athena.

W3C拡張ログ選択クエリの例次のクエリ例では、テーブルからリクエストの日付、時間、リクエストターゲット、所要時間を選択します。 iis_w3c_logs。 は、 WHERE 句は、HTTPメソッドが GET HTTPステータス コードは 200 (成功)。

SELECT date_col, time_col, cs_uri_stem, time_takenFROM iis_w3c_logsWHERE cs_method = 'GET' AND sc_status = '200'

次の図は、 Athena クエリ エディター。

IIS ログ ファイルの形式W3C 拡張フォーマットとは異なり、 IIS ログ ファイル形式 には固定フィールドセットがあり、区切り文字としてコンマが含まれています。LazySimpleSerDeは、カンマを区切り文字として扱い、コンマの後のスペースを次のフィールドの先頭として扱います。

231

Page 241: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドIIS ログのクエリ

次の例は、IIS ログ・ファイル形式のサンプル・データを示しています。

203.0.113.15, -, 2020-02-24, 22:48:38, W3SVC2, SERVER5, 198.51.100.4, 254, 501, 488, 200, 0, GET, /index.htm, -, 203.0.113.4, -, 2020-02-24, 22:48:39, W3SVC2, SERVER6, 198.51.100.6, 147, 411, 388, 200, 0, GET, /about.html, -, 203.0.113.11, -, 2020-02-24, 22:48:40, W3SVC2, SERVER7, 198.51.100.18, 170, 531, 468, 200, 0, GET, /image.png, -, 203.0.113.8, -, 2020-02-24, 22:48:41, W3SVC2, SERVER8, 198.51.100.14, 125, 711, 868, 200, 0, GET, /intro.htm, -,

でのテーブルの作成 Athena IISログファイル用

IIS ログ ファイル フォーマット ログを照会するには Amazon S3最初にテーブル スキーマを作成して、Athena ログデータを読み取ることができます。

でテーブルを作成するには Athena IIS ログ ファイル フォーマット ログ

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. 次のDDLステートメントを Athena コンソールで、次の点に注意してください。

a. コンマ区切り文字を指定するには、 FIELDS TERMINATED BY ','.b. LOCATION 's3://の値を変更します。bucket-name/iis-log-file-folder/' をクリックする

と、 Amazon S3.

CREATE EXTERNAL TABLE `iis_format_logs`(client_ip_address string,user_name string,request_date string,request_time string,service_and_instance string,server_name string,server_ip_address string,time_taken_millisec string,client_bytes_sent string,server_bytes_sent string,service_status_code string,windows_status_code string,request_type string,target_of_operation string,script_parameters string )ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://bucket-name/iis-log-file-folder/'

3. Athena コンソールでクエリを実行して、iis_format_logs テーブルを登録します。クエリーが完了すると、ログはクエリーを実行する準備が整います。 Athena.

IIS ログ形式選択クエリの例

次の例では、テーブルからリクエスト日、リクエスト時間、リクエストターゲット、所要時間をミリ秒単位で選択します。 iis_format_logs。 は、 WHERE 句は、リクエストタイプが GET HTTPステータス

232

Page 242: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドIIS ログのクエリ

コードは 200 (成功)。クエリでは、先頭のスペースがs () ' GET' および ' 200' は、クエリを成功させるために必要です。

SELECT request_date, request_time, target_of_operation, time_taken_millisecFROM iis_format_logsWHERE request_type = ' GET' AND service_status_code = ' 200'

以下の画像は、サンプルデータのクエリの結果を示しています。

NCSAログ・ファイル形式IISでは、 NCSAロギング 形式。スペースで区切られた ASCII テキスト形式のフィールド数が固定されています。この構造は、Apacheアクセスログに使用される一般的なログ形式に似ています。NCSA共通ログデータ形式のフィールドには、クライアントIPアドレス、クライアントID(通常使用されない)、ドメイン/ユーザーID、リクエスト受信タイムスタンプ、クライアントリクエストのテキスト、サーバステータスコード、クライアントに返されるオブジェクトのサイズが含まれます。

次の例は、IISで文書化されているNCSA共通ログ形式のデータを示しています。.

198.51.100.7 - ExampleCorp\Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232198.51.100.14 - AnyCompany\Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165198.51.100.22 - ExampleCorp\Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287198.51.100.9 - AnyCompany\Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230198.51.100.2 - ExampleCorp\Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30198.51.100.13 - AnyCompany\Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608198.51.100.11 - ExampleCorp\Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344

でのテーブルの作成 Athena IIS NCSA ログ用

あなたの CREATE TABLE ステートメントは、 Grok SerDe (p. 384) グラックパターンを Apache Webサーバ ログ (p. 228). Apache ログとは異なり、grok パターンでは %{DATA:user_id} 3番目のフィールドでは、 %{USERNAME:user_id} バックスラッシュの存在を domain\user_id。 Grok SerDeの使用の詳細については、以下を参照してください。 Grokカスタム分類器の書き込み の AWS Glue 開発者ガイド.

でテーブルを作成するには Athena IIS NCSA Web サーバーログ用

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. 次のDDLステートメントを Athena クエリ エディター。の値の変更 LOCATION 's3://bucket-

name/iis-ncsa-logs/' IIS NCSAログインを示します Amazon S3.

233

Page 243: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドIIS ログのクエリ

CREATE EXTERNAL TABLE iis_ncsa_logs( client_ip string, client_id string, user_id string, request_received_time string, client_request string, server_status string, returned_obj_size string )ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'WITH SERDEPROPERTIES ( 'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{DATA:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$' )STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://bucket-name/iis-ncsa-logs/';

3. Athena コンソールでクエリを実行して、iis_ncsa_logs テーブルを登録します。クエリーが完了すると、ログはクエリーを実行する準備が整います。 Athena.

例 IIS NCSAログのクエリの選択

Example – 404エラーのフィルタリング

次の例では、リクエスト受信時刻、クライアントリクエストのテキスト、およびサーバーステータスコードを iis_ncsa_logs 表。は、 WHERE HTTPステータスコードの句フィルタ 404 (ページが見つかりません)。

SELECT request_received_time, client_request, server_statusFROM iis_ncsa_logsWHERE server_status = '404'

次の図は、 Athena クエリ エディター。

Example – 特定のドメインからの正常なリクエストのフィルタリング

次の例では、ユーザーID、リクエスト受信時間、クライアントリクエストのテキスト、およびサーバーステータスコードを iis_ncsa_logs 表。は、 WHERE HTTPステータスコードを持つリクエストの句フィルタ 200 (成功)は、 AnyCompany ドメイン。

SELECT user_id, request_received_time, client_request, server_status

234

Page 244: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドIIS ログのクエリ

FROM iis_ncsa_logsWHERE server_status = '200' AND user_id LIKE 'AnyCompany%'

次の図は、 Athena クエリ エディター。

235

Page 245: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータ保護

Amazon Athena セキュリティAWS では、クラウドのセキュリティが最優先事項です。AWS のお客様は、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャから利点を得られます。

セキュリティは、AWS とお客様の間の共有責任です。共有責任モデルでは、これをクラウドのセキュリティおよびクラウド内のセキュリティとして説明しています。

• クラウドのセキュリティ – AWS は、AWS クラウド内で AWS サービスを実行するインフラストラクチャを保護する責任を担います。また、AWS は、使用するサービスを安全に提供します。セキュリティの有効性は、AWS コンプライアンスプログラムの一環として、サードパーティーの審査機関によって定期的にテストおよび検証されています。Athena に適用されるコンプライアンスプログラムの詳細については、「コンプライアンスプログラム対象範囲内の AWS のサービス」を参照してください。

• クラウド内のセキュリティ – お客様の責任はお客様が使用する AWS のサービスによって決まります。また、お客様は、お客様のデータの機密性、組織の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

このドキュメントは、Amazon Athena を使用する際に共有責任モデルを適用する方法を理解するのに役立ちます。以下のトピックでは、セキュリティおよびコンプライアンスの目的を達成するために Athena を設定する方法を示します。また、Athena リソースのモニタリングや保護に役立つ他の AWS サービスの使用方法についても説明します。

トピック• Athena でのデータ保護 (p. 236)• Athena の Identity and Access Management (p. 244)• Athena のログ記録とモニタリング (p. 277)• Amazon Athena のコンプライアンス検証 (p. 277)• Athena での耐障害性 (p. 278)• Athena のインフラストラクチャセキュリティ (p. 278)• Athena での設定と脆弱性の分析 (p. 280)• Athena を使用して AWS Lake Formation に登録されたデータをクエリする (p. 281)

Athena でのデータ保護AWS 責任共有モデルは、Amazon Athena のデータ保護に適用されます。このモデルで説明したように、AWS は、すべての AWS クラウドを実行するグローバルインフラストラクチャを保護します。お客様は、このインフラストラクチャでホストされているコンテンツに対する管理を維持する責任があります。このコンテンツには、使用する AWS サービスのセキュリティ設定および管理タスクが含まれます。データプライバシーの詳細については、「データプライバシーのよくある質問」を参照してください。 欧州でのデータ保護の詳細については、AWS セキュリティブログの「AWS の責任共有モデルと GDPR」のブログ記事を参照してください。

データ保護の目的で、AWS アカウントの認証情報を保護し、個々のユーザーアカウントを AWS Identityand Access Management (IAM) で設定することをお勧めします。この方法により、それぞれの職務を遂行するために必要なアクセス許可のみを各ユーザーに付与できます。また、以下の方法でデータを保護することをお勧めします。

• 各アカウントで多要素認証 (MFA) を使用します。• SSL/TLS を使用して AWS リソースと通信します。TLS 1.2 以降が推奨されています。• AWS CloudTrail で API とユーザーアクティビティログをセットアップします。

236

Page 246: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド複数のタイプのデータの保護

• AWS 暗号化ソリューションを、AWS サービス内のすべてのデフォルトのセキュリティ管理と一緒に使用します。

• Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これにより、Amazon S3に保存される個人データの検出と保護が支援されます。

• コマンドラインインターフェイスまたは API を使用して AWS にアクセスするときに FIPS 140-2 検証済みの暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。使用可能な FIPS エンドポイントの詳細については、「連邦情報処理規格 (FIPS) 140-2」を参照してください。

顧客のアカウント番号などの機密の識別情報は、[名前] フィールドなどの自由形式のフィールドに配置しないことを強くお勧めします。これは、コンソール、API、AWS CLI、または AWS で Athena または他のAWS サービスを使用する場合も同様です。Athena または他のサービスに入力したデータはすべて、診断ログの内容として取得される可能性があります。外部サーバーへの URL を指定するときは、そのサーバーへのリクエストを検証するための認証情報を URL に含めないでください。

複数のタイプのデータの保護Athena を使用してデータベースとテーブルを作成するときは、複数のタイプのデータが関係します。これらのタイプのデータとしては、Amazon S3 に保存されているソースデータ、データ検索用にクエリまたはAWS Glue クローラの実行時に作成するデータベースとテーブルのメタデータ、クエリ結果、クエリ履歴があります。このセクションでは、各タイプのデータについて説明し、それらのデータを保護するためのガイダンスを提供します。

• ソースデータ – データベースとテーブルのデータを Amazon S3 に保存します。Athena によってそれらのデータは変更されません。詳細については、の「 でのデータ保護Amazon S3」を参照してくださいAmazon Simple Storage Service 開発者ガイド。ソースデータへのアクセスをコントロールし、Amazon S3 でそれらのデータを暗号化できます。Athena を使用して、Amazon S3 で暗号化されたデータセットに基づいてテーブルを作成 (p. 241)できます。

• データベースとテーブルのメタデータ (スキーマ) – Athena はスキーマオンリードテクノロジーを使用します。つまり、Athena によってクエリが実行されるときに、Amazon S3 でテーブル定義がデータに適用されます。定義したスキーマは、明示的に削除しない限り、自動的に保存されます。Athenaで、DDL ステートメントを使用して Data Catalog のメタデータを変更できます。テーブル定義とスキーマは、Amazon S3 に保存されている基となるデータに影響することなく削除することもできます。

Note

Athena で使用するデータベースとテーブルのメタデータは AWS Glue データカタログ に保存されます。Athena で AWS Glue データカタログ にアップグレード (p. 30)することを強くお勧めします。AWS Glue データカタログを使用するメリットの詳細については、よくある質問を参照してください。AWS Glue データカタログへのアップグレード (p. 32)。

AWS Identity and Access Management (IAM) を使用して AWS Glue データカタログ に登録されたデータベースとテーブルへのきめ細かなアクセスポリシーを定義 (p. 249)できます。AWS Glue データカタログのメタデータを暗号化することもできます。メタデータを暗号化する場合、それらのデータにアクセスするためには、暗号化されたメタデータに対するアクセス許可 (p. 240)を使用します。

• 保存されたクエリを含むクエリ結果とクエリ履歴 – クエリ結果は Amazon S3 の場所に保存されます。この場所は、グローバルに指定することも、ワークグループごとに指定することもできます。指定しないと、いずれの場合も Athena によってデフォルトの場所が使用されます。クエリ結果と保存されたクエリのある Amazon S3 バケットへのアクセスをコントロールします。また、Amazon S3 に保存するクエリ結果を暗号化することを選択できます。お客様は、Amazon S3 の場所にアクセスしてファイルを復号するための適切なアクセス許可が必要です。詳細については、このドキュメントの「Amazon S3 に保存されたクエリ結果の暗号化 (p. 240)」を参照してください。

Athena では、クエリ履歴が 45 日間保持されます。クエリ履歴を表示するには、 コンソールで、およびAWS CLI を使用します。??? (p. 118)AthenaAPIsクエリを 45 日より長く保持するには、クエリを保存します。保存されたクエリへのアクセスを保護するには、Athena のワークグループを使用 (p. 331)して、保存されたクエリへのアクセスを表示アクセス許可のあるユーザーのみに制限します。

237

Page 247: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド保管時の暗号化

トピック• 保管時の暗号化 (p. 238)• 転送時の暗号化 (p. 243)• キーの管理 (p. 243)• ネットワーク間のプライバシー (p. 244)

保管時の暗号化同じリージョン内の Amazon S3 の暗号化されたデータに対して Amazon Athena のクエリを実行できます。Amazon S3 のクエリ結果および AWS Glue Data Catalog 内のデータを暗号化することもできます。

Athena の以下のアセットは暗号化できます。

• Amazon S3 のすべてのクエリの結果は、Amazon S3 結果の場所と呼ばれる場所に Athena によって保存されます。基となるデータセットが Amazon S3 で暗号化されているかどうかに関係なく、Amazon S3に保存されたクエリ結果を暗号化できます。詳細については、「Amazon S3 に保存されたクエリ結果の暗号化 (p. 240)」 を参照してください。

• AWS Glue Data Catalog のデータ。詳細については、「AWS Glue データカタログの暗号化されたメタデータに対するアクセス許可 (p. 240)」を参照してください。

Note

Amazon S3 の暗号化されたデータセットに対してクエリを実行するための設定と、Athena でクエリ結果を暗号化するためのオプションは、独立しています。各オプションは別個に有効化して設定します。それぞれに異なる暗号化方法またはキーを使用できます。つまり、Amazon S3 の暗号化されたデータを読み取ることは、Amazon S3 の Athena クエリ結果を自動的に暗号化することになりません。逆の場合も同様です。Amazon S3 の Athena クエリ結果を暗号化することは、Amazon S3 の基となるデータセットを暗号化することになりません。

トピック• サポートされている Amazon S3 暗号化オプション (p. 238)• Amazon S3 の暗号化されたデータに対するアクセス許可 (p. 239)• AWS Glue データカタログの暗号化されたメタデータに対するアクセス許可 (p. 240)• Amazon S3 に保存されたクエリ結果の暗号化 (p. 240)• Amazon S3 の暗号化されたデータセットに基づくテーブルの作成 (p. 241)

サポートされている Amazon S3 暗号化オプションAthena では、Amazon S3 のデータセットとクエリ結果に対して次の暗号化オプションがサポートされています。

暗号化タイプ  説明

SSE-S3 Amazon S3 で管理されたキー を使用したサーバー側の暗号化 (SSE)

SSE-KMS AWS Key Management Service カスタマー管理のキーを使用したサーバー側の暗号化 (SSE)。

Note

この暗号化タイプでは、Athena ではテーブルの作成時にデータが暗号化されるように指定する必要はありません。

238

Page 248: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド保管時の暗号化

暗号化タイプ  説明

CSE-KMS AWS KMSカスタマー管理のキーを使用したクライアント側の暗号化 (CSE)。Athenaでは、このオプションでは、 を指定するCREATETABLE句でTBLPROPERTIESステートメントを使用する必要があります'has_encrypted_data'='true'。 詳細については、「」を参照してくださいAmazon S3 の暗号化されたデータセットに基づくテーブルの作成 (p. 241)。

AWS KMSを使用したAmazon S3暗号化の詳細については、 の「AWS Key Management Service とは」と「Amazon Simple Storage Service (Amazon S3) で AWS KMS を使用するAWS Key ManagementService Developer Guide方法」を参照してください。で SSE-KMS Athena または CSE-KMS を使用する方法の詳細については、起動: Amazon Athena にビッグデータブログAWSの暗号化されたデータのクエリのサポートが追加されました。

サポートされていないオプション次の暗号化オプションはサポートされていません。

• SSE と顧客提供のキー (SSE-C)• クライアント側マスターキーを使用したクライアント側の暗号化• 非対称キー。

Amazon S3暗号化オプションを比較するには、 の「暗号化を使用したデータの保護」を参照してくださいAmazon Simple Storage Service 開発者ガイド。

Amazon S3 の暗号化されたデータに対するアクセス許可Amazon S3 で使用する暗号化のタイプに応じて、Athena で使用するポリシーにアクセス許可の追加が必要になる場合があります。これは「許可」アクションとも呼ばれます。

• SSE-S3 – 暗号化に SSE-S3 を使用する場合、Athena ユーザーはポリシーで追加のアクセス許可は必要ありません。適切な Amazon S3 の場所および Athena のアクションに対する適切な Amazon S3 アクセス許可を持っているだけで十分です。Athena および Amazon S3 に対する適切なアクセス許可を付与するポリシーの詳細については、「ユーザーアクセス用の IAM ポリシー (p. 245)」と「Amazon S3 アクセス許可 (p. 249)」を参照してください。

• AWS KMS – 暗号化に AWS KMS を使用する場合、Athena ユーザーは、Athena と Amazon S3 に対するアクセス許可のほかに、特定の AWS KMS アクションを実行するためのアクセス許可が必要になります。これらのアクションを許可するには、Amazon S3 のデータの暗号化に使用する AWS KMS カスタマーマスターキー (CMK) のキーポリシーを編集します。これを行う最も簡単な方法としては、IAMコンソールを使用して適切な AWS KMS キーポリシーにキーユーザーを追加します。AWS KMSキーポリシーにユーザーを追加する方法については、の「キーポリシーを変更する方法」を参照してくださいAWS Key Management Service Developer Guide。

Note

高度なキーポリシーの管理者は、キーポリシーを調整できます。kms:Decrypt は、Athenaユーザーが暗号化されたデータセットを使用するために許可される最小限のアクションです。暗号化されたクエリ結果を使用する場合、許可される最小限のアクションはkms:GenerateDataKey と kms:Decrypt です。

Athena でクエリする Amazon S3 のデータセットに大量のオブジェクトが含まれていて、これを AWSKMS で暗号化する場合、AWS KMS はクエリ結果をスロットリングする場合があります。これは通常、多数の小さいオブジェクトがある場合に発生する可能性が高くなります。Athena で再試行リクエストを撤回した後でも、スロットリングエラーになる場合があります。この場合、AWS KMS のサービスクォータを引き上げることができます。詳細については、AWS Key Management Service DeveloperGuide の「クォータ」を参照してください。

239

Page 249: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド保管時の暗号化

AWS Glue データカタログの暗号化されたメタデータに対するアクセス許可AWS Glue データカタログのメタデータを暗号化する場合は、"kms:GenerateDataKey"、"kms:Decrypt"、"kms:Encrypt" アクションを、Athena にアクセスするために使用するポリシーに追加する必要があります。詳細については、「AWS Glue データカタログの暗号化されたメタデータへのアクセス (p. 255)」を参照してください。

Amazon S3 に保存されたクエリ結果の暗号化Athena コンソールを使用して、クエリ結果の暗号化を設定します。ワークグループを使用すると、クエリ結果の暗号化を強制できます。

JDBC または ODBC ドライバーを使用して接続する場合は、ドライバーオプションの設定で、使用する暗号化のタイプと Amazon S3 ステージングディレクトリの場所を指定します。Athena がサポートする暗号化プロトコルのいずれかを使用してクエリ結果を暗号化するように JDBC または ODBC ドライバーを設定するには、「ODBC および JDBC ドライバーを使用した Amazon Athena への接続 (p. 71)」を参照してください。

クエリ結果の暗号化は、以下の 2 つの方法で設定できます。

• [Client-side settings (クライアント側設定)] – コンソールまたは API オペレーションで [Settings (設定)]を使用してクエリ結果を暗号化することを示す場合、これはクライアント側設定の使用と呼ばれます。クライアント側設定には、クエリ結果の場所と暗号化が含まれます。指定した場合は、ワークグループの設定によって上書きされない限り、それらの設定が使用されます。

• [Workgroup settings (ワークグループ設定)] – ワークグループを作成または編集 (p. 341)して [Overrideclient-side settings (クライアント側の設定の上書き)] フィールドを選択すると、このワークグループで実行されるすべてのクエリでワークグループ設定が使用されます。詳細については、「ワークグループ設定がクライアント側の設定を上書きする (p. 340)」を参照してください。ワークグループ設定には、クエリ結果の場所と暗号化が含まれます。

コンソールを使用して Amazon S3 に保存されているクエリ結果を暗号化するには

Important

ワークグループで [Override client-side settings (クライアント側設定の上書き)] フィールドを選択している場合、クエリではワークグループ設定が使用されます。[Settings (設定)] に一覧表示されている暗号化設定およびクエリ結果の場所、API オペレーション、ドライバーは使用されません。詳細については、「ワークグループ設定がクライアント側の設定を上書きする (p. 340)」を参照してください。

1. Athena コンソールで、[設定] を選択します。

2. [Query result location] で、カスタム値を入力するか、デフォルト値を受け入れます。これは、クエリ結果が保存される Amazon S3 ステージングディレクトリです。

3. [Encrypt query results] を選択します。

240

Page 250: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド保管時の暗号化

4. [Encryption type] で、[CSE-KMS]、[SSE-KMS]、[SSE-S3] のいずれかを選択します。5. [SSE-KMS] または [CSE-KMS] を選択した場合は、[暗号化キー] を指定します。

• アカウントに既存の AWS KMS カスタマー管理キー (CMK) がある場合は、そのエイリアスを選択するか、[KMS キー ARN を入力] を選択して ARN を入力します。

• アカウントに既存のAWS KMSカスタマー管理キー (CMK) へのアクセス権限がない場合は、[KMS キーの作成] を選択して AWS KMS コンソールを開きます。ナビゲーションペインで、[AWS managed keys (AWS 管理型のキー)] を選択します。詳細については、『https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html』の「AWS Key ManagementService Developer Guideキーの作成」を参照してください。

Note

Athena は、データの読み書き用の対称キーのみをサポートします。6. Athena コンソールに戻り、前のステップで説明しているように、エイリアスまたは ARN 別にキーを

指定します。7. [Save] を選択します。

Amazon S3 の暗号化されたデータセットに基づくテーブルの作成テーブルを作成するときに、Athena にデータセットが Amazon S3 で暗号化されていることを示します。これは、SSE-KMS を使用するときは必要ありません。SSE-S3 と AWS KMS の両暗号化の場合、Athenaはデータセットの復号とテーブルの作成に必要な適切なマテリアルを判断できるため、キー情報を提供する必要はありません。

テーブルを作成するユーザーを含めて、クエリを実行するユーザーは、このトピックで前述した適切なアクセス許可を持っている必要があります。

Important

Amazon EMRと EMRFS を使用して、暗号化された Parquet ファイルをアップロードする場合、 を設定してマルチパートアップロードを無効にする必要がありますfs.s3n.multipart.uploads.enabled。false これを行わないと、 Athenaは Parquetファイルの長さを判断できず、HIVE_CANNOT_OPEN_SPLIT エラーが発生します。詳細については、次のガイドの「Amazon S3 用のマルチパートアップロードを設定する」を参照してくださいAmazon EMR 管理ガイド。

以下のいずれかの方法で Amazon S3 のデータセットを暗号化することを指示します。SSE-KMS を使用する場合、このステップは不要です。

241

Page 251: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド保管時の暗号化

• CREATE TABLE (p. 420) ステートメントの TBLPROPERTIES 句で'has_encrypted_data'='true' を指定します。

• を使用して C (p. 72)REATE TABLE を実行する場合は、JDBC TBLPROPERTIES ドライバーを使用し、前の例に示すように (p. 420)値を設定します。statement.executeQuery()

• コンソールの [Add tableAthena] ウィザードで、[Location of input data set] の値を指定するときに[Encrypted data set] を選択します。

Amazon S3 の暗号化されたデータに基づくテーブルが [データベース] リストに暗号化アイコンと共に表示されます。

242

Page 252: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド転送時の暗号化

転送時の暗号化Amazon S3 で保管時のデータを暗号化することに加えて、Amazon Athena は Athena と Amazon S3 間で、Athena とそれにアクセスするカスタマーアプリケーション間で、転送時のデータに Transport LayerSecurity (TLS) 暗号化を使用します。

Amazon S3 バケットに対する IAM ポリシーの aws:SecureTransport condition を使用して、HTTPS (TLS) を介した暗号化接続のみを許可する必要があります。

JDBC または ODBC クライアントにストリーミングされるクエリ結果は、TLS を使用して暗号化されます。JDBC および ODBC ドライバーの最新バージョンとそれらのドキュメントについては、「JDBC ドライバーとの接続 (p. 72)」と「ODBC ドライバーとの接続 (p. 73)」を参照してください。

キーの管理Amazon Athena は、Amazon S3 のデータセットと Athena のクエリ結果を暗号化するために AWS KeyManagement Service (AWS KMS) をサポートしています。AWS KMS は、カスタマーマスターキー (CMK)を使用して Amazon S3 オブジェクトを暗号化し、エンベロープ暗号化に依存しています。

AWS KMS で、以下のアクションを実行できます。

• キーを作成する• 新しい の独自のキーマテリアルをインポートする CMKs

Note

Athenaは、データの読み書き用の対称キーのみをサポートしています。

詳細については、 の「AWS AWS Key Management Service Developer Guide Key Management Serviceとは」および「 の使用方法」を参照してくださいAmazon Simple Storage ServiceAWS KMS。AWS により自動的に作成および管理されているアカウント内のキーを表示するには、ナビゲーションペインで[AWS managed keys (AWS で管理されたキー)] を選択します。

SSE-KMS で暗号化されたオブジェクトをアップロードしたり、それらへアクセスしたりする場合は、セキュリティを強化するために AWS 署名バージョン 4 を使用します。詳細については、次のガイドの「リクエスト認証での署名バージョンの指定」を参照してくださいAmazon Simple Storage Service 開発者ガイド。

243

Page 253: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドネットワーク間のプライバシー

ネットワーク間のプライバシートラフィックは Athena とオンプレミスのアプリケーション間、および Athena と Amazon S3 間の両方で保護されます。Athena と他のサービス (AWS Glue や AWS Key Management Service など) 間のトラフィックでは、デフォルトで HTTPS が使用されます。

• Athena とオンプレミスのクライアントおよびアプリケーション間のトラフィックでは、JDBC またはODBC クライアントにストリーミングされるクエリ結果は Transport Layer Security (TLS) を使用して暗号化されます。

プライベートネットワークと AWS 間の接続オプションのいずれかを使用できます。• Site-to-Site VPN AWS VPN 接続。詳細については、次のガイドを参照してくださいSite-to-Site

VPNAWS VPN。AWS Site-to-Site VPN ユーザーガイド• AWS Direct Connect 接続。詳細については、AWS Direct Connectの「AWS Direct Connect ユーザー

ガイド とは」を参照してください。• Athena と Amazon S3 バケット間のトラフィックでは、Transport Layer Security (TLS) は Athena

と Amazon S3 間で、Athena とそれにアクセスするカスタマーアプリケーション間で、転送時のオブジェクトを暗号化します。そのため、Amazon S3 バケットに対する IAM ポリシーのaws:SecureTransport condition を使用して、HTTPS (TLS) を介した暗号化接続のみを許可する必要があります。

Athena の Identity and Access ManagementAmazon Athena では、AWS Identity and Access Management (IAM) ポリシーを使用して Athena オペレーションへのアクセスを制限します。

Athena でクエリを実行するには、以下のための適切なアクセス許可が必要です。

• Athena API アクション (Athena ワークグループ (p. 331)の追加のアクションを含む)。• クエリを実行する基となるデータが保存されている Amazon S3 の場所。• データベースやテーブルなど AWS Glue データカタログ に保存しているメタデータとリソース (暗号化

されたメタデータに対する追加のアクションを含む)。

管理者として他のユーザーを管理する場合は、各ユーザーのユーザープロファイルに適切なアクセス許可が関連付けられていることを確認してください。次のトピックの他に、見なさい のアクション、リソース、条件キー Amazon Athena を IAM ユーザーガイド.

トピック• ユーザーアクセス用の管理ポリシー (p. 245)• JDBC および ODBC 接続を介したアクセス (p. 248)• Amazon S3 にアクセスします (p. 249)• AWS Glue データカタログ のデータベースとテーブルへのきめ細かなアクセス (p. 249)• AWS Glue データカタログ での暗号化されたメタデータへのアクセス (p. 255)• Amazon S3 バケットへの Athena のクロスアカウントアクセス (p. 256)• ワークグループとタグへのアクセス (p. 259)• Athena Data Connector for External Hive Metastore (Preview) へのアクセスを許可する (p. 260)• 外部 Hive メタストアへの Lambda 関数アクセスを許可する (p. 262)• Athena Federated Query (Preview) を許可する IAM アクセス許可ポリシーの例 (p. 265)• Amazon Athena User Defined Functions (UDF) を許可する IAM アクセス許可ポリシーの例 (p. 269)• ML with Athena (Preview) のアクセスの許可 (p. 273)

244

Page 254: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドユーザーアクセス用の管理ポリシー

• Athena API へのフェデレーションアクセスの有効化 (p. 274)

ユーザーアクセス用の管理ポリシーAWS Identity and Access Management (IAM) を使用して自分自身または他のユーザーに対して AmazonAthena サービスアクションを許可または拒否するには、ユーザーやグループなどのプリンシパルにアイデンティティベースのポリシーをアタッチします。

各アイデンティティベースのポリシーは、許可または拒否されるアクションを定義するステートメントで構成されます。ポリシーをユーザーにアタッチするための詳細情報および手順については、AWS Identityand Access Management ユーザーガイドの「管理ポリシーのアタッチ」を参照してください。アクション一覧については、「Amazon Athena API リファレンス」を参照してください。

管理ポリシーは使用しやすく、サービスの高度化に伴い必要になるアクションで自動的に更新されます。

Athena には以下の管理ポリシーがあります。

• AmazonAthenaFullAccess 管理ポリシーは Athena へのフルアクセスを付与します。これを、Athena へのフルアクセスを必要とするユーザーや他のプリンシパルにアタッチします。参照AmazonAthenaFullAccess 管理対象ポリシー (p. 245).

• AWSQuicksightAthenaAccess 管理ポリシーでは、Amazon QuickSight と Athena の統合に必要なアクションに対するアクセス権を付与します。このポリシーは、Amazon QuickSight を Athena と併用するプリンシパルにアタッチします。参照 AWSQuicksightAthenaAccess 管理対象ポリシー (p. 247).

カスタマー管理ポリシーおよびアイデンティティベースのインラインポリシーを使用すると、ポリシー内でより詳細な Athena アクションを指定してアクセスを微調整できます。AmazonAthenaFullAccess ポリシーを開始点として使用し、次に「Amazon Athena API リファレンス」に示されている特定のアクションを許可または拒否することをお勧めします。インラインポリシーの詳細については、AWS Identity andAccess Management ユーザーガイドの「管理ポリシーとインラインポリシー」を参照してください。

JDBC を使用して接続するプリンシパルに対しては、JDBC ドライバーの認証情報をアプリケーションに提供する必要があります。詳細については、「JDBC 接続のサービスアクション (p. 248)」を参照してください。

Athena で AWS Glue を使用し、AWS Glue データカタログを暗号化している場合は、Athena のアイデンティティベースの IAM ポリシーで追加のアクションを指定する必要があります。詳細については、「AWSGlue データカタログの暗号化されたメタデータへのアクセス (p. 255)」を参照してください。

Important

ワークグループを作成して使用する場合、ポリシーにワークグループアクションへの適切なアクセス許可が含まれていることを確認してください。詳細については、「the section called “ ワークグループにアクセスするための IAM ポリシー” (p. 334)」および「the section called “ワークグループのポリシーの例” (p. 335)」を参照してください。

AmazonAthenaFullAccess 管理ポリシーAmazonAthenaFullAccess 管理ポリシーは Athena へのフルアクセスを付与します。

管理ポリシーの内容は変わるため、ここに示すポリシーは古くなっている可能性があります。IAM コンソールで最新のポリシーを確認してください。

{ "Version": "2012-10-17", "Statement": [

245

Page 255: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドユーザーアクセス用の管理ポリシー

{ "Effect": "Allow", "Action": [ "athena:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::aws-athena-query-results-*" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::athena-examples*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket",

246

Page 256: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドユーザーアクセス用の管理ポリシー

"s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "sns:ListTopics", "sns:GetTopicAttributes" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricAlarm", "cloudwatch:DescribeAlarms", "cloudwatch:DeleteAlarms" ], "Resource": [ "*" ] } ]}

AWSQuicksightAthenaAccess 管理ポリシー追加の管理ポリシー AWSQuicksightAthenaAccess では、Amazon QuickSight と Athena の統合に必要なアクションに対するアクセス許可を付与します。このポリシーに含まれる Athena のアクションには、非推奨になっており、現在公開されている API に含まれていないもの、または JDBC ドライバーおよびODBC ドライバーでのみ使用されるものがあります。このポリシーは、Athena で Amazon QuickSight を使用するプリンシパルにのみアタッチします。

管理ポリシーの内容は変わるため、ここに示すポリシーは古くなっている可能性があります。IAM コンソールで最新のポリシーを確認してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:BatchGetQueryExecution", "athena:CancelQueryExecution", "athena:GetCatalogs", "athena:GetExecutionEngine", "athena:GetExecutionEngines", "athena:GetNamespace", "athena:GetNamespaces", "athena:GetQueryExecution", "athena:GetQueryExecutions", "athena:GetQueryResults", "athena:GetQueryResultsStream", "athena:GetTable", "athena:GetTables", "athena:ListQueryExecutions", "athena:RunQuery",

247

Page 257: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJDBC および ODBC 接続を介したアクセス

"athena:StartQueryExecution", "athena:StopQueryExecution" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::aws-athena-query-results-*" ] } ]}

JDBC および ODBC 接続を介したアクセスAthena や Amazon S3 バケットなど、AWS のサービスやリソースへのアクセスを取得するには、JDBCまたは ODBC ドライバーの認証情報をアプリケーションに提供します。JDBC ドライバまたは ODBCドライバを使用している場合は、 IAM 権限ポリシーには、 AWSQuicksightAthenaAccess 管理対象ポリシー (p. 247).

JDBC および ODBC ドライバーの最新バージョンとそのドキュメントについては、「JDBC ドライバーを介した Athena の使用 (p. 72)」および「ODBC での Amazon Athena との接続 (p. 73)」を参照してください。

248

Page 258: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAmazon S3 にアクセスします

Amazon S3 にアクセスしますアイデンティティベースのポリシー、バケットリソースポリシー、またはその両方を使用して、AmazonS3 の場所へのアクセスを許可できます。

助成金の交付方法に関する詳細および例 Amazon S3 次のリソースを参照してください。

• ウォークスルーの例: アクセスの管理 を Amazon Simple Storage Service 開発者ガイド.• Amazon S3 バケットにあるオブジェクトへのクロスアカウントアクセスを提供するには、どうすればよ

いですか? を AWS ナレッジセンター。• Amazon S3 バケットへの Athena のクロスアカウントアクセス (p. 256).

Note

Athena では、aws:SourceIp 条件キーに基づく Amazon S3 リソースへのアクセスの制限や許可はサポートされていません。

AWS Glue データカタログ のデータベースとテーブルへのきめ細かなアクセスAmazon Athena で AWS Glue データカタログ を使用すると、Athena で使用される Data Catalog オブジェクト (データベースとテーブル) のリソースレベルのポリシーを定義できます。

IAM アイデンティティベースポリシーのリソースレベルアクセス許可を定義します。

Important

このセクションでは、アイデンティティベースの IAM ポリシーにおけるリソースレベルのアクセス許可について説明します。これらはリソースベースのポリシーとは異なります。違いの詳細については、以下を参照してください。 アイデンティティベースのポリシーとリソースベースのポリシー を AWS IDおよびアクセス管理ユーザーガイド.

これらのタスクについては、以下のトピックを参照してください。

このタスクを実行するには

以下のトピックを参照してください。

リソースへのきめ細かなアクセスを定義する IAMポリシーを作成する

IAM ポリシーの作成 (AWS Identity and Access Management ユーザーガイド)。

AWS Glue で使用するアイデンティティベースのIAM ポリシーについて説明しています。

アイデンティティベースのポリシー (IAM ポリシー) (AWS Glue 開発者ガイド)。

このセクションの内容

• 制限 (p. 250)• 必須: AWS地域ごとのデフォルトデータベースとカタログへのアクセスポリシー (p. 251)• のテーブル パーティションとバージョン AWS Glue (p. 251)• きめ細かなポリシーの例 (p. 252)

249

Page 259: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータベースとテーブルへのきめ細かなアクセス

LimitationsAWS Glue データカタログ および Athena できめ細かなアクセスコントロールを使用する際は、以下の制限事項を考慮します。

• データベースとテーブルにのみアクセスを制限することができます。きめ細かなアクセスコントロールはテーブルレベルで適用されるため、テーブル内の個々のパーティションへのアクセスを制限することはできません。詳細については、「AWS Glue のテーブルのパーティションとバージョン (p. 251)」を参照してください。

• Athena では AWS Glue データカタログ へのクロスアカウントアクセスはサポートされていません。• [ AWS Glue データカタログ には、次のリソースが含まれています。CATALOG、 DATABASE、 TABLE、

および FUNCTION.

Note

このリストから、 Athena そして AWS Glue データカタログ は TABLE、 DATABASE、およびCATALOG を各科目に割り当ててください。Function は、 AWS Glue. Athena での削除アクションの場合、AWS Glue のアクションに対するアクセス許可を含める必要があります。「きめ細かなポリシーの例 (p. 252)」を参照してください。

階層は次のとおりです。CATALOG はすべての祖先です DATABASES 各アカウント、そして各 DATABASEは、 TABLES および FUNCTIONS. たとえば、 table_test データベースに属するデータベース db アカウント内のカタログで、その先祖は db およびアカウント内のカタログ。データベース db の場合、その祖先はアカウント内のカタログであり、その子孫はテーブルおよび関数です。リソースの階層構造の詳細については、以下を参照してください。 一覧 ARNs データカタログ内 を AWS Glue 開発者ガイド.

• リソースに対する削除以外の Athena アクション (CREATE DATABASE、CREATE TABLE、SHOWDATABASE、SHOW TABLE、ALTER TABLE など) の場合は、Data Catalog のリソース (テーブルまたはデータベース) およびそのリソースのすべての祖先に対して、このアクションを呼び出すためのアクセス許可が必要です。たとえば、テーブルの祖先は属する先のデータベース、およびアカウントのカタログです。データベースの祖先はアカウントのカタログです。「きめ細かなポリシーの例 (p. 252)」を参照してください。

• Athena での DROP DATABASE や DROP TABLE などの削除アクションの場合、Data Catalog のリソースのすべての祖先および子孫に対して削除アクションを呼び出すためのアクセス許可も必要です。たとえば、データベースを削除するには、データベース、その祖先であるカタログ、その子孫であるすべてのテーブルとユーザー定義関数に対するアクセス許可が必要です。テーブルに子孫はありません。DROPTABLE を実行するには、テーブル、その属する先のデータベース、カタログに対して、このアクションを呼び出すためのアクセス許可が必要です。「きめ細かなポリシーの例 (p. 252)」を参照してください。

• Data Catalog の特定のデータベースへのアクセスを制限する場合は、GetDatabase およびCreateDatabase のアクションに対して、各 AWS リージョンの default データベースとカタログへのアクセスポリシーも指定する必要があります。複数のリージョンで Athena を使用している場合は、各リージョンの各 default データベースとカタログに対するリソース ARN のポリシーに個別の行を追加します。

たとえば、 GetDatabase アクセス example_db を us-east-1 (N.Virginia)地域。 default そのリージョンのポリシー内のデータベースとカタログの2つのアクション: GetDatabase およびCreateDatabase:

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default",

250

Page 260: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータベースとテーブルへのきめ細かなアクセス

"arn:aws:glue:us-east-1:123456789012:database/example_db" ]}

必須: アクセスポリシー: Default AWS地域ごとのデータベースとカタログAWS Glue データカタログ で Athena を使用するには、GetDatabase と CreateDatabase に対する、default データベースと AWS Glue データカタログ へのアクセスポリシーが AWS リージョンごとに存在している必要があります。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ]}

AWS Glue でのテーブルのパーティションとバージョンAWS Glue では、テーブルがパーティションとバージョンを持つことができます。テーブルのバージョンとパーティションは、AWS Glue での独立したリソースとは見なされません。テーブルのバージョンとパーティションへのアクセスは、そのテーブルとその祖先リソースに対するアクセス許可を付与することで許可します。

きめ細かなアクセスコントロールを行う場合は、以下のアクセス許可を適用します。

• きめ細かなアクセスコントロールはテーブルレベルで適用されます。データベースとテーブルにのみアクセスを制限することができます。たとえば、パーティション分割されたテーブルへのアクセスを許可すると、そのアクセス権はそのテーブル内のすべてのパーティションに適用されます。テーブル内の個別パーティションへのアクセスを制限することはできません。

Important

テーブル内のすべてのパーティションへのアクセス権があっても、AWS Glue でパーティションに対するアクションを実行する場合には十分ではありません。パーティションに対してアクションを実行するには、そのアクションに対するアクセス権限が必要です。たとえば、myDB データベース内の myTable テーブルに対して GetPartitions を実行するには、Data Catalog、myDB データベース、および myTable で glue:GetPartitions アクションに対するアクセス許可が必要です。

• きめ細かなアクセスコントロールはテーブルバージョンには適用されません。パーティションの場合と同様に、テーブルの以前のバージョンへのアクセスは、テーブル バージョンへのアクセスによって許可されます。 APIs () AWS Glue テーブルの先祖に

の権限については、 AWS Glue アクション、参照 AWS Glue APIの権限: アクションおよびリソース参照を AWS Glue 開発者ガイド.

251

Page 261: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータベースとテーブルへのきめ細かなアクセス

テーブルとデータベースのきめ細かなアクセス許可の例以下の表に示しているのは、Athena のデータベースおよびテーブルへのきめ細かなアクセスを許可する、IAM アイデンティティベースポリシーの例です。これらの例から開始することをお勧めします。必要に応じて特定のデータベースやテーブルの個別アクションを許可または拒否するように調整します。

以下の例では、GetDatabase および CreateDatabase アクションに対する、default データベースとカタログへのアクセスポリシーが含まれています。このポリシーは、Athena と AWS Glue データカタログ が連携するために必要です。複数の AWS リージョンを利用している場合は、各 default データベースとカタログに対して、リージョンごとに 1 行、このポリシーを含めます。

さらに、example_db データベースと test テーブル名を使用するデータベースとテーブルの名前に置き換えます。

DDL ステートメント リソースへのアクセスを許可する IAM アクセスポリシーの例

CREATE DATABASE example_db という名前のデータベースを作成できます。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }

ALTER DATABASE example_db データベースのプロパティを変更できます。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ]},{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:UpdateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db" ] }

DROP DATABASE すべてのテーブルを含む、example_db データベースを削除できます。

{ "Effect": "Allow",

252

Page 262: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータベースとテーブルへのきめ細かなアクセス

DDL ステートメント リソースへのアクセスを許可する IAM アクセスポリシーの例 "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ]},{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:DeleteDatabase", "glue:GetTables", "glue:GetTable", "glue:DeleteTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*", "arn:aws:glue:us-east-1:123456789012:userDefinedFunction/example_db/*" ] }

SHOW DATABASES AWS Glue データカタログ のすべてのデータベースをリストすることができます。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase"

], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ]}, { "Effect": "Allow", "Action": [ "glue:GetDatabases" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/*" ] }

253

Page 263: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータベースとテーブルへのきめ細かなアクセス

DDL ステートメント リソースへのアクセスを許可する IAM アクセスポリシーの例

CREATE TABLE test という名前のテーブルを example_db データベースに作成できます。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ]}, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:CreateTable" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }

SHOW TABLES example_db データベースにあるすべてのテーブルをリストすることができます。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ]}, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTables" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/*" ] }

254

Page 264: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドData Catalog での暗号化されたメタデータへのアクセス

DDL ステートメント リソースへのアクセスを許可する IAM アクセスポリシーの例

DROP TABLE example_db データベースにある test という名前のパーティション分割されたテーブルを削除できます。テーブルにパーティションがない場合は、パーティションのアクションを含めません。

{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:CreateDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/default" ]}, { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:DeleteTable", "glue:GetPartitions", "glue:GetPartition", "glue:DeletePartition" ], "Resource": [ "arn:aws:glue:us-east-1:123456789012:catalog", "arn:aws:glue:us-east-1:123456789012:database/example_db", "arn:aws:glue:us-east-1:123456789012:table/example_db/test" ] }

AWS Glue データカタログ での暗号化されたメタデータへのアクセスAmazon Athena で AWS Glue データカタログ を使用する場合は、AWS Glue コンソールまたは API を使用して AWS Glue データカタログ で暗号化を有効にできます。詳細については、以下を参照してください。 データ カタログの暗号化 を AWS Glue 開発者ガイド.

AWS Glue データカタログ が暗号化されている場合は、Athena へのアクセスに使用されるすべてのポリシーに以下のアクションを追加する必要があります。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt", "kms:Encrypt" ], "Resource": "(arn of key being used to encrypt the catalog)" }}

255

Page 265: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドS3 バケットへのクロスアカウントアクセス

Amazon S3 バケットへの Athena のクロスアカウントアクセスAmazon Athena の一般的なシナリオでは、バケット所有者とは異なるアカウントのユーザーに、クエリを実行するためのアクセス許可を付与します。この場合、アクセス許可を付与するには、バケットポリシーを使用します。

Note

でのクロスアカウントアクセスについては、 AWS Glue、参照 Amazon Athenaを使用したクロスアカウントAWS Glueデータカタログアクセス を AWS ビッグデータのブログ、または クロスアカウントアクセスの許可 を AWS Glue 開発者ガイド.

次のバケット ポリシーの例は、ソース データ バケットに作成および適用されています。 s3://my-athena-data-bucket バケットオーナーによって、アカウント内のすべてのユーザーにアクセス権が付与されます。 123456789123これは別のアカウントです。

{ "Version": "2012-10-17", "Id": "MyPolicyID", "Statement": [ { "Sid": "MyStatementSid", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789123:root" }, "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::my-athena-data-bucket", "arn:aws:s3:::my-athena-data-bucket/*" ] } ] }

アカウントの特定のユーザーにアクセス権を付与するには、 Principal のキーと、ユーザーを指定するキー root. たとえば、ユーザープロファイルの場合、 Dave、使用arn:aws:iam::123456789123:user/Dave.

カスタム AWS KMS キーで暗号化されたバケットへのクロスアカウントアクセスカスタム AWS Key Management Service (AWS KMS) キーで暗号化された Amazon S3 バケットがある場合は、別の AWS アカウントのユーザーに対してそのバケットへのアクセスを許可する必要があります。

アカウント A の AWS KMS暗号化されたバケットへのアクセスをアカウント B のユーザーに付与するには、次のアクセス許可が必要です。

• アカウント A のバケットポリシーは、アカウント B へのアクセスを許可する必要があります。

256

Page 266: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドS3 バケットへのクロスアカウントアクセス

• アカウント A の AWS KMS キーポリシーは、アカウント B のユーザーにアクセスを許可する必要があります。

• アカウント B の AWS Identity and Access Management (IAM) ユーザーポリシーは、アカウント A のバケットとキーの両方へのアクセスをユーザーに許可する必要があります。

以下の手順では、これらのアクセス許可をそれぞれ付与する方法を示します。

アカウント A のバケットへのアクセスをアカウント B のユーザーに許可するには

• アカウント A で S3 バケットポリシーを確認し、アカウント B のアカウント ID からのアクセスを許可するステートメントがあることを確認します。

たとえば、次のバケットポリシーは、アカウント ID 111122223333 に対して s3:GetObject へのアクセスを許可します。

{ "Id": "ExamplePolicy1", "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt1", "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::awsexamplebucket/*", "Principal": { "AWS": [ "111122223333" ] } } ]}

アカウント A の AWS KMS キーポリシーからアカウント B のユーザーに対してアクセスを許可するには

1. アカウント A の AWS KMS キーポリシーで、アカウント B のユーザーに以下のアクションに対するアクセス許可を付与します。

• kms:Encrypt

• kms:Decrypt

• kms:ReEncrypt*

• kms:GenerateDataKey*

• kms:DescribeKey

次の例では、1 つの IAM ユーザーまたはロールにのみキーへのアクセスを許可します。

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/role_name", ] },

257

Page 267: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドS3 バケットへのクロスアカウントアクセス

"Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*"}

2. アカウント A から、AWS マネジメントコンソールのポリシービューを使用してキーポリシーを確認します。

3. キーポリシーで、次のステートメントによってアカウント B がプリンシパルとしてリストされていることを確認します。

"Sid": "Allow use of the key"

4. "Sid": "Allow use of the key" ステートメントが存在しない場合は、以下のステップを実行します。

a. コンソールのデフォルトビューを使用してキーポリシーを表示するように切り替えます。b. アカウント B のアカウント ID を、キーにアクセスできる外部アカウントとして追加します。

アカウント B の IAM ユーザーポリシーからアカウント A のバケットとキーへのアクセスを許可するには

1. アカウント B から、IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。2. アカウント B のユーザーに関連付けられている IAM ユーザーまたはロールを開きます。3. IAM ユーザーまたはロールに適用されているアクセス許可ポリシーのリストを確認します。4. バケットへのアクセスを許可するポリシーが適用されていることを確認します。

次のステートメント例は、awsexamplebucket バケットに対する s3:GetObject オペレーションとs3:PutObject オペレーションへのアクセスを IAM ユーザーを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt2", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": "arn:aws:s3:::awsexamplebucket/*" } ]}

5. キーへのアクセスを許可するポリシーが適用されていることを確認します。

Note

アカウント B の IAM ユーザーまたはロールに 管理者アクセス権が既にある場合は、ユーザーの IAM ポリシーからキーへのアクセスを許可する必要はありません。

次のステートメント例は、arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd キーを使用するためのアクセスを IAM ユーザーに許可します。

258

Page 268: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループとタグへのアクセス

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStmt3", "Action": [ "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey", "kms:ReEncrypt*" ], "Effect": "Allow", "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd" } ]}

IAM ユーザーのアクセス許可を追加または修正する手順については、「IAM ユーザーのアクセス許可の変更」を参照してください。

バケットオブジェクトへのクロスアカウントアクセスバケットの所有アカウント(アカウントA)以外のアカウント(アカウントC)によってアップロードされたオブジェクトは、明示的なオブジェクトレベル ACLs クエリーアカウント(アカウントB)への読み取りアクセス権を付与します。この要件を回避するには、アカウント C がアカウント A のバケットにオブジェクトを配置する前に、アカウント A のロールを引き受ける必要があります。詳細については、「Amazon S3 バケット内のオブジェクトへのクロスアカウントアクセスを提供するには、どうしたらいいですか?」を参照してください。

ワークグループとタグへのアクセスワークグループは、Athena で管理されているリソースです。したがって、ワークグループポリシーでworkgroup を入力として受け取るアクションを使用する場合は、ワークグループの ARN を以下のように指定する必要があります。workgroup-name は実際のワークグループの名前です。

"Resource": [arn:aws:athena:region:AWSAcctID:workgroup/workgroup-name]

たとえば、AWS アカウント 123456789012 の us-west-2 リージョンにある test_workgroup という名前のワークグループの場合、以下の ARN を使用してワークグループをリソースとして指定します。

"Resource":["arn:aws:athena:us-east-2:123456789012:workgroup/test_workgroup"]

• ワークグループポリシーの一覧については、「the section called “ワークグループのポリシーの例” (p. 335)」を参照してください。

• ワークグループのタグベースのポリシーの一覧については、「タグベースの IAM アクセスコントロールポリシー (p. 365)」を参照してください。

• ワークグループの IAM ポリシーの作成の詳細については、「ワークグループの IAM ポリシー (p. 334)」を参照してください。

• すべての Amazon Athena アクションのリストについては、Amazon Athena API リファレンスで API アクション名を参照してください。

• 詳細情報については、 IAM ポリシー、参照 ビジュアル エディタを使用したポリシーの作成 を IAM ユーザーガイド.

259

Page 269: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena Data Connector for External Hive

Metastore (Preview) へのアクセスを許可する

Athena Data Connector for External Hive Metastore(Preview) へのアクセスを許可するこのトピックのアクセス許可ポリシーの例は、使用可能な必須アクションとそれらのアクションが許可されるリソースを示しています。同様のアクセス許可ポリシーを IAM ID にアタッチする前に、これらのポリシーを慎重に検討し、要件に従って変更してください。

• Example Policy to Allow an IAM Principal to Query Data Using Athena Data Connector for External HiveMetastore (Preview) (p. 260)

• Example Policy to Allow an IAM Principal to Create an Athena Data Connector for External HiveMetastore (Preview) (p. 261)

Example – 許可する IAM を使用してデータをクエリするプリンシパル Athena Data Connector forExternal Hive Metastore (Preview)

次のポリシーは、AmazonAthenaFullAccess 管理ポリシー (p. 245) に加え、IAM プリンシパルにアタッチされ、Athena アクションへのフルアクセスを付与します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "lambda:GetFunction", "lambda:GetLayerVersion", "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunction", "arn:aws:lambda:*:MyAWSAcctId:function:AnotherAthenaLambdaFunction", "arn:aws:lambda:*:MyAWSAcctId:layer:MyAthenaLambdaLayer:*" ] }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillLocation" } ]}

アクセス許可の説明

使用可能なアクション 説明

"s3:GetBucketLocation","s3:GetObject","s3:ListBucket",

s3 アクションによって、"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillLocation"、ここ

260

Page 270: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena Data Connector for External Hive

Metastore (Preview) へのアクセスを許可する

使用可能なアクション 説明"s3:PutObject","s3:ListMultipartUploadParts","s3:AbortMultipartUpload"

で、MyLambdaSpillLocation は、Lambda 関数または呼び出される関数。-arn:aws:lambda:*:MyAWSAcctId:layer:MyAthenaLambdaLayer:*リソース識別子は、 Lambda レイヤーを使用して、カスタムランタイムの依存関係を作成して、展開時の機能アーティファクトサイズを削減します。最後の位置にある * は、レイヤーバージョンのワイルドカードです。

"lambda:GetFunction","lambda:GetLayerVersion","lambda:InvokeFunction"

クエリが Resource ブロックで指定された AWS Lambda 関数を呼び出すことを許可します。たとえば、arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunction、ここで、MyAthenaLambdaFunction は、Lambda 関数を呼び出します。例に示すように、複数の関数を指定できます。

Example – 許可する IAM プリンシパルが Athena Data Connector for External Hive Metastore(Preview)

次のポリシーは、AmazonAthenaFullAccess 管理ポリシー (p. 245) に加え、IAM プリンシパルにアタッチされ、Athena アクションへのフルアクセスを付与します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "lambda:GetFunction", "lambda:ListFunctions", "lambda:GetLayerVersion", "lambda:InvokeFunction", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:PublishLayerVersion", "lambda:DeleteLayerVersion", "lambda:UpdateFunctionConfiguration", "lambda:PutFunctionConcurrency", "lambda:DeleteFunctionConcurrency" ], "Resource": "arn:aws:lambda:*:MyAWSAcctId: function: MyAthenaLambdaFunctionsPrefix*" } ]}

アクセス許可の説明

クエリが Resource ブロックで指定された AWS Lambda 関数の AWS Lambda 関数を呼び出すことを許可します。たとえば、 arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunction、ここで、MyAthenaLambdaFunction は、 Lambda 関数を呼び出します。例に示すように、複数の関数を指定できます。

261

Page 271: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド外部 Hive メタストアへの Lambda 関数アクセスを許可する

外部 Hive メタストアへの Lambda 関数アクセスを許可するアカウント内の Lambda 関数を呼び出すには、次のアクセス許可を持つロールを作成する必要があります。

• AWSLambdaVPCAccessExecutionRole – 関数を VPC に接続する Elastic Network Interface を管理する AWS Lambda 実行ロールアクセス許可。利用可能なネットワークインターフェイスと IP アドレスが十分であることを確認します。

• AmazonAthenaFullAccess –AmazonAthenaFullAccess (p. 245) マネージドポリシーは、Athena へのフルアクセスを許可します。

• Lambda 関数に S3 への書き込みを許可し、Athena に S3 からの読み取りを許可する Amazon S3 ポリシー。

たとえば、次のポリシーは、スピル場所 s3:\\mybucket\spill のアクセス許可を定義します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::mybucket/spill" ] } ]}

Lambda 関数の作成アカウント内で Lambda 関数を作成するには、関数開発アクセス許可または AWSLambdaFullAccessロールが必要です。詳細については、「AWS Lambda のアイデンティティベースの IAM ポリシー」を参照してください。

Athena は AWS Serverless Application Repository を使用して Lambda 関数を作成するため、Lambda 関数を作成するスーパーユーザーまたは管理者には、Athena 横串検索を許可する IAM (p. 265)ポリシーも必要です。

カタログ登録とメタデータ API オペレーションカタログ登録 API およびメタデータ API オペレーションにアクセスするには、AmazonAthenaFullAccessマネージドポリシー (p. 245)を使用します。このポリシーを使用しない場合は、次の API オペレーションを Athena ポリシーに追加します。

{ "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:GetDataCatalog", "athena:CreateDataCatalog", "athena:UpdateDataCatalog",

262

Page 272: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド外部 Hive メタストアへの Lambda 関数アクセスを許可する

"athena:DeleteDataCatalog", "athena:GetDatabase", "athena:ListDatabases", "athena:GetTableMetadata", "athena:ListTableMetadata" ], "Resource": [ "*" ] }

クロスリージョン Lambda 呼び出しAthena クエリを実行しているリージョン以外のリージョンで Lambda 関数を呼び出すには、Lambda 関数の完全 ARN を使用します。デフォルトでは、Athena が同じリージョンで定義された Lambda 関数を呼び出します。Athena クエリを実行するリージョン以外のリージョンで Hive メタストアにアクセスするための Lambda 関数を呼び出す必要がある場合は、Lambda 関数の完全な ARN を指定する必要があります。

たとえば、欧州 (フランクフルト) リージョン eu-central-1 のカタログ ehms を定義して、米国東部(バージニア北部) リージョン 電子メール次の Lambda 関数を使用するとします。

arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new

この方法で完全な ARN を指定すると、Athena は us-east-1 でexternal-hms-service-new Lambda関数を呼び出して eu-central-1 から Hive メタストアデータをフェッチできます。

Note

カタログ ehms は、Athena クエリを実行するリージョンと同じリージョンに登録する必要があります。

クロスアカウント Lambda の呼び出し場合によっては、別のアカウントから Hive メタストアへのアクセスが必要になることがあります。たとえば、Hive メタストアを実行するために、Athena クエリに使用するアカウントとは異なるアカウントからEMR クラスターを起動できます。異なるグループやチームが、VPC 内の異なるアカウントで Hive メタストアを実行することもできます。または、異なるグループやチームから異なる Hive メタストアのメタデータにアクセスすることもできます。

Athena は、クロスアカウントアクセスの AWS Lambda サポートを使用して、Hive メタストアのクロスアカウントアクセスを有効にします。

Note

Athena のクロスアカウントアクセスとは通常、Amazon S3 のメタデータとデータ両方のクロスアカウントアクセスを指します。

次のシナリオを想像してみてください。

• アカウント 111122223333 は、EMR クラスターで実行されている Hive メタストアにアクセスするために、Athena の us-east-1 で Lambda 関数 external-hms-service-new を設定します。

• アカウント 111122223333 は、アカウント 444455556666 に Hive メタストアデータへのアクセスを許可しようとしています。

アカウント 444455556666 に Lambda 関数 external-hms-service-new へのアクセスを許可するために、アカウント 111122223333 は次の AWS CLI add-permission コマンドを使用します。コマンドは、読みやすい形式にしてあります。

$ aws --profile perf-test lambda add-permission

263

Page 273: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド外部 Hive メタストアへの Lambda 関数アクセスを許可する

--function-name external-hms-service-new --region us-east-1 --statement-id Id-ehms-invocation2 --action "lambda:InvokeFunction" --principal arn:aws:iam::444455556666:user/perf1-test{ "Statement": "{\"Sid\":\"Id-ehms-invocation2\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}"}

Lambda アクセス許可を確認するには、次の例のように get-policy コマンドを使用します。コマンドは、読みやすい形式にしてあります。

$ aws --profile perf-test lambda get-policy --function-name arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new --region us-east-1{ "RevisionId": "711e93ea-9851-44c8-a09f-5f2a2829d40f", "Policy": "{\"Version\":\"2012-10-17\", \"Id\":\"default\", \"Statement\":[{\"Sid\":\"Id-ehms-invocation2\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"arn:aws:iam::444455556666:user/perf1-test\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new\"}]}"}

アクセス許可を追加した後、カタログ ehms を定義するときには、次のように us-east-1 で Lambda 関数の完全な ARN を使用できます 。

arn:aws:lambda:us-east-1:111122223333:function:external-hms-service-new

クロスリージョン呼び出しの詳細については、このトピックの「クロスリージョン Lambda 呼び出し (p. 263)」を参照してください。

データに対するクロスアカウントアクセス許可の付与

Athena クエリを実行する前に、Amazon S3 のデータへのクロスアカウントアクセスを許可する必要があります。これには以下の 2 つの方法があります。

• 正規ユーザー ID を使って、Amazon S3 バケットのアクセスコントロールリストポリシーを更新します。

• Amazon S3 バケットポリシーにクロスアカウントアクセスを追加します。

たとえば、アカウント 111122223333 の Amazon S3 バケットポリシーに次のポリシーを追加して、アカウント 444455556666 が指定の Amazon S3 場所からデータを読み取ることを許可します。

{ "Sid": "Stmt1234567890123", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:user/perf1-test"

264

Page 274: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena Federated Query (Preview) へのアクセスを許可する

}, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::athena-test/lambda/dataset/*"}

Note

場合によっては、データだけでなく、Amazon S3 スピル場所にも Amazon S3 へのクロスアカウントアクセスを許可する必要があります。応答オブジェクトのサイズが指定されたしきい値を超えると、Lambda 関数は余分なデータをスピル場所に流出させます。サンプルポリシーについては、このトピックの最初を参照してください。

現在の例では、444455556666, にクロスアカウントアクセスが許可された後、444455556666 が独自のaccount のカタログ ehms を使用して、アカウント 111122223333 で定義されたテーブルをクエリできます。

次の例では、SQLワークベンチプロファイル perf-test-1 は、アカウント 444455556666 用です。クエリでは、カタログ ehms を使用して、Hive メタストアとアカウント 111122223333 の Amazon S3データにアクセスします。

Athena Federated Query (Preview) を許可する IAM アクセス許可ポリシーの例このトピックのアクセス許可ポリシーの例は、使用可能な必須アクションとそれらのアクションが許可されるリソースを示しています。これらのポリシーを IAM アイデンティティにアタッチする前に、これらのポリシーを慎重に検討し、要件に従って変更してください。

ポリシーを IAM アイデンティティにアタッチする方法については、「IAM ユーザーガイド」の「IAM IDアクセス許可の追加と削除」を参照してください。

• Example Policy to Allow an IAM Principal to Run and Return Results Using Athena Federated Query(Preview) (p. 265)

• Example Policy to Allow an IAM Principal to Create a Data Source Connector (p. 267)

Example – 許可する IAM を使用して実行して結果を返すプリンシパル Athena Federated Query(Preview)

次の ID ベースのアクセス許可ポリシーは、ユーザーまたは他の IAM プリンシパルが Athena FederatedQuery (Preview) を使用するために必要なアクションを許可します。これらのアクションの実行が許可されているプリンシパルは、フェデレーティッドデータソースに関連付けられた Athena カタログを指定するクエリを実行できます。

{ "Version": "2012-10-17", "Statement": [

265

Page 275: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena Federated Query (Preview) へのアクセスを許可する

{ "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "athena:GetWorkGroup", "s3:PutObject", "s3:GetObject", "athena:StartQueryExecution", "s3:AbortMultipartUpload", "lambda:InvokeFunction", "athena:CancelQueryExecution", "athena:StopQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:athena:*:MyAWSAcctId:workgroup/AmazonAthenaPreviewFunctionality", "arn:aws:s3:::MyQueryResultsBucket/*", "arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*", "arn:aws:lambda:*:MyAWSAcctId:function:OneAthenaLambdaFunction", "arn:aws:lambda:*:MyAWSAcctId:function:AnotherAthenaLambdaFunction" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "athena:ListWorkGroups", "Resource": "*" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::MyLambdaSpillBucket" } ]}

アクセス許可の説明

使用可能なアクション 説明

"athena:StartQueryExecution", "athena:GetQueryResults", "athena:GetWorkGroup", "athena:CancelQueryExecution", "athena:StopQueryExecution", "athena:GetQueryExecution",

AmazonAthenaPreviewFunctionality ワークグループでクエリの実行に必要な Athena アクセス許可。

"s3:PutObject","s3:GetObject","s3:AbortMultipartUpload"

s3:PutObject およびs3:AbortMultipartUpload クエリー結果バケットのすべてのサブフォルダへのクエリー結果の書き込みを許可します。arn:aws:s3:::MyQueryResultsBucket/* リソース識別子、ここで MyQueryResultsBucketは Athena クエリ結果バケット。詳細については、クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111) を参照してください。

266

Page 276: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena Federated Query (Preview) へのアクセスを許可する

使用可能なアクション 説明s3:GetObject として指定されたリソースのクエリ結果とクエリ履歴の読み取りを許可arn:aws:s3:::MyQueryResultsBucket、ここで、MyQueryResultsBucket は Athena クエリ結果バケット。

s3:GetObject また、 として指定されたリソースからの読み取りも許可されます。"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"、ここで、MyLambdaSpillPrefix は、 Lambda 関数または呼び出される関数。

"lambda:InvokeFunction"クエリが Resource ブロックで指定された AWS Lambda 関数の AWS Lambda 関数を呼び出すことを許可します。たとえば、arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunction、ここで、MyAthenaLambdaFunction は、Lambda 関数を呼び出します。例に示すように、複数の関数を指定できます。

Example – 許可する IAM プリンシパルによるデータ ソース コネクタの作成

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:ListVersionsByFunction", "iam:CreateRole", "lambda:GetFunctionConfiguration", "iam:AttachRolePolicy", "iam:PutRolePolicy", "lambda:PutFunctionConcurrency", "iam:PassRole", "iam:DetachRolePolicy", "lambda:ListTags", "iam:ListAttachedRolePolicies", "iam:DeleteRolePolicy", "lambda:DeleteFunction", "lambda:GetAlias", "iam:ListRolePolicies", "iam:GetRole", "iam:GetPolicy", "lambda:InvokeFunction", "lambda:GetFunction", "lambda:ListAliases", "lambda:UpdateFunctionConfiguration", "iam:DeleteRole", "lambda:UpdateFunctionCode", "s3:GetObject", "lambda:AddPermission", "iam:UpdateRole", "lambda:DeleteFunctionConcurrency", "lambda:RemovePermission", "iam:GetRolePolicy",

267

Page 277: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena Federated Query (Preview) へのアクセスを許可する

"lambda:GetPolicy" ], "Resource": [ "arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*", "arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*", "arn:aws:iam::*:role/*", "arn:aws:iam::MyAWSAcctId:policy/*" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "cloudformation:CreateUploadBucket", "cloudformation:DescribeStackDriftDetectionStatus", "cloudformation:ListExports", "cloudformation:ListStacks", "cloudformation:ListImports", "lambda:ListFunctions", "iam:ListRoles", "lambda:GetAccountSettings", "ec2:DescribeSecurityGroups", "cloudformation:EstimateTemplateCost", "ec2:DescribeVpcs", "lambda:ListEventSourceMappings", "cloudformation:DescribeAccountLimits", "ec2:DescribeSubnets", "cloudformation:CreateStackSet", "cloudformation:ValidateTemplate" ], "Resource": "*" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "cloudformation:*", "Resource": [ "arn:aws:cloudformation:*:MyAWSAcctId:stack/aws-serverless-repository-MyCFStackPrefix*/*", "arn:aws:cloudformation:*:MyAWSAcctId:stack/serverlessrepo-MyCFStackPrefix*/*", "arn:aws:cloudformation:*:*:transform/Serverless-*", "arn:aws:cloudformation:*:MyAWSAcctId:stackset/aws-serverless-repository-MyCFStackPrefix*:*", "arn:aws:cloudformation:*:MyAWSAcctId:stackset/serverlessrepo-MyCFStackPrefix*:*" ] }, { "Sid": "VisualEditor3", "Effect": "Allow", "Action": "serverlessrepo:*", "Resource": "arn:aws:serverlessrepo:*:*:applications/*" } ]}

アクセス許可の説明

使用可能なアクション 説明

"lambda:CreateFunction","lambda:ListVersionsByFunction","lambda:GetFunctionConfiguration",

リソースとしてリストされている Lambda 関数の作成と管理を許可します。この例では、名前プレフィックスがリソース識別子で使用されます。

268

Page 278: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena UDF へのアクセスを許可する

使用可能なアクション 説明"lambda:PutFunctionConcurrency","lambda:ListTags","lambda:DeleteFunction","lambda:GetAlias","lambda:InvokeFunction","lambda:GetFunction","lambda:ListAliases","lambda:UpdateFunctionConfiguration","lambda:UpdateFunctionCode","lambda:AddPermission","lambda:DeleteFunctionConcurrency","lambda:RemovePermission","lambda:GetPolicy""lambda:GetAccountSettings","lambda:ListFunctions","lambda:ListEventSourceMappings",

arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*、ここで、MyAthenaLambdaFunctionsPrefixは、次のグループの名前で使用される共有プレフィックスです。 Lambda 個別にリソースとして指定する必要はありません。1 つ以上の Lambda関数リソースを指定できます。

"s3:GetObject"バケットの読み取りが可能 AWS ServerlessApplication Repository リソース識別子で指定されているとおりに必要です。arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*. このバケットは、アカウントに固有のものである場合があります。

"cloudformation:*"作成と管理を可能にします。 AWSCloudFormation リソースによって指定されたスタック MyCFStackPrefix. これらのスタックとスタックセットは、 AWS Serverless ApplicationRepository コネクターと UDFs.

"serverlessrepo:*"リソース IDarn:aws:serverlessrepo:*:*:applications/* によって指定された AWS Serverless ApplicationRepository でアプリケーションの検索、表示、公開、および更新を許可します。

Amazon Athena User Defined Functions (UDF) を許可する IAM アクセス許可ポリシーの例このトピックのアクセス許可ポリシーの例は、使用可能な必須アクションとそれらのアクションが許可されるリソースを示しています。同様のアクセス許可ポリシーを IAM ID にアタッチする前に、これらのポリシーを慎重に検討し、要件に従って変更してください。

• Example Policy to Allow an IAM Principal to Run and Return Queries that Contain an Athena UDFStatement (p. 269)

• Example Policy to Allow an IAM Principal to Create an Athena UDF (p. 271)

Example – 許可する IAM プリンシパルは、 Athena UDF 明細書

次の ID ベースのアクセス許可ポリシーは、ユーザーまたは他の IAM プリンシパルが Athena UDF ステートメントを使用するクエリを実行するために必要なアクションを許可します。

{

269

Page 279: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena UDF へのアクセスを許可する

"Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "lambda:InvokeFunction", "athena:GetQueryResults", "s3:ListMultipartUploadParts", "athena:GetWorkGroup", "s3:PutObject", "s3:GetObject", "s3:AbortMultipartUpload", "athena:CancelQueryExecution", "athena:StopQueryExecution", "athena:GetQueryExecution", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:athena:*:MyAWSAcctId:workgroup/AmazonAthenaPreviewFunctionality", "arn:aws:s3:::MyQueryResultsBucket/*", "arn:aws:lambda:*:MyAWSAcctId:function:OneAthenaLambdaFunction", "arn:aws:lambda:*:MyAWSAcctId:function:AnotherAthenaLambdaFunction" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "athena:ListWorkGroups", "Resource": "*" } ]}

アクセス許可の説明

使用可能なアクション 説明

"athena:StartQueryExecution", "athena:GetQueryResults", "athena:GetWorkGroup", "athena:CancelQueryExecution", "athena:StopQueryExecution", "athena:GetQueryExecution",

AmazonAthenaPreviewFunctionality ワークグループでクエリの実行に必要な Athena アクセス許可。

"s3:PutObject","s3:GetObject","s3:AbortMultipartUpload"

s3:PutObject およびs3:AbortMultipartUpload クエリー結果バケットのすべてのサブフォルダへのクエリー結果の書き込みを許可します。arn:aws:s3:::MyQueryResultsBucket/* リソース識別子、ここで MyQueryResultsBucketは Athena クエリ結果バケット。詳細については、クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111) を参照してください。

s3:GetObject として指定されたリソースのクエリ結果とクエリ履歴の読み取りを許可arn:aws:s3:::MyQueryResultsBucket、ここで、MyQueryResultsBucket は Athena クエリ結果バケット。詳細については、クエリ結果、出

270

Page 280: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena UDF へのアクセスを許可する

使用可能なアクション 説明力ファイル、クエリ履歴の使用 (p. 111) を参照してください。

s3:GetObject また、 として指定されたリソースからの読み取りも許可されます。"arn:aws:s3:::MyLambdaSpillBucket/MyLambdaSpillPrefix*"、ここで、MyLambdaSpillPrefix は、 Lambda 関数または呼び出される関数。

"lambda:InvokeFunction"クエリが Resource ブロックで指定された AWS Lambda 関数を呼び出すことを許可します。たとえば、arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunction、ここで、MyAthenaLambdaFunction は、Lambda 関数を呼び出します。例に示すように、複数の関数を指定できます。

Example – 許可する IAM プリンシパルが Athena UDF

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:ListVersionsByFunction", "iam:CreateRole", "lambda:GetFunctionConfiguration", "iam:AttachRolePolicy", "iam:PutRolePolicy", "lambda:PutFunctionConcurrency", "iam:PassRole", "iam:DetachRolePolicy", "lambda:ListTags", "iam:ListAttachedRolePolicies", "iam:DeleteRolePolicy", "lambda:DeleteFunction", "lambda:GetAlias", "iam:ListRolePolicies", "iam:GetRole", "iam:GetPolicy", "lambda:InvokeFunction", "lambda:GetFunction", "lambda:ListAliases", "lambda:UpdateFunctionConfiguration", "iam:DeleteRole", "lambda:UpdateFunctionCode", "s3:GetObject", "lambda:AddPermission", "iam:UpdateRole", "lambda:DeleteFunctionConcurrency", "lambda:RemovePermission", "iam:GetRolePolicy", "lambda:GetPolicy" ], "Resource": [

271

Page 281: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena UDF へのアクセスを許可する

"arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*", "arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/*", "arn:aws:iam::*:role/*", "arn:aws:iam::MyAWSAcctId:policy/*" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "cloudformation:CreateUploadBucket", "cloudformation:DescribeStackDriftDetectionStatus", "cloudformation:ListExports", "cloudformation:ListStacks", "cloudformation:ListImports", "lambda:ListFunctions", "iam:ListRoles", "lambda:GetAccountSettings", "ec2:DescribeSecurityGroups", "cloudformation:EstimateTemplateCost", "ec2:DescribeVpcs", "lambda:ListEventSourceMappings", "cloudformation:DescribeAccountLimits", "ec2:DescribeSubnets", "cloudformation:CreateStackSet", "cloudformation:ValidateTemplate" ], "Resource": "*" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "cloudformation:*", "Resource": [ "arn:aws:cloudformation:*:MyAWSAcctId:stack/aws-serverless-repository-MyCFStackPrefix*/*", "arn:aws:cloudformation:*:MyAWSAcctId:stack/serverlessrepo-MyCFStackPrefix*/*", "arn:aws:cloudformation:*:*:transform/Serverless-*", "arn:aws:cloudformation:*:MyAWSAcctId:stackset/aws-serverless-repository-MyCFStackPrefix*:*", "arn:aws:cloudformation:*:MyAWSAcctId:stackset/serverlessrepo-MyCFStackPrefix*:*" ] }, { "Sid": "VisualEditor3", "Effect": "Allow", "Action": "serverlessrepo:*", "Resource": "arn:aws:serverlessrepo:*:*:applications/*" } ]}

アクセス許可の説明

使用可能なアクション 説明

"lambda:CreateFunction","lambda:ListVersionsByFunction","lambda:GetFunctionConfiguration","lambda:PutFunctionConcurrency","lambda:ListTags","lambda:DeleteFunction",

リソースとしてリストされている Lambda 関数の作成と管理を許可します。この例では、名前プレフィックスがリソース識別子で使用されます。arn:aws:lambda:*:MyAWSAcctId:function:MyAthenaLambdaFunctionsPrefix*、ここで、MyAthenaLambdaFunctionsPrefixは、次のグループの名前で使用される共有プレ

272

Page 282: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドML with Athena (Preview) のアクセスの許可

使用可能なアクション 説明"lambda:GetAlias","lambda:InvokeFunction","lambda:GetFunction","lambda:ListAliases","lambda:UpdateFunctionConfiguration","lambda:UpdateFunctionCode","lambda:AddPermission","lambda:DeleteFunctionConcurrency","lambda:RemovePermission","lambda:GetPolicy""lambda:GetAccountSettings","lambda:ListFunctions","lambda:ListEventSourceMappings",

フィックスです。 Lambda 個別にリソースとして指定する必要はありません。1 つ以上の Lambda関数リソースを指定できます。

"s3:GetObject"リソース識別子arn:aws:s3:::awsserverlessrepo-changesets-1iiv3xa62ln3m/* で指定された、AWS Serverless Application Repository が必要なバケットの読み取りを許可します。

"cloudformation:*"作成と管理を可能にします。 AWSCloudFormation リソースによって指定されたスタック MyCFStackPrefix. これらのスタックとスタックセットは、 AWS Serverless ApplicationRepository コネクターと UDFs.

"serverlessrepo:*"リソース IDarn:aws:serverlessrepo:*:*:applications/* によって指定された AWS Serverless ApplicationRepository でアプリケーションの検索、表示、公開、および更新を許可します。

ML with Athena (Preview) のアクセスの許可Athena ML クエリを実行する IAM プリンシパルに、使用する Sagemaker エンドポイントに対するsagemaker:invokeEndpoint アクションの実行を許可する必要があります。ユーザー ID にアタッチされた ID ベースのアクセス許可ポリシーに、次のようなポリシーステートメントを含めます。さらに、Athena アクションへのフルアクセスを付与する AmazonAthenaFullAccess 管理ポリシー (p. 245)、またはアクションのサブセットを許可する変更されたインラインポリシーをアタッチします。

置換 arn:aws:sagemaker:region:AWSAcctID:ModelEndpoint ARNまたは ARNs のモデルエンドポイントをクエリに使用します。詳細については、以下を参照してください。 のアクション、リソース、条件キー SageMaker を IAM ユーザーガイド.

{ "Effect": "Allow", "Action": [ "sagemaker:invokeEndpoint" ], "Resource": "arn:aws:sagemaker:us-west-2:123456789012:workteam/public-crowd/default"}

273

Page 283: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena API へのフェデレーションアクセスの有効化

Athena API へのフェデレーションアクセスの有効化このセクションでは、組織のユーザーまたはクライアントアプリケーションが Amazon Athena API オペレーションを呼び出すことができるフェデレーションアクセスについて説明します。この場合、組織のユーザーは Athena に直接アクセスすることはできません。代わりに、AWS 外部の Microsoft ActiveDirectory でユーザーの認証情報を管理します。Active Directory は SAML 2.0 (Security Assertion MarkupLanguage 2.0) をサポートしています。

このシナリオでユーザーを認証するには、Active Directory Federation Services (ADFS) 3.0 にアクセスし、クライアントアプリケーションから Athena API オペレーションを呼び出せる必要があるため、SAML2.0 をサポートする JDBC または ODBC ドライバーを使用します。

SAML 2.0 サポートの詳細については、 AWS、参照 SAML 2.0 フェデレーションについて を IAM ユーザーガイド.

Note

Athena API へのフェデレーションアクセスは、Windows Server に含まれる特定タイプの ID プロバイダー (IdP)、Active Directory Federation Service (ADFS 3.0) に対してサポートされています。アクセスは、SAML 2.0 をサポートするバージョンの JDBC や ODBC ドライバーを通じて確立されます。詳細については、「JDBC ドライバーを介した Athena の使用 (p. 72)」および「ODBCでの Amazon Athena との接続 (p. 73)」を参照してください。

トピック• 開始する前に (p. 274)• アーキテクチャ図 (p. 274)• 手順: へのSAMLベースの連携アクセス Athena API(API) (p. 275)

開始する前に開始する前に、以下の前提条件を完了します。

• 組織内で、ADFS 3.0を IdP.• Athena へのアクセスに使用されるクライアントで、最新バージョンの JDBC または ODBC ドライバー

をインストールして設定します。そのドライバーには、SAML 2.0 と互換性のあるフェデレーションアクセスのサポートが含まれている必要があります。詳細については、「JDBC ドライバーを介したAthena の使用 (p. 72)」および「ODBC での Amazon Athena との接続 (p. 73)」を参照してください。

アーキテクチャ図次の図は、このプロセスを示したものです。

274

Page 284: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena API へのフェデレーションアクセスの有効化

1. 組織内のユーザーが JDBC または ODBC ドライバーを使用してクライアント アプリケーションを使用して、組織の IdP. [ IdP ADFS 3.0です

2. [ IdP は、組織の ID ストアである Active Directory に対してユーザーを認証します。3. [ IdP ユーザーに関する情報を使用して SAML アサーションを作成し、JDBC または ODBC ドライバー

を介してクライアント アプリケーションに送信します。4. JDBC または ODBC ドライバーは、 AWS Security Token Service AssumeRoleWithSAML API 操作。次

のパラメータを渡します。• SAML プロバイダーの ARN• 引き受けるロールの ARN。• _からのSAMLアサーション IdP

詳細については、以下を参照してください。 AssumeRoleWithSAML」の AWS Security Token ServiceAPI リファレンス.

5. JDBC または ODBC ドライバーを介したクライアントアプリケーションへの API レスポンスには、一時的なセキュリティ認証情報が含まれています。

6. クライアントアプリケーションは一時的なセキュリティ認証情報を使用して Athena API オペレーションを呼び出し、ユーザーが Athena API オペレーションにアクセスできるようにします。

手順: へのSAMLベースの連携アクセス Athena API(API)この手順は、組織の IdP そして AWS アカウントを使用して、SAMLベースの連携アクセスを有効にし、Amazon Athena API 操作。

Athena API へのフェデレーションアクセスを有効にするには:

1. あなたの組織で、 AWS サービスプロバイダー(SP)として IdP. このプロセスは、 信頼できる団体の信頼. 詳細については、以下を参照してください。 SAML 2.0の設定 IdP 証明書利用者信頼 を IAM ユーザーガイド. このタスクの一部として、次のステップを実行します。

a. URL https://signin.aws.amazon.com/static/saml-metadata.xml からサンプル SAML メタデータドキュメントを取得します。

275

Page 285: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena API へのフェデレーションアクセスの有効化

b. あなたの組織の IdP (ADFS)で、 IdP アイデンティティプロバイダとして AWS. メタデータファイルには、発行元名、作成日、有効期限、AWS が組織からの認証レスポンス (アサーション) を検証するために使用するキーを含める必要があります。

2. IAM コンソールで、SAML ID プロバイダーのエンティティを作成します。詳細については、https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html の「IAM ユーザーガイドSAML ID プロバイダーの作成」を参照してください。このステップの一部として、以下の操作を行います。

a. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。b. によって作成されたSAMLメタデータ文書をアップロードします。 IdP (ADFS)をこの手順のス

テップ1で参照してください。3. [ IAM コンソール、1 つまたは複数の IAM 役割を IdP. 詳細については、以下を参照してください。

サードパーティ ID プロバイダの役割の作成 (連合) を IAM ユーザーガイド. このステップの一部として、以下の操作を行います。

• ロールのアクセス権限ポリシーで、AWS で組織のユーザーが実行できるアクションをリストします。

• ロールの信頼ポリシーで、この手順のステップ 2 でプリンシパルとして作成した SAML プロバイダーエンティティを設定します。

これにより、組織と AWS 間で信頼関係が確立されます。4. あなたの組織の IdP (ADFS)で、組織のユーザーまたはグループを IAM 役割。IAM ロールへのユー

ザーおよびグループのマッピングは、クレームルールとも呼ばれます。組織内の異なるユーザーおよびグループは、異なる IAM ロールにマッピングされる可能性がある点に注意してください。

ADFS でのマッピングの構成については、次のブログ記事を参照してください。フェデレーションの有効化: AWS Windows Active Directory、ADFS、SAML 2.0 の使用.

5. JDBC または ODBC ドライバーと SAML 2.0 のサポートをインストールして設定します。詳細については、「JDBC ドライバーを介した Athena の使用 (p. 72)」および「ODBC での Amazon Athena との接続 (p. 73)」を参照してください。

6. アプリケーションから JDBC または ODBC ドライバーへの接続文字列を指定します。アプリケーションが使用すべき接続文字列についての詳細は、 "Active Directory フェデレーションサービス (ADFS)資格情報プロバイダの使用" を JDBCドライバのインストールおよび構成ガイド、または ODBCDriver インストールおよび構成ガイド からPDF形式でダウンロードできます。 JDBC ドライバーを介した Athena の使用 (p. 72) および ODBC での Amazon Athena との接続 (p. 73) トピック。

以下に示しているのは、ドライバーに対する接続文字列の設定の概要です。

1. [ AwsCredentialsProviderClass configuration、com.simba.athena.iamsupport.plugin.AdfsCredentialsProvider ADFS 経由で SAML2.0 ベースの認証を使用することを示します。 IdP.

2. 対象 idp_host、ADFS のホスト名を指定します。 IdP サーバー。3. 対象 idp_port、ADFS のポート番号を指定します。 IdP SAMLアサーション要求をリッスンしま

す。4. UID および PWD で、AD ドメインユーザーの認証情報を提供します。Windows でドライバーを使

用する場合、UID および PWD が指定されていない場合、ドライバーは Windows マシンにログインしているユーザーの認証情報の取得を試みます。

5. 任意で設定 ssl_insecure ~ true. この場合、ドライバはADFSのSSL証明書の真正性をチェックしません。 IdP サーバー。設定先 true ADFSが IdP SSL証明書は、ドライバによって信頼されるように構成されていません。

6. (この手順のステップ 4 で説明しているように) Active Directory ドメインまたはグループの 1 つ以上の IAM ロールへのマッピングを有効にするには、JDBC または ODBC 接続の preferred_roleで、ドライバー接続のために引き受ける IAM ロール (ARN) を指定します。preferred_role の指

276

Page 286: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドログ記録とモニタリング

定はオプションであり、そのロールが、クレームルールに登録された最初のロールではない場合に役立ちます。

この手順の結果として、以下のアクションが実行されます。

1. JDBC または ODBC ドライバーは、 AWS STS AssumeRoleWithSAML をAPIに渡して、そのアサーションを渡す。 アーキテクチャ図 (p. 274).

2. AWS 役割を引き受けるリクエストが IdP SAMLプロバイダーエンティティで参照されます。3. リクエストが成功すると、 AWS STS AssumeRoleWithSAML API 操作は、一連の一時的なセキュ

リティ資格情報を返します。この一時セキュリティ資格情報は、クライアント アプリケーションが署名された要求を Athena.

これで、アプリケーションは、現在のユーザーの情報を取得し、プログラムで Athena にアクセスできます。

Athena のログ記録とモニタリングインシデントを検出し、インシデントの発生時にアラートを受け取り、それらのアラートに対応するには、Amazon Athena で以下のオプションを使用します。

• AWS CloudTrail で Athena をモニタリングする – AWS CloudTrail では、ユーザー、ロール、またはAWS のサービスによって Athena で実行されたアクションのレコードが提供されます。そのレコードには、Athena コンソールからの呼び出し、およびイベントとしての Athena API オペレーションのコード呼び出しが収集されます。これにより、Athena に対して行われたリクエスト、リクエスト元の IP アドレス、リクエストの実行者、リクエストの実行日時、および追加の詳細を判別できます。Athena を使用して CloudTrail のログファイルに対してクエリを実行し、洞察を得ることもできます。詳細については、「AWS CloudTrail ログのクエリ (p. 206)」および「CloudTrail SerDe (p. 379)」を参照してください。

• Athena で CloudWatch イベント を使用する – CloudWatch イベント によって AWS リソースの変更を説明するシステムイベントのほぼリアルタイムのストリームが配信されます。オペレーションの変更が発生すると、CloudWatch イベント は、その変更を認識し、その変更に応答して、必要であれば修正アクションを実行します。そのために、レスポンスメッセージを環境に送信し、機能をアクティブにし、変更を行って、状態情報を収集します。Athena で CloudWatch イベント を使用するには、Athena を介して CloudTrail API コールをトリガーするルールを作成します。詳細については、Amazon CloudWatchEvents ユーザーガイドの「CloudTrail を使用して AWS API コールでトリガーされる CloudWatch イベント ルールの作成」を参照してください。

• ワークグループを使用してユーザー、チーム、アプリケーション、またはワークロードを分離し、クエリの制限を設定して、クエリのコストを制御する – Amazon CloudWatch でクエリ関連のメトリクスを表示できます。スキャンデータ量の制限を設定することでクエリのコストを制御できます。しきい値を作成し、これらのしきい値に違反したときに Amazon SNS アラームなどのアクションがトリガーされるようにできます。大まかな手順については、「ワークグループの設定 (p. 333)」を参照してください。特定のワークグループへのアクセスをコントロールするには、リソースレベルの IAM アクセス許可を使用します。詳細については、「クエリを実行するためのワークグループの使用 (p. 331)」と「CloudWatch メトリクスとイベントによるコスト管理とクエリのモニタリング (p. 348)」を参照してください。

Amazon Athena のコンプライアンス検証サードパーティーの監査者は、複数の Amazon Athena コンプライアンスプログラムの一環として AWS のセキュリティとコンプライアンスを評価します。これらのプログラムには、SOC、PCI、FedRAMP などがあります。

277

Page 287: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド耐障害性

特定のコンプライアンスプログラムの対象となる AWS のサービスの一覧については、「コンプライアンスプログラム対象範囲内の AWS のサービス」を参照してください。一般的な情報については、「AWS コンプライアンスプログラム」を参照してください。

サードパーティーの監査レポートをダウンロードするには、AWS Artifact を使用します。詳細については、「AWS Artifact のレポートのダウンロード」を参照してください。

Athena サービスを使用する際のお客様のコンプライアンス責任は、データの機密性、貴社のコンプライアンス目的、および適用法規や規則によって決まります。AWS ではコンプライアンスに役立つ以下のリソースを用意しています。

• セキュリティおよびコンプライアンスのクイックスタートガイド – これらのデプロイメントガイドでは、アーキテクチャ上の考慮事項について説明し、セキュリティとコンプライアンスに重点を置いたベースライン環境を AWS にデプロイするための手順を説明します。

• HIPAA のセキュリティとコンプライアンスに関するホワイトペーパーを作成する – このホワイトペーパーでは、企業が AWS を使用して HIPAA 準拠のアプリケーションを作成する方法について説明します。

• AWS コンプライアンスのリソース – このワークブックとガイドのコレクションは、お客様の業界や場所に適用される場合があります。

• AWS Config – この AWS サービスでは、自社プラクティス、業界ガイドライン、および規制に対するリソースの設定の準拠状態を評価します。

• AWS Security Hub – この AWS サービスでは、AWS 内のセキュリティ状態を包括的に表示しており、セキュリティ業界の標準およびベストプラクティスへの準拠を確認するのに役立ちます。

Athena での耐障害性は、 AWS グローバルインフラストラクチャは AWS 地域と可用性ゾーン。 AWSリージョンは、物理的に分離され分離された複数の可用性ゾーンを提供します。これらのゾーンは、低レイテンシー、高スループット、冗長性の高いネットワークで接続されます。アベイラビリティーゾーンでは、アベイラビリティーゾーン間で中断することなく自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、および拡張性が優れています。

AWSのリージョンやアベイラビリティーゾーンの詳細については、AWSグローバルインフラストラクチャを参照してください。

Athena では、AWS グローバルインフラストラクチャに加えて、データの耐障害性とバックアップのニーズに対応できるように複数の機能を提供しています。

Athena サーバーレスなので、設定も管理もできない。 Athena は可用性が高く、複数の可用性ゾーンにわたって計算リソースを使用してクエリを実行し、特定の可用性ゾーンが到達できない場合、クエリを自動的に適切にルーティングします。Athena はその基となるデータストアとして Amazon S3 を使用しているため、データの可用性と耐久性が高まります。Amazon S3 は重要なデータを保存するための耐久性のあるインフラストラクチャを提供し、オブジェクトの 99.999999999% の耐久性を保つように設計されています。データは複数の施設間で冗長化され、各施設で複数のデバイスに保存されます。

Athena のインフラストラクチャセキュリティマネージド型サービスとして、Amazon Athena は、ホワイトペーパー「Amazon Web Services: AWS セキュリティプロセスの概要」に記載されている AWS グローバルネットワークセキュリティの手順で保護されています。

278

Page 288: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドインターフェイス VPC エンドポイントを使用して Amazon Athena に接続する

AWS が公開した API コールを使用して、ネットワーク経由で Athena にアクセスします。クライアントは TLS(Transport Layer Security)1.0 をサポートしている必要があります。TLS 1.2 以降が推奨されています。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE) などのPerfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。また、リクエストは、アクセスキー ID と、IAM プリンシパルに関連付けられているシークレットのアクセスキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

IAM ポリシーを使用して Athena オペレーションへのアクセスを制限します。Athena 管理ポリシー (p. 245)は使用しやすく、サービスの高度化に伴い必要になるアクションで自動的に更新されます。カスタマー管理のインラインポリシーでは、よりきめ細かな Athena アクションを指定することで、ポリシーを微調整できます。Amazon S3 のデータの場所への適切なアクセスを許可します。Amazon S3へのアクセスを許可する方法の詳細とシナリオについては、Amazon Simple Storage Service 開発者ガイド「チュートリアル例: アクセスの管理」を参照してください。許可する Amazon S3 アクションの詳細と例については、「クロスアカウントアクセス (p. 256)」のバケットポリシー例を参照してください。

トピック• インターフェイス VPC エンドポイントを使用して Amazon Athena に接続する (p. 279)

インターフェイス VPC エンドポイントを使用してAmazon Athena に接続するインターネットを介さずに、Virtual Private Cloud (VPC) のインターフェイス VPC エンドポイント (AWSPrivateLink) を使用して、Athena に直接接続できます。インターフェイス VPC エンドポイントを使用すると、VPC と Athena の間の通信は完全に AWS ネットワーク内で実施されます。各 VPC エンドポイントは、VPC サブネット内の 1 つ以上の Elastic Network Interfaces (ENI) とプライベート IP アドレスで表されます。

インターフェイス VPC エンドポイントは VPC を Athena に直接接続します。その際、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続を使用しません。VPC のインスタンスは、パブリック IP アドレスがなくても Athena API と通信できます。

VPC 経由で Athena を使用するには、VPC 内にあるインスタンスから接続するか、Amazon Virtual PrivateNetwork (VPN) または AWS Direct Connect を使用してプライベートネットワークを VPC に接続する必要があります。Amazon VPN については、Amazon Virtual Private Cloud ユーザーガイドの「VPN 接続」を参照してください。AWS Direct Connect の詳細については、AWS Direct Connect ユーザーガイドの「コネクションの作成」を参照してください。

Note

Athena 用の AWS PrivateLink は、## (#######) リージョンではサポートされません。Athenaは、Amazon VPC および Athena の両方が利用可能な他のすべての AWS リージョンで VPC エンドポイントをサポートします。

インターフェイス VPC エンドポイントを作成し、AWS コンソールか AWS Command Line Interface(AWS CLI) コマンドのいずれかを使用して、Athena に接続できます。詳細については、「インターフェイスエンドポイントの作成」を参照してください。

インターフェイス VPC エンドポイントを作成した後、エンドポイントのプライベート DNS ホスト名を有効にすると、デフォルトの Athena エンドポイント (https://athena.Region.amazonaws.com) はお客様のVPC エンドポイントに解決されます。

プライベート DNS ホスト名を有効にしない場合、Amazon VPC は次の形式で使用できる DNS エンドポイント名を提供します。

279

Page 289: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド設定と脆弱性の分析

VPC_Endpoint_ID.athena.Region.vpce.amazonaws.com

詳細については、Amazon VPC ユーザーガイド の「インターフェイス VPC エンドポイント (AWSPrivateLink)」を参照してください。

Athena は、VPC 内のすべての API アクションへの呼び出しをサポートしています。

Athena の VPC エンドポイントポリシーを作成するAthena の Amazon VPC エンドポイントのポリシーを作成して、以下を指定できます。

• アクションを実行できるプリンシパル。• 実行可能なアクション。• このアクションを実行できるリソース。

詳細については、Amazon VPC ユーザーガイドの「VPC エンドポイントによるサービスのアクセスコントロール」を参照してください。

Example Athena アクションの – VPC エンドポイントポリシー

このポリシーがアタッチされているエンドポイントは、記載されている athena アクションへのアクセス権限を workgroupA のすべてのプリンシパルに付与します。

{ "Statement": [{ "Principal": "*", "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:RunQuery", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:CancelQueryExecution", "athena:ListWorkGroups", "athena:GetWorkGroup", "athena:TagResource" ], "Resource": [ "arn:aws:athena:us-west-1:AWSAccountId:workgroup/workgroupA" ] }]}

Athena での設定と脆弱性の分析Athena はサーバーレスであるため、お客様が設定や管理を行うインフラストラクチャはありません。AWS がゲストオペレーティングシステム (OS) やデータベースへのパッチの適用、ファイアウォールの設定、災害対策などの基本的なセキュリティタスクを処理します。これらの手順は適切な第三者によって確認され、証明されています。詳細については、以下のリソースを参照してください。

• 責任共有モデル• アマゾン ウェブ サービス: セキュリティプロセスの概要 (ホワイトペーパー)

280

Page 290: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena を Lake Formation に使用する

Athena を使用して AWS Lake Formation に登録されたデータをクエリする

AWS Lake Formation では、Athena クエリを使用して Amazon S3 に保存されたデータを読み取るときに、データベース、テーブル、および列レベルのアクセスポリシーを定義して適用できます。LakeFormation は、Amazon S3 に保存されたデータに対する認証およびガバナンスレイヤーを提供します。Lake Formation でアクセス許可の階層を使用して、データベース、テーブル、列などのデータカタログオブジェクトを読み取るためのアクセス許可を付与または取り消すことができます。Lake Formationは、アクセス許可の管理を簡素化し、データにきめ細かなアクセスコントロール (FGAC) を実装できるようにします。

Athena を使用して、Lake Formation に登録されているデータと Lake Formation に登録されていないデータの両方をクエリできます。

Lake Formation アクセス許可は、Athena を使用して、Lake Formation に登録された Amazon S3 の場所からソースデータをクエリするときに適用されます。Lake Formation アクセス許可は、登録された AmazonS3 データの場所を指すデータベースとテーブルを作成するときにも適用されます。Lake Formation を使用して登録されたデータで Athena を使用するには、AWS Glue データカタログ を使用するように Athenaを設定する必要があります。

Lake Formation アクセス許可は、Amazon S3 にオブジェクトを書き込むときには適用されません。また、Amazon S3 に保存されているデータや、Lake Formation に登録されていないメタデータをクエリするときにも適用されません。Amazon S3 のソースデータと、Lake Formation に登録されていないメタデータの場合、アクセスは Amazon S3 および AWS Glue アクションの IAM アクセス許可ポリシーによって決まります。Amazon S3 の Athena のクエリ結果の場所は Lake Formation に登録できません。また、Amazon S3 の IAM アクセス許可ポリシーがアクセスを制御します。さらに、Lake Formation アクセス許可は、Athena クエリ履歴には適用されません。Athena ワークグループを使用して、クエリ履歴へのアクセスを制御できます。

詳細情報については、 Lake Formation、参照 Lake Formation FAQs そして AWS Lake Formation 開発者ガイド.

トピック• Athena が、Lake Formation に登録されたデータにアクセスする方法 (p. 281)• Athena を使用して Lake Formation に登録されたデータをクエリするときの考慮事項と制限 (p. 283)• Lake Formation および Athena ユーザーアクセス許可の管理 (p. 285)• 既存のデータベースとテーブルへの Lake Formation のアクセス許可の適用 (p. 287)• 使用 Lake Formation そして Athena JDBC および ODBC ドライバー、フェデレーション アクセス用

Athena (p. 288)

Athena が、Lake Formation に登録されたデータにアクセスする方法このセクションで説明するアクセスワークフローは、Amazon S3 の場所および Lake Formation に登録されているメタデータオブジェクトに対して Athena クエリを実行する場合にのみ適用されます。詳細については、以下を参照してください。 データレイクの登録 を AWS Lake Formation Developer Guide. LakeFormation 管理者は、データの登録に加えて、Data Catalog のメタデータおよび Amazon S3 のデータ場所へのアクセスを許可または取り消す Lake Formation のアクセス許可を適用します。詳細については、以下を参照してください。 メタデータおよびデータに対するセキュリティおよびアクセス制御 を AWS LakeFormation Developer Guide.

Athena プリンシパル (ユーザー、グループ、またはロール) が Lake Formation を使用して登録されたデータでクエリを実行するたびに、Lake Formation はプリンシパルに、クエリに応じてデータベース、テーブ

281

Page 291: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドLake Formation データアクセスの仕組み

ル、Amazon S3 の場所に対する適切な Lake Formation のアクセス許可があることを確認します。プリンシパルにアクセス権がある場合、Lake Formation は一時的な認証情報を Athena に発行し、クエリが実行されます。

次の図は、上記のフローを示しています。

次の図は、Lake Formation で Amazon S3 の場所が登録されているテーブルに対する仮定の SELECT クエリについて、Athena でのクエリごとの認証情報発行の仕組みを示しています。

1. プリンシパルは Athena で SELECT クエリを実行します。2. Athena クエリを分析し、チェックします。 Lake Formation プリンシパルにテーブル、テーブルパー

ティション(該当する場合)、テーブル列へのアクセス権が与えられているかどうかを確認する権限。3. プリンシパルにアクセス権がある場合、Athena は Lake Formation から認証情報をリクエストします。

プリンシパルにアクセス権がない場合、Athena はアクセス拒否エラーを発行します。4. Lake Formation は、Amazon S3 のデータを読み取り、Data Catalog のメタデータにアクセスするとき

に使用する認証情報を Athena に発行します。5. Lake Formation は、クエリ結果を Athena に返します。クエリが完了すると、Athena は認証情報を破棄

します。

282

Page 292: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド考慮事項と制約事項

Athena を使用して Lake Formation に登録されたデータをクエリするときの考慮事項と制限Athena を使用して Lake Formation に登録されたデータをクエリするときは、以下の点を考慮します。追加情報については、以下を参照してください。 の既知の問題 AWS Lake Formation を AWS LakeFormation Developer Guide.

考慮事項と制約事項• Avro およびカスタムで一部の状況で、権限のないユーザーに列メタデータを表示 SerDe (p. 283)• ビューの Lake Formation アクセス許可の使用 (p. 283)• Athena Lake Formation に登録されていない Amazon S3 のクエリ結果の場所 (p. 283)• Athena Workgroups を使用してクエリ履歴へのアクセスを制限する (p. 284)• クロスアカウント Data Catalog アクセス (p. 284)• Lake Formation に登録され、CSE-KMS で暗号化されている Amazon S3 の場所のクエリを Athena で

実行できない (p. 284)• Lake Formation に登録されたパーティション分割されたデータの場所は、テーブルのサブディレクト

リ内である必要がある (p. 285)• Create Table As Select (CTAS) クエリでは Amazon S3 書き込みアクセス許可が必要 (p. 285)

Avro およびカスタムで一部の状況で、権限のないユーザーに列メタデータを表示 SerDeLake Formation の列レベルの承認により、ユーザーは Lake Formation のアクセス許可のない列のデータにアクセスできなくなります。ただし、状況によっては、ユーザーは、データに対するアクセス許可がない列を含め、テーブル内のすべての列を説明するメタデータにアクセスできます。

これは、列メタデータがAvroストレージ形式またはカスタムシリアライザ/デシリアライザ(SerDe)を使用してテーブルのテーブルプロパティに格納され、テーブルスキーマがテーブルプロパティと SerDe 定義。Lake Formation で Athena を使用する場合は、Lake Formation に登録するテーブルプロパティのコンテンツを確認し、可能な場合はテーブルプロパティに保存される情報を制限して、重要なメタデータがユーザーに表示されないようにすることをお勧めします。

ビューの Lake Formation アクセス許可の使用Lake Formation に登録されたデータの場合、Athena ユーザーは、VIEW の基になっているテーブル、列、および Amazon S3 ソースデータの場所に対する Lake Formation のアクセス許可がある場合にのみ、VIEW を作成できます。後 VIEW は に作成されます Athena、 Lake Formation 権限は、 VIEW. 列レベルの権限は、 VIEW. 次のユーザー: Lake Formation 権限を VIEW ただし、ビューの基になるテーブルと列に対する権限は持っていません。 VIEW データを照会します。ただし、このアクセス許可の組み合わせを持つユーザーは、DESCRIBE VIEW、SHOW CREATE VIEW、および SHOW COLUMNS を使用して VIEW メタデータを表示できます。このため、各 VIEW の Lake Formation アクセス許可は、必ず基盤となるテーブルのアクセス許可に合わせてください。

Athena Lake Formation に登録されていない Amazon S3 のクエリ結果の場所The query results locations in Amazon S3 for Athena cannot be registered with Lake Formation. LakeFormation permissions do not limit access to these locations. Unless you limit access, Athena users canaccess query result files and metadata when they do not have Lake Formation permissions for the data.To avoid this, we recommend that you use workgroups to specify the location for query results and alignworkgroup membership with Lake Formation permissions. You can then use IAM permissions policies to

283

Page 293: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド考慮事項と制約事項

limit access to query results locations. For more information about query results, see クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111).

Athena Workgroups を使用してクエリ履歴へのアクセスを制限するAthena query history exposes a list of saved queries and complete query strings. Unless you useworkgroups to separate access to query histories, Athena users who are not authorized to query datain Lake Formation are able to view query strings run on that data, including column names, selectioncriteria, and so on. We recommend that you use workgroups to separate query histories, and align Athenaworkgroup membership with Lake Formation permissions to limit access. For more information, see ワークグループを使用してクエリのアクセスとコストを制御する (p. 331).

クロスアカウント Data Catalog アクセス別のアカウントのデータカタログにアクセスするには、次のいずれかの方法を使用できます。

• でのクロスアカウントアクセスの設定 Lake Formation.• _を使用 Athena クロスアカウント AWSラムダ クエリーを に連携させる関数 Data Catalog 選択するこ

とができます。

でのクロスアカウントアクセスの設定 Lake Formation

AWS Lake Formation 1つのアカウントを使用して、中央管理 Data Catalog. この機能を使用して、 クロスアカウントアクセス ~ Data Catalog メタデータと基本データです。たとえば、所有者アカウントは別の(受信者)アカウントに権限を与えることができます。 SELECT 許可をテーブルに付与します。共有データベースまたは共有テーブルを Athena クエリ エディター、 リソース リンクの作成 () Lake Formation 共有データベースまたはテーブルへ。受信者アカウントが Lake Formation オーナーのテーブルをクエリします。 CloudTrail は、受信者アカウントと所有者アカウントの両方のログにデータアクセスイベントを追加します。

詳細については、 AWS Lake Formation 開発者ガイド:

クロスアカウントアクセス

レイクフォーメーションでのリソースリンクの仕組み

クロスアカウント CloudTrail ロギング

を使用する Athena クロスアカウント Lambda 機能

以下を使用できます。 Athena ~ 外部Hiveメタストアに接続 (p. 34). Hiveメタストア機能は、 Lambda クエリーを に連携させる関数 Data Catalog 選択することができます。この同じ機能により、カタログクエリを Data Catalog 別のアカウントで

手順は、 を参照してください。 Amazon Athenaを使用したクロスアカウントAWS Glueデータカタログアクセス を AWS ビッグデータ・ブログ。

Lake Formation に登録され、CSE-KMS で暗号化されているAmazon S3 の場所のクエリを Athena で実行できないLake Formation で 登録され、 AWS KMS カスタマー管理のキー (CSE-KMS) でクライアント側暗号化(CSE) を使用して暗号化されている Amazon S3 データの場所のクエリは、Athena を使用して実行できません。その場合でも、Athena を使用して、Lake Formation に登録されていない CSE-KMS Amazon S3 暗号化データの場所のクエリを実行し、IAM ポリシーを使用してアクセスを許可または拒否できます。

284

Page 294: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドユーザーアクセス許可の管理

Lake Formation に登録されたパーティション分割されたデータの場所は、テーブルのサブディレクトリ内である必要があるLake Formation に登録されたパーティション分割されたテーブルは、Amazon S3 のテーブルのサブディレクトリであるディレクトリにパーティション分割されたデータを持っている必要があります。たとえば、場所が s3://mydata/mytable でパーティションが s3://mydata/mytable/dt=2019-07-11、s3://mydata/mytable/dt=2019-07-12 などのテーブルは Lake Formation に登録し、Athena を使用してクエリできます。一方、場所が s3://mydata/mytable で、パーティションが s3://mydata/dt=2019-07-11、s3://mydata/dt=2019-07-12 などにあるテーブルを LakeFormation に登録することはできません。Lake Formation 外部の IAM アクセス許可を使用して、これらのテーブルのアクセスをセットアップし、Athena でテーブルをクエリできます。詳細については、データのパーティション分割 (p. 93) を参照してください。

Create Table As Select (CTAS) クエリでは Amazon S3 書き込みアクセス許可が必要Create Table As Statements (CTAS) require write access to the Amazon S3 location of tables. To runCTAS queries on data registered with Lake Formation, Athena users must have IAM permissions to write tothe table Amazon S3 locations in addition to the appropriate Lake Formation permissions to read the datalocations. For more information, see クエリ結果からのテーブルの作成 (CTAS) (p. 126).

Lake Formation および Athena ユーザーアクセス許可の管理Lake Formation は、Lake Formation に登録されている Amazon S3 データストアをクエリするための認証情報を発行します。以前に IAM ポリシーを使用して Amazon S3 のデータ場所を読み取るアクセス許可を許可または拒否した場合は、代わりに Lake Formation アクセス許可を使用できます。ただし、他の IAMアクセス許可も必要です。

以下のセクションでは、Athena を使用するために必要なアクセス許可をまとめ、Lake Formation に登録されたデータをクエリできます。詳細については、以下を参照してください。 セキュリティ AWS LakeFormation を AWS Lake Formation Developer Guide.

アクセス許可の概要• Lake Formation および Athena に対するアイデンティティベースのアクセス許可 (p. 285)• Athena クエリ結果の場所に対する Amazon S3 のアクセス許可 (p. 286)• Athena 履歴をクエリするワークグループメンバーシップ (p. 286)• Lake Formation データへのアクセス許可 (p. 286)• Amazon S3 の場所に書き込む IAM のアクセス許可 (p. 286)• 暗号化されたデータ、メタデータ、および Athena クエリ結果に対するアクセス許可 (p. 287)• 外部アカウントの Amazon S3 バケットに対するリソースベースのアクセス許可 (オプショ

ン) (p. 287)

Lake Formation および Athena に対するアイデンティティベースのアクセス許可Athena を使用して Lake Formation に登録されたデータをクエリするすべてのユーザーには、lakeformation:GetDataAccess アクションを許可する IAM のアクセス許可ポリシーが必要です。AmazonAthenaFullAccess 管理ポリシー (p. 245)では、このアクションが許可されます。インラインポリシーを使用する場合は、このアクションを許可するようにアクセス許可ポリシーを更新してください。

285

Page 295: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドユーザーアクセス許可の管理

Lake Formation では、データレイク管理者には、データベースやテーブルなどのメタデータオブジェクトを作成し、他のユーザーに Lake Formation アクセス許可を付与して、新しい Amazon S3 の場所を登録するアクセス許可があります。新しい場所を登録するには、Lake Formation のサービスにリンクされたロールへのアクセス許可が必要です。詳細については、以下を参照してください。 データレイク管理者の作成および のサービスリンク済みロール許可 Lake Formation を AWS Lake Formation 開発者ガイド.

Lake Formation ユーザーは、Athena を使用し、データレイク管理者によって付与された Lake Formationのアクセス許可に基づいて、データベース、テーブル、テーブル列、および基盤となる Amazon S3 データストアをクエリできます。ユーザーは、データベースやテーブルを作成したり、Lake Formation で新しい Amazon S3 の場所を登録したりすることはできません。詳細については、以下を参照してください。データレイクユーザーの作成 を AWS Lake Formation 開発者ガイド.

Athena では、アイデンティティベースのアクセス許可ポリシー (Athena ワークグループ用を含む) は、引き続き AWS アカウントユーザーの Athena アクションへのアクセスを制御します。さらに、Athena ドライバーで使用できる SAML ベースの認証を通じて、フェデレーティッドアクセスが提供される場合があります。詳細については、「ワークグループを使用してクエリのアクセスとコストを制御する (p. 331)」、「 ワークグループにアクセスするための IAM ポリシー (p. 334)」、および「Athena API へのフェデレーションアクセスの有効化 (p. 274)」を参照してください。

詳細については、以下を参照してください。 付与 Lake Formation 許可 を AWS Lake FormationDeveloper Guide.

Athena クエリ結果の場所に対する Amazon S3 のアクセス許可The query results locations in Amazon S3 for Athena cannot be registered with Lake Formation. LakeFormation permissions do not limit access to these locations. Unless you limit access, Athena users canaccess query result files and metadata when they do not have Lake Formation permissions for the data.To avoid this, we recommend that you use workgroups to specify the location for query results and alignworkgroup membership with Lake Formation permissions. You can then use IAM permissions policies tolimit access to query results locations. For more information about query results, see クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111).

Athena 履歴をクエリするワークグループメンバーシップAthena query history exposes a list of saved queries and complete query strings. Unless you useworkgroups to separate access to query histories, Athena users who are not authorized to query datain Lake Formation are able to view query strings run on that data, including column names, selectioncriteria, and so on. We recommend that you use workgroups to separate query histories, and align Athenaworkgroup membership with Lake Formation permissions to limit access. For more information, see ワークグループを使用してクエリのアクセスとコストを制御する (p. 331).

Lake Formation データへのアクセス許可Athena ユーザーは、Lake Formation を使用するベースラインのアクセス許可に加えて、クエリするリソースにアクセスするための Lake Formation アクセス許可を持っている必要があります。これらのアクセス許可は、Lake Formation 管理者によって付与および管理されます。詳細については、以下を参照してください。 メタデータおよびデータに対するセキュリティおよびアクセス制御 を AWS Lake Formation 開発者ガイド.

Amazon S3 の場所に書き込む IAM のアクセス許可Amazon S3 への Lake Formation のアクセス許可では、Amazon S3 に書き込むことはできません。CreateTable As Statements (CTAS) require write access to the Amazon S3 location of tables. To run CTASqueries on data registered with Lake Formation, Athena users must have IAM permissions to write to thetable Amazon S3 locations in addition to the appropriate Lake Formation permissions to read the datalocations. For more information, see クエリ結果からのテーブルの作成 (CTAS) (p. 126).

286

Page 296: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド既存のデータベースとテーブルへの

Lake Formation のアクセス許可の適用

暗号化されたデータ、メタデータ、および Athena クエリ結果に対するアクセス許可Amazon S3 の基になるソースデータと、Lake Formation に登録された Data Catalog のメタデータは暗号化できます。Athena を使用して Lake Formation に登録されたデータをクエリするときに、Athena がクエリ結果の暗号化を処理する方法に変更はありません。詳細については、「Amazon S3 に保存されたクエリ結果の暗号化 (p. 240)」を参照してください。

• ソースデータの暗号化 – Amazon S3 データの場所にあるソースデータの SSE-S3 および CSE-KMS 暗号化がサポートされています。SSE-KMS 暗号化はサポートされていません。Lake Formation に登録されている暗号化された Amazon S3 の場所をクエリする Athena ユーザーには、データを暗号化および復号するためのアクセス許可が必要です。要件の詳細については、「Amazon S3 の暗号化されたデータへのアクセス許可 (p. 239)」を参照してください。

• メタデータの暗号化 – Data Catalog でのメタデータの暗号化がサポートされています。Athena を使用するプリンシパルの場合、アイデンティティベースのポリシーで、メタデータの暗号化に使用されるキーに対して、"kms:GenerateDataKey"、"kms:Decrypt"、および "kms:Encrypt" アクションを許可する必要があります。詳細については、以下を参照してください。 を暗号化する Data Catalog をAWS Glue 開発者ガイド および 『グループ管理ガイド』の「暗号化されたメタデータへのアクセス」AWS Glue データカタログ (p. 255).

外部アカウントの Amazon S3 バケットに対するリソースベースのアクセス許可 (オプション)のクエリーを実行するには、 Amazon S3 リソースベースの IAM ポリシー(バケットポリシー)により、その場所へのアクセスを許可する必要があります。詳細については、Amazon S3 バケットへの Athena のクロスアカウントアクセス (p. 256) を参照してください。

アクセスについては、 Data Catalog 参照してください。 クロスアカウント Data Catalog アクセス (p. 284).

既存のデータベースとテーブルへの Lake Formationのアクセス許可の適用Athena を初めて使用する場合で、Lake Formation を使用してデータをクエリするアクセス許可を設定する場合、ユーザーが Amazon S3 データを読み取り、メタデータを作成できるように IAM ポリシーを設定する必要はありません。Lake Formation を使用してアクセス許可を管理できます。

Lake Formation へのデータの登録と IAM アクセス許可ポリシーの更新は必須ではありません。データがLake Formation に登録されていない場合、Amazon S3 (および該当する場合は AWS Glue) で適切なアクセス許可を持つ Athena ユーザーは、Lake Formationに登録されていないデータのクエリを続行できます。

Lake Formation に登録されていないデータをクエリする既存の Athena ユーザーがいる場合は、AmazonS3 (および該当する場合は AWS Glue データカタログ) の IAM アクセス許可を更新し、Lake Formation アクセス許可を使用してユーザーアクセスを一元管理できます。Amazon S3 データの場所を読み取るアクセス許可については、リソースベースおよびアイデンティティベースのポリシーを更新して Amazon S3 アクセス許可を変更できます。メタデータへのアクセスについて、AWS Glue できめ細かなアクセスコントロールのためにリソースレベルのポリシーを設定した場合、代わりに Lake Formation のアクセス許可を使用してアクセスを管理できます。

詳細については、以下を参照してください。 AWS Glue データカタログ のデータベースとテーブルへのきめ細かなアクセス (p. 249) および アップグレード中 AWS Glue へのデータ許可 AWS Lake Formation モデル を AWS Lake Formation 開発者ガイド.

287

Page 297: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

使用 Lake Formation そして Athena JDBC およびODBC ドライバー、フェデレーション アクセス用Athena[ Athena JDBC および ODBC ドライバーは、SAML 2.0 ベースのフェデレーションと Athena OktaおよびMicrosoft Active Directory Federation Services(AD FS)IDプロバイダの使用。統合によって Amazon AthenaAWSで Lake FormationSAMLベースの認証を有効にして、 Athena 企業の認証情報で管理できます。付Lake Formation および AWS Identity and Access Management (IAM)、SAMLユーザーが使用できるデータに対して、きめ細かい列レベルのアクセス制御を維持できます。と Athena JDBC および ODBC ドライバー、フェデレーション アクセスは、ツールまたはプログラム アクセスに使用できます。

使用するには Athena 管理されているデータソースにアクセスする Lake FormationSAML 2.0ベースのフェデレーションを有効にするには、IDプロバイダ(IdP)とAWS Access and Identity Management(AWSAccess and Identity Management)(IAM)ロール。詳細なステップについては、「チュートリアル: Oktaユーザー向けに Athena Lake Formationおよび JDBC を使用するためのフェデレーティッドアクセスの設定 (p. 289)」を参照してください。

Prerequisites使用するには Amazon Athena および Lake Formation 連携アクセスの場合、次の要件を満たす必要があります。

• Okta や Microsoft Active Directory Federation Services (AD FS) などの既存の SAML ベースの ID プロバイダを使用して、コーポレート ID を管理します。

• [ AWS Glue データカタログ メタデータストアとして• 権限の定義と管理は、 Lake Formation のデータベース、テーブル、および列へのアクセス AWS Glue

データカタログ. 詳細については、AWS Lake Formation 開発者ガイド を参照してください。• バージョン2.0.14以降の Athena JDBCドライバ またはバージョン1.1.3以降 Athena ODBCドライ

バ (p. 73).

考慮事項と制約事項[ Athena JDBC または ODBC ドライバーと Lake Formation への連携アクセスを構成するには Athena次の点に留意してください。

• 現在、 Athena JDBC ドライバーおよび ODBC ドライバーは、Okta および Microsoft Active DirectoryFederation Services (AD FS) ID プロバイダーをサポートします。ですが、 Athena JDBCドライバには、他のIDプロバイダを使用するために拡張できる汎用SAMLクラスがあり、他のIDプロバイダ(IdP)との使用を可能にするカスタム拡張のサポート Athena 制限される場合があります。

• 現時点では、 Athena 構成サポート用コンソール IdP およびSAMLの使用 Athena. このサポートを構成するには、サードパーティのIDプロバイダである Lake Formation および IAM 管理コンソール、およびJDBC または ODBC ドライバー クライアント。

• あなたは、 SAML 2.0仕様 また、IDプロバイダとSAMLを Lake Formation および Athena.• SAMLプロバイダーと Athena JDBC および ODBC ドライバーはサードパーティによって提供されるた

め、AWS によるサポートは、その使用に関する問題に対して制限される場合があります。

トピック• チュートリアル: Okta ユーザー向けに Athena Lake Formationおよび JDBC を使用するためのフェデ

レーティッドアクセスの設定 (p. 289)

288

Page 298: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

チュートリアル: Okta ユーザー向けに Athena Lake Formationおよび JDBC を使用するためのフェデレーティッドアクセスの設定このチュートリアルでは、Okta、 AWS Lake Formation 、AWS Identity and Access Managementアクセス権限、および Athena JDBC ドライバーを設定して、 の SAML ベースのフェデレーション使用を有効にする方法を示しますAthena。 は、 で使用可能なデータを SAML ベースのユーザーにきめ細かくアクセスコントロールします。Lake FormationAthenaこの設定をセットアップするために、このチュートリアルではOkta 開発者コンソール、AWS IAMとLake Formationコンソール、および SQL Workbench/J ツールを使用します。

Prerequisites

このチュートリアルでは、以下のことが完了していることを前提としています。

• アカウントを作成します。AWSアカウントを作成するには、 Amazon Web Servicesホームページにアクセスしてください。

• で (p. 116)のクエリ結果の場所を設定しますAthena。Amazon S3• に Amazon S3 データバケットの場所を登録Lake Formationしました。• のデータを指すデータベースとテーブルを に定義しました。AWS GlueData CatalogAmazon S3

• まだテーブルを定義していない場合は、クローラAWS Glueを実行するか、 を使用してアクセスするデータのデータベースと 1 つ以上のテーブルを定義します。Athena (p. 76)

• このチュートリアルでは、AWS でのオープンデータのレジストリで使用可能な NYC 税別トリップデータセットに基づくテーブルを使用します。このチュートリアルでは、データベース名tripdbとテーブル名を使用しますnyctaxi。

チュートリアルのステップ• ステップ 1: Okta アカウントの作成 (p. 289)• ステップ 2: ユーザーとグループを Okta に追加する (p. 290)• ステップ 3: SAML 認証用の Okta アプリケーションのセットアップ (p. 296)• ステップ 4: AWS SAML ID プロバイダーと Lake Formation アクセスIAMロールの作成 (p. 304)• ステップ 5: IAMロールおよび SAML ID プロバイダーを Okta アプリケーションに追加する (p. 310)• ステップ 6: を介してユーザーおよびグループのアクセス許可を付与するAWS Lake

Formation (p. 315)• ステップ 7: AthenaJDBC クライアントを介したアクセスの検証 (p. 320)• Conclusion (p. 329)• 関連リソース (p. 329)

ステップ 1: Okta アカウントの作成

このチュートリアルでは、SAML ベースの ID プロバイダーとして Okta を使用します。Okta アカウントがまだない場合は、無料で作成できます。Okta アカウントは、SAML 認証用の Okta アプリケーションを作成するために必要です。

Okta アカウントを作成するには

1. Okta を使用するには、Okta 開発者サインアップページに移動して、無料の Okta トライアルアカウントを作成します。開発者エディションサービスは、developer.okta.com/pricing の Okta によって指定された制限まで無料です。

2. アクティベーション E メールを受け取ったら、アカウントをアクティブ化します。

289

Page 299: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

Okta ドメイン名が割り当てられます。参照するためにドメイン名を保存します。後で、ドメイン名(<okta-idp-domain>) を、 に接続する JDBC Athena 文字列で指定します。

ステップ 2: ユーザーとグループを Okta に追加する

このステップでは、Okta コンソールを使用して以下のタスクを実行します。

• 2 つの Okta ユーザーを作成します。• 2 つの Okta グループを作成します。• 各 Okta グループに 1 人の Okta ユーザーを追加します。

ユーザーを Okta に追加するには

1. Okta アカウントをアクティベートしたら、管理ユーザーとして、割り当てられた Okta ドメインにログインします。

2. 開発者コンソールの場合は、ページの左上にあるオプションを使用して、Classic UI を選択します。

3. Classic UI では、[Directory (ディレクトリ)] を選択し、[People (人物)] を選択します。4. [Add Person] を選択して、JDBC ドライバーAthenaを介して にアクセスする新しいユーザーを追加

します。

5. [Add Person] ダイアログボックスで、必要な情報を入力します。

• [First name] と [Last name] に値を入力します。このチュートリアルでは を使用します。athena-okta-user.

• ユーザー名とプライマリ E メールを入力します。このチュートリアルでは を使用します。[email protected].

• [Password] (パスワード) で、[Set by admin] (管理者による設定) を選択し、パスワードを入力します。このチュートリアルでは、ユーザーが初回ログイン時にパスワードを変更する必要があるオプションをオフにします。セキュリティ要件は異なる場合があります。

290

Page 300: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

6. [Save and Add Another (保存して別のものを追加)] を選択します。7. 他のユーザーの情報を入力します。この例では、ビジネスアナリストユーザーを追加しま

す。[email protected].

291

Page 301: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

8. [Save] を選択します。

次の手順では、「Business Analysicals」グループと「Developer」グループを追加して、AthenaJDBC ドライバーを介して 2 つの Okta グループへのアクセスを提供します。

Okta グループを追加するには

1. Okta classic UI から [Directory] (ディレクトリ) を選択し、[Groups] (グループ) を選択します。2. [Groups] ページで、[Add Group] を選択します。

3. [Add Group] ダイアログボックスで、必要な情報を入力します。

292

Page 302: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

• [Name] に「」と入力します。lf-business-analyst.• [Group Description (グループの説明)] に「」と入力します。Business Analysts.

4. [Add Group] (グループの追加) を選択します。5. [Groups] ページで、再度 [Add Group] を選択します。今回は、開発者グループの情報を入力します。6. 必要な情報を入力します。

• [Name] に「」と入力します。lf-developer.• [Group Description (グループの説明)] に「」と入力します。Developers.

7. [Add Group] (グループの追加) を選択します。

これで、2 人のユーザーと 2 つのグループがあり、各グループにユーザーを追加する準備ができました。

グループにユーザーを追加するには

1. [Groups] ページで、先ほど作成した lf-developer グループを選択します。開発者として作成したいずれかの Okta ユーザーをこのグループに追加します。

293

Page 303: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

2. [Manage People] を選択します。

3. [Not Members] のリストから、[athena-okta-user] を選択します。

294

Page 304: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

ユーザーのエントリが、左の [Not Members] リストから右側の [Members] リストに移動します。

295

Page 305: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

4. [Save] を選択します。5. [Back to Groups (グループに戻る)] または [Directory (ディレクトリ)] を選択し、[Groups (グループ)]

を選択します。6. lf-business-analyst グループを選択します。7. [Manage People] を選択します。8. athena-ba-user を lf-business-analyst グループのメンバーリストに追加し、[保存] を選択します。9. [グループ] に戻る、[ディレクトリ]、[グループ] の順に選択します。

[Groups] ページに、各グループに 1 人の Okta ユーザーが含まれることが表示されます。

ステップ 3: SAML 認証用の Okta アプリケーションのセットアップ

このステップでは、Okta 開発者コンソールを使用して以下のタスクを実行します。

• で使用する SAML アプリケーションを追加しますAWS。• アプリケーションを Okta ユーザーに割り当てます。• アプリケーションを Okta グループに割り当てます。

296

Page 306: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

• 後で で使用するために、作成された ID AWS プロバイダーメタデータをダウンロードします。

SAML 認証用のアプリケーションを追加するには

1. メニューから [Applications] を選択し、 への SAML 認証用に Okta アプリケーションを設定できます。Athena

2. [Add Application (アプリケーションの追加)] をクリックします。

3. 検索ボックスで を検索しますRedshift。4. Redshift を選択します。Amazon Web Servicesこのチュートリアルの Okta アプリケーションでは、

の既存の SAML 統合を使用しますAmazon Redshift。

5. Amazon Web ServicesRedshift ページで、[追加] を選択して、Amazon Redshift 用の SAML ベースのアプリケーションを作成します。

297

Page 307: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

6. [Application label (アプリケーションラベル)] に と入力し、[Athena-LakeFormation-OktaDone(完了)] を選択します。

これで Okta アプリケーションを作成したので、作成したユーザーとグループに割り当てることができます。

アプリケーションをユーザーとグループに割り当てるには

1. [application Assignments (アプリケーションの割り当て)] タブで、[Assign (割り当て)] を選択し、[Assign to People (ユーザーに割り当てる)] を選択します。

298

Page 308: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

2. [Assign Athena -LakeFormation-Okta to People] ダイアログボックスで、前に作成した athena-okta-user ユーザーを見つけます。

3. [Assign (割り当てる)] を選択して、ユーザーをアプリケーションに割り当てます。

4. [Save and Go Back (保存して戻る)] を選択します。

299

Page 309: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

5. [完了] を選択します。6. Athena-LakeFormation-Okta アプリケーションの [Assignments (割り当て)] タブで、[Assign (割り当

て)] を選択し、グループに割り当てます。

7. lf-business-analyst では、[Assign (割り当て)] を選択して Athena-LakeFormation-Okta アプリケーションを lf-business-analyst グループに割り当てます。次に [Done (完了)] を選択します。

300

Page 310: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

グループがアプリケーションのグループのリストに表示されます。

301

Page 311: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

これで、 で使用する ID プロバイダーアプリケーションのメタデータをダウンロードする準備ができましたAWS。

アプリケーションメタデータをダウンロードするには

1. [Okta application Sign On (Okta アプリケーションのサインオン)] タブを選択し、ID プロバイダーのメタデータを右クリックします。

302

Page 312: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

2. [Save Link As (リンクの保存形式)] を選択して、XML 形式の ID プロバイダーメタデータをファイルに保存します。認識した名前 ( など) を付けますAthena-LakeFormation-idp-metadata.xml。

303

Page 313: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

ステップ 4: AWS SAML ID プロバイダーと Lake Formation アクセスIAMロールの作成

このステップでは、AWS Identity and Access Management (IAM) コンソールを使用して、以下のタスクを実行します。

• AWS の ID プロバイダーを作成します。• Lake Formation アクセス用の IAM ロールを作成します。• Amazon AthenaFullAccess管理ポリシーをロールに追加します。• Lake Formationと のポリシーAWS Glueをロールに追加します。• Athenaクエリ結果のポリシーをロールに追加します。

AWS SAML ID プロバイダーを作成するには

1. AWS アカウント管理者として AWS アカウントコンソールにサインインし、 IAM コンソール(https://console.aws.amazon.com/iam/) に移動します。

2. ナビゲーションペインで [ID プロバイダー] を選択し、[プロバイダーの作成] をクリックします。

3. [Configure Provider] 画面で、以下の情報を入力します。

304

Page 314: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

• [Provider Type (プロバイダーのタイプ)] で、[SAML] を選択します。• [プロバイダ名] に「」と入力します。AthenaLakeFormationOkta

• [メタデータドキュメント] で、ダウンロードした ID プロバイダー (IdP) メタデータ XML ファイルを選択します。

4. [Next Step (次のステップ)] を選択します。5. [プロバイダ情報の確認] ページで、[作成] を選択します。

IAMコンソールでは、作成したAthenaLakeFormationOktaプロバイダーが ID プロバイダーのリストに表示されます。

305

Page 315: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

次に、 IAM アクセスのための AWS Lake Formation ロールを作成します。ロールに 2 つのインラインポリシーを追加します。1 つのポリシーでは、 Lake Formationおよび にアクセスするためのアクセス許可が提供されますAWS GlueAPIs。 もう 1 つのポリシーは、 へのアクセスAthenaと、 内のAthenaクエリ結果の場所を提供しますAmazon S3。

IAMアクセス用の AWS Lake Formation ロールを作成するには

1. IAMコンソールのナビゲーションペインで、[Roles]、[Create role] の順に選択します。

2. [ロールの作成] ページで、次の手順を実行します。

a. [Select type of trusted entity (信頼されたエンティティのタイプを選択)] で、[SAML 2.0Federation (SAML 2.0 フェデレーション)] を選択します。

b. SAML プロバイダーの場合は、 を選択しますAthenaLakeFormationOkta。c. SAML プロバイダーの場合は、[プログラムによるアクセスと AWS マネジメントコンソールによ

るアクセスを許可する] オプションを選択します。d. [Next (次へ)] を選択します。アクセス許可。

306

Page 316: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

3. [Attach Permissions policies (アクセス権限ポリシーをアタッチする)] ページで、[Filter policies (ポリシーのフィルタ)] に「Athena」と入力します。

4. Amazon AthenaFullAccess管理ポリシーを選択し、[次へ] を選択します。タグ.

307

Page 317: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

5. [タグの追加] ページで、[次へ] を選択します。確認.6. [Review] ページで、[Role name] にロール名を入力します (例: )。Athena-LakeFormation-

OktaRole)、次に [Create role] を選択します。

308

Page 318: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

次に、Amazon S3 Lake Formation の 、 AWS Glue APIs 、およびAthenaクエリ結果へのアクセスを許可するインラインポリシーを追加します。

Lake Formation および のロールにインラインポリシーを追加するにはAWS Glue

1. IAMコンソールのロールの一覧から、新しく作成した を選択しますAthena-LakeFormation-OktaRole。

2. ロールの [Summary] ページの [Permissions] タブで、[Add inline policy] を選択します。3. [ポリシーの作成] ページで、[JSON] を選択します。4. Lake Formationおよび へのアクセスを提供する次のようなインラインポリシーを追加しますAWS

GlueAPIs。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "lakeformation:GetMetadataAccess", "glue:GetUnfiltered*", "glue:GetTable", "glue:GetTables", "glue:GetDatabase", "glue:GetDatabases", "glue:CreateDatabase", "glue:GetUserDefinedFunction", "glue:GetUserDefinedFunctions" ], "Resource": "*" }}

5. [ポリシーの確認] を選択します。6. [名前] に、ポリシーの名前 ( など) を入力しますLakeFormationGlueInlinePolicy。7. [ポリシーの作成] を選択します。

Athenaクエリ結果の場所のロールにインラインポリシーを追加するには

1. ロールの [SummaryAthena-LakeFormation-OktaRole] ページの [Permissions] タブで、[Addinline policy] を選択します。

2. [ポリシーの作成] ページで、[JSON] を選択します。3. 次のようなインラインポリシーを追加して、ロールがAthenaクエリ結果の場所にアクセスできるよ

うにします。の置き換え <athena-query-results-bucket> バケットの名前を持つプレースホルダーを例で示します。Amazon S3

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AthenaQueryResultsPermissionsForS3", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<athena-query-results-bucket>", "arn:aws:s3:::<athena-query-results-bucket>/*"

309

Page 319: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

] } ]}

4. [ポリシーの確認] を選択します。5. [名前] に、ポリシーの名前 ( など) を入力しますAthenaQueryResultsInlinePolicy。6. [ポリシーの作成] を選択します。

次に、Lake Formationアクセスロールの ARN と、作成した SAML プロバイダーの ARN をコピーします。これらは、チュートリアルの次のセクションで Okta SAML アプリケーションを設定するときに必要になります。

ロール ARN と SAML ID プロバイダー ARN をコピーするには

1. IAMコンソールのロールの [SummaryAthena-LakeFormation-OktaRole] ページで、[Role ARN]の横にある [Copy to clipboard] アイコンを選択します。ARN の形式を以下に示します。

arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole

2. 後で参照できるように、完全な ARN を安全に保存します。3. IAMコンソールのナビゲーションペインで、[ID プロバイダー] を選択します。4. AthenaLakeFormationOktaプロバイダを選択します。5. [概要] ページで、プロバイダー ARN の横にあるクリップボードにコピーアイコンを選択します。ARN

は次のようになります。

arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta

6. 後で参照できるように、完全な ARN を安全に保存します。

ステップ 5: IAMロールおよび SAML ID プロバイダーを Okta アプリケーションに追加する

このステップでは、Okta 開発者コンソールに戻って以下のタスクを実行します。

• ユーザーおよびグループの Lake Formation URL 属性を Okta アプリケーションに追加します。• ID プロバイダーの ARN とIAMロールの ARN を Okta アプリケーションに追加します。• Okta アプリケーション ID をコピーします。に接続する JDBC プロファイルには、Okta アプリケーショ

ン ID Athena が必要です。

ユーザーおよびグループの Lake Formation URL 属性を Okta アプリケーションに追加するには

1. Okta 開発者コンソールにサインインします。2. [Applications (アプリケーション)] タブを選択し、Athena-LakeFormation-Oktaアプリケーション

を選択します。

310

Page 320: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

3. アプリケーションの [Sign On (サインオン)] タブで選択し、[Edit (編集)] を選択します。

4. [属性] を展開します (オプション)。5. [Attribute Statements (optional) (属性ステートメント (オプション))] で、次の属性を追加します。

• [Name] に https://lakeformation.amazon.com/SAML/Attributes/Username と入力します。

• 値には、 を入力しますuser.login

311

Page 321: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

6. [グループ属性ステートメント] (オプション) で、次の属性を追加します。

• [Name] に https://lakeformation.amazon.com/SAML/Attributes/Groups と入力します。

• 名前の形式には、 を入力しますBasic

• [Filter] で、[Matches regex] を選択し.*、フィルタボックスに入力します。

312

Page 322: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

7. [Advanced Sign-On Settings] セクションまで下にスクロールし、ID プロバイダーとIAMロールARNsを Okta アプリケーションに追加します。

ID プロバイダーとARNsロールIAMの を Okta アプリケーションに追加するには

1. Idp ARN とロール ARN の場合、AWS ID プロバイダー ARN とロール ARN をカンマ区切り値としての形式で入力します。<saml-arn>,<role-arn>。 結合された文字列は次のようになります。

arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta,arn:aws:iam::<account-id>:role/Athena-LakeFormation-OktaRole

313

Page 323: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

2. [Save] を選択します。

次に、Okta アプリケーション ID をコピーします。これは、後で に接続する JDBC 文字列で必要になりますAthena。

Okta アプリケーション ID を検索してコピーするには

1. Okta アプリケーションの [General] タブを選択します。

314

Page 324: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

2. [App Embed Link (アプリ埋め込みリンク)] セクションまで下にスクロールします。3. 埋め込みリンクから、URL の Okta アプリケーション ID 部分をコピーして安全に保存します。Okta

アプリケーション ID は、 の後の URL の一部ですamazon_aws_redshift/。

ステップ 6: を介してユーザーおよびグループのアクセス許可を付与するAWSLake Formation

このステップでは、 Lake Formation コンソールを使用して、SAML ユーザーおよびグループにテーブルのアクセス権限を付与します。以下のタスクを実行します。

315

Page 325: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

• テーブルで Okta SAML ユーザーおよび関連するユーザーアクセス許可の ARN を指定します。• Okta SAML グループの ARN とテーブルに関連付けられたグループのアクセス許可を指定します。• 付与したアクセス許可を確認します。

で Okta ユーザーLake Formationにアクセス権限を付与するには

1. にデータレイク管理者としてサインインしますAWS マネジメントコンソール。2. Lake Formation コンソール (https://console.aws.amazon.com/lakeformation/) を開きます。3. ナビゲーションペインで [テーブル] を選択し、アクセス許可を付与するテーブルを選択します。この

チュートリアルでは、 nyctaxi データベースのtripdbテーブルを使用します。

4. [Actions (アクション)] から、[Grant (付与)] を選択します。

5. [アクセス許可の付与] ダイアログで、以下の情報を入力します。

316

Page 326: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

a. SAML とAmazon QuickSightユーザーおよびグループで、次の形式で Okta SAML ユーザー ARNを入力します。

arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:user/<athena-okta-user>@<anycompany.com>

b. [Columns (列)] の [Choose filter type (フィルタータイプの選択)] で、[Include columns (列を含める)] または [Exclude columns (列を除外する)] を選択します。

c. フィルタの [Choose one or more columns] ドロップダウンを使用して、ユーザーに対して追加または除外する列を指定します。

d. [Table permissions (テーブルのアクセス許可)] で、[Select (選択)] を選択します。このチュートリアルではSELECTアクセス許可のみが付与されます。要件が異なる場合があります。

6. [Grant (付与)] を選択します。

次に、Okta グループに対して同様のステップを実行します。

Okta Lake Formation グループのアクセス許可を に付与するには

1. コンソールの [TablesLake Formation] ページで、nyctaxi テーブルがまだ選択されていることを確認します。

2. [Actions (アクション)] から、[Grant (付与)] を選択します。3. [アクセス許可の付与] ダイアログで、以下の情報を入力します。

317

Page 327: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

a. SAML とAmazon QuickSightユーザーおよびグループで、次の形式で Okta SAML グループ ARNを入力します。

arn:aws:iam::<account-id>:saml-provider/AthenaLakeFormationOkta:group/lf-business-analyst

b. [Columns (列)] で、[フィルタータイプの選択] を選択し、[Include columns (列を含める)] を選択します。

c. [Choose one or more columns (列を 1 つ以上選択)] で、テーブルの最初の 3 つの列を選択します。

d. [Table permissions (テーブルのアクセス許可)] で、付与する特定のアクセス許可を選択します。このチュートリアルではSELECTアクセス許可のみが付与されます。要件が異なる場合があります。

318

Page 328: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

4. [Grant (付与)] を選択します。5. 付与したアクセス許可を確認するには、[Actions (アクション)]、[View permissions (アクセス許可の表

示)] の順に選択します。

319

Page 329: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

テーブルの [nyctaxiData permissions (データのアクセス許可)] ページに、athena-okta-user と lf-business-analyst グループのアクセス許可が表示されます。

ステップ 7: AthenaJDBC クライアントを介したアクセスの検証

これで、JDBC クライアントを使用し、Okta SAML ユーザーとして Athena へのテスト接続を実行する準備ができました。

このセクションでは、以下のタスクを実行します。

• テストクライアントの準備 – JDBC ドライバーAthenaをダウンロードして SQL Workbench をインストールし、ドライバーを Workbench に追加します。このチュートリアルでは、SQL Workbench Athenaを使用して、Okta 認証および Lake Formation アクセス許可の検証を通じて にアクセスします。

• SQL Workbench の場合:• AthenaOkta ユーザーの接続を作成します。

320

Page 330: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

• AthenaOkta ユーザーとしてテストクエリを実行します。• ビジネスアナリストユーザーの接続を作成してテストします。

• Okta コンソールで、ビジネスアナリストのユーザーを開発者グループに追加します。• Lake Formationコンソールで、開発者グループのテーブルアクセス許可を設定します。• SQL Workbench で、ビジネスアナリストとしてテストクエリを実行し、アクセス権限の変更が結果にど

のように影響するかを確認します。

テストクライアントを準備するには

1. 互換性のある Lake Formation JDBC ドライバー (2.0.14 以降のバージョン) Athena を からダウンロードして抽出します。JDBC ドライバーを介した Athena の使用 (p. 72)

2. 変更した Apache 2.0 ライセンスで入手できる無料の SQL Workbench/J SQL クエリツールをダウンロードしてインストールします。

3. SQL Workbench で、[File (ファイル)] を選択し、[Manage Drivers (ドライバーの管理)] を選択します。

4. [ドライバーの管理] ダイアログボックスで、以下のステップを実行します。

321

Page 331: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

a. 新しいドライバーのアイコンを選択します。b. [Name] に Athena と入力します。c. [Library] で、先ほどダウンロードした Simba Athena JDBC .jar ファイルを参照して選択しま

す。d. [OK] を選択します。

これで、AthenaOkta ユーザーの接続を作成してテストする準備ができました。

Okta ユーザーの接続を作成するには

1. [File (ファイル)]、[Connect (接続)] ウィンドウの順に選択します。

2. [Connection profile (接続プロファイル)] ダイアログボックスで、以下の情報を入力して接続を作成します。

• [ name ( の名前)] ボックスに、「Athena_Okta_User_Connection」と入力します。• ドライバーには、Simba Athena JDBC ドライバーを選択します。• [URL] で、次のいずれかを実行します。

• 接続 URL を使用するには、1 行の接続文字列を入力します。次の例では読みやすくするために改行を追加しています。

322

Page 332: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

jdbc:awsathena://AwsRegion=region-id;S3OutputLocation=s3://athena-query-results-bucket/athena_results;AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;[email protected];password=password;idp_host=okta-idp-domain;App_ID=okta-app-id;SSL_Insecure=true;LakeFormationEnabled=true;

• AWS プロファイルベースの URL を使用するには、以下の手順を実行します。1. 次の例のように、AWS 認証情報ファイルを持つ AWS プロファイルを設定します。

[athena_lf_dev]plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvideridp_host=okta-idp-domainapp_id=okta-app-iduid=athena-okta-user@anycompany.compwd=password

2. URL には、次の例のように 1 行の接続文字列を入力します。この例では読みやすくするために改行を追加しています。

jdbc:awsathena://AwsRegion=region-id;S3OutputLocation=s3://athena-query-results-bucket/athena_results;profile=athena_lf_dev;SSL_Insecure=true;LakeFormationEnabled=true;

これらの例は、 に接続するために必要な URL の基本的な表現Athenaであることに注意してください。URL でサポートされているパラメータの完全なリストについては、Simba Athena JDBC ドライバーのインストールガイドを参照してください (p. 72)。JDBC インストールガイドでは、 にプログラムで接続するためのサンプル Java コードも用意されています。Athena

次の図は、接続 URL を使用する SQL Workbench 接続プロファイルを示しています。

323

Page 333: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

これで Okta ユーザーの接続を確立したので、データを取得してテストすることができます。

Okta ユーザーの接続をテストするには

1. [テスト] を選択し、接続が成功したことを確認します。2. SQL Workbench の [Statement (ステートメント)] ウィンドウから、次の SQL DESCRIBE コマンドを

実行します。すべての列が表示されていることを確認します。

DESCRIBE "tripdb"."nyctaxi"

324

Page 334: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

3. SQL Workbench の [Statement (ステートメント)] ウィンドウから、次の SQL SELECT コマンドを実行します。すべての列が表示されていることを確認します。

SELECT * FROM tripdb.nyctaxi LIMIT 5

325

Page 335: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

次に、lf-business-analyst グループのメンバーである athena-ba-user が、 で前に指定したテーブルの最初の 3 列にのみアクセスできることを検証します。Lake Formation

athena-ba-user のアクセスを確認するには

1. SQL Workbench の [Connection profile (接続プロファイル)] ダイアログボックスで、別の接続プロファイルを作成します。

• 接続プロファイル名に、 と入力します Athena_Okta_Group_Connection。• ドライバーには、Simba Athena JDBC ドライバーを選択します。• [URL] で、次のいずれかを実行します。

• 接続 URL を使用するには、1 行の接続文字列を入力します。次の例では読みやすくするために改行を追加しています。

jdbc:awsathena://AwsRegion=region-id;S3OutputLocation=s3://athena-query-results-bucket/athena_results;AwsCredentialsProviderClass=com.simba.athena.iamsupport.plugin.OktaCredentialsProvider;[email protected];password=password;idp_host=okta-idp-domain;App_ID=okta-application-id;SSL_Insecure=true;LakeFormationEnabled=true;

• AWSプロファイルベースの URL を使用するには、次の手順を実行します。1. 次の例のような認証情報ファイルを持つ AWS プロファイルを設定します。

[athena_lf_ba]plugin_name=com.simba.athena.iamsupport.plugin.OktaCredentialsProvideridp_host=okta-idp-domainapp_id=okta-application-iduid=athena-ba-user@anycompany.compwd=password

2. URL には、次のような 1 行の接続文字列を入力します。この例では読みやすくするために改行を追加しています。

326

Page 336: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

jdbc:awsathena://AwsRegion=region-id;S3OutputLocation=s3://athena-query-results-bucket/athena_results;profile=athena_lf_ba;SSL_Insecure=true;LakeFormationEnabled=true;

2. [テスト] を選択して、接続が成功したことを確認します。3. SQL ステートメントウィンドウから、以前に実行したのと同じコマンドDESCRIBEおよび SELECT

SQL コマンドを実行して、結果を確認します。

athena-ba-user は lf-business-analyst グループのメンバーであるため、Lake Formationコンソールで指定した最初の 3 つの列のみが返されます。

次に、Okta コンソールに戻り、 athena-ba-userを lf-developer Okta グループに追加します。

athena-ba-user を lf-developer グループに追加するには

1. 割り当てられた Okta ドメインの管理者ユーザーとして Okta コンソールにサインインします。

327

Page 337: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

2. Classic UI に切り替えます。3. [Directory (ディレクトリ)] を選択し、[Groups (グループ)] を選択します。4. [Groups] ページで、lf-developer グループを選択します。

5. [Manage People] を選択します。6. [Not Members] リストで、athena-ba-user を選択して lf-developer グループに追加します。7. [Save] を選択します。

コンソールに戻り、lf-developer Lake Formation グループのテーブルアクセス権限を設定します。

lf-developer-group のテーブルのアクセス許可を設定するには

1. データレイク管理者としてLake Formationコンソールにログインします。2. ナビゲーションペインで、[テーブル] を選択します。3. nyctaxi テーブルを選択します。4. [Actions (アクション)]、[Grant (付与)] の順に選択します。5. [Grant Permissions (アクセス許可の付与)] ダイアログで、次の情報を入力します。

• SAML とAmazon QuickSightユーザーおよびグループの場合は、次の形式で Okta SAML lf-developer グループ ARN を入力します。

• [Columns (列)] で、[フィルタータイプの選択] を選択し、[Include columns (列を含める)] を選択します。

• [trip_type] 列を選択します。• [Table permissions (テーブルのアクセス権限)] で、[SELECT] を選択します。

6. [Grant (付与)] を選択します。

これで、SQL Workbench を使用して、lf-developer グループへのアクセス許可の変更を検証できます。この変更は、ユーザーが lf-developer グループのメンバーになった、athena-ba-user が利用できるデータに反映される必要があります。

athena-ba-user のアクセス許可の変更を確認するには

1. SQL Workbench プログラムを閉じてから、再度開きます。2. athena-ba-user のプロファイルに接続します。3. [Statement (ステートメント)] ウィンドウから、以前に実行したのと同じ SQL ステートメントを発行

します。

328

Page 338: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

今回は、prip_type 列が表示されます。

athena-ba-user は lf-developer グループと lf-business-analyst グループの両方のメンバーになったため、これらのグループのLake Formationアクセス許可の組み合わせで返される列が決まります。

Conclusion

このチュートリアルでは、SAML プロバイダーとして Okta Athenaを使用して AWS Lake Formationとの統合を設定しました。Lake Formationと IAM を使用して、 データレイク の SAML ユーザーが利用できるリソースを制御しましたAWS GlueData Catalog。

関連リソース

関連情報については、以下のリソースを参照してください。

• JDBC ドライバーを介した Athena の使用 (p. 72)• Athena API へのフェデレーションアクセスの有効化 (p. 274)• AWS Lake Formation 開発者ガイド

329

Page 339: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド使用 Lake Formation および JDBC ま

たは ODBC for Federated Access

• でのData Catalogアクセス権限の付与および取り消しAWS Lake Formation 開発者ガイド• の ID プロバイダーとフェデレーションIAM ユーザーガイド。• IAMでの SAML ID プロバイダーの作成IAM ユーザーガイド• AWS セキュリティブログの Windows Active Directory、ADFS、SAML 2.0 を使用した AWS へのフェデ

レーションの有効化

330

Page 340: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリを実行するためのワークグループの使用

ワークグループを使用してクエリのアクセスとコストを制御する

ワークグループを使用して、ユーザー、チーム、アプリケーション、またはワークロードを分離し、各クエリまたはワークグループ全体で処理できるデータ量に制限を設定して、コストを追跡できます。ワークグループはリソースとして機能するため、リソースレベルのアイデンティティベースのポリシーを使用して特定のワークグループへのアクセスを制御できます。また、Amazon CloudWatch でクエリ関連のメトリクスを表示したり、スキャンしたデータ量の制限を設定してコストを制御したり、しきい値を作成したり、これらのしきい値を超過したときに Amazon SNS などのアクションをトリガーしたりできます。

ワークグループは、次のように IAM、CloudWatch、および Amazon Simple Notification Service と統合されます。

• ワークグループでクエリを実行できるユーザーを管理するリソースレベルのアクセス権限を持つ IAM アイデンティティベースのポリシー。

• クエリメトリクスを有効にすると、Athena はワークグループのクエリのメトリクスを CloudWatch に発行します。

• Amazon SNS では、ワークグループでのクエリのデータ使用量制御が設定されたしきい値を超えたときに、特定のワークグループユーザーにアラームを発行する Amazon SNS トピックを作成できます。

トピック• クエリを実行するためのワークグループの使用 (p. 331)• CloudWatch メトリクスとイベントによるコスト管理とクエリのモニタリング (p. 348)

クエリを実行するためのワークグループの使用チーム、アプリケーション、またはさまざまなワークロードのクエリを分離するためにワークグループを使用することをお勧めします。たとえば、組織で 2 つの異なるチームに対して、別のワークグループを作成することができます。ワークロードを分割することもできます。たとえば、2 つの独立したワークグループを、1 つはレポート生成などの自動スケジュールされたアプリケーションのため、もう 1 つはアナリストによるアドホック使用のために作成できます。ワークグループを切り替えることができます。

トピック• ワークグループを使用するメリット (p. 331)• ワークグループの仕組み (p. 332)• ワークグループのセットアップ (p. 333)• ワークグループにアクセスするための IAM ポリシー (p. 334)• ワークグループ設定 (p. 339)• ワークグループの管理 (p. 340)• Athena ワークグループ API (p. 346)• ワークグループのトラブルシューティング (p. 347)

ワークグループを使用するメリットワークグループにより、次のことが可能になります。

331

Page 341: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループの仕組み

ユーザー、チーム、アプリケーション、またはワークロードをグループに分ける。

各ワークグループには、独自の固有のクエリ履歴と保存したクエリのリストがあります。詳細については、「ワークグループの仕組み (p. 332)」を参照してください。

ワークグループのすべてのクエリに対して、ワークグループ設定を設定することを選択できます。これらには、クエリ結果を保存する AmazonS3 の場所と暗号化設定が含まれます。ワークグループ設定を強制することもできます。詳細については、「ワークグループ設定 (p. 339)」を参照してください。

コストの制約を強制する。 ワークグループのクエリに 2 つのタイプのコスト制約を設定できます。

• クエリごとの制限は、クエリごとにスキャンされたデータ量のしきい値です。Athena は、指定されたしきい値を超えるとクエリをキャンセルします。この制限は、ワークグループ内で実行中の各クエリに適用されます。クエリごとの制限を 1 つだけ設定し、必要に応じてそれを更新できます。

• ワークグループごとの制限は、ワークグループでクエリによってスキャンされたデータ量に対して各ワークグループに設定できるしきい値です。しきい値を超過した場合は、特定のユーザーに E メールを送信するなど、選択したアクションをトリガーする Amazon SNS アラームがアクティブ化されます。各ワークグループに複数のワークグループごとの制限を設定できます。

詳細な手順については、「データ使用量の制御制限の設定 (p. 355)」を参照してください。

CloudWatch のすべてのワークグループクエリについてクエリ関連のメトリクスを追跡する。

ワークグループで実行されるクエリごとに、メトリクスを発行するようにワークグループを設定した場合、Athena はメトリクスを CloudWatchに発行します。Athena コンソール内で各ワークグループのクエリメトリクスを表示する (p. 349)ことができます。CloudWatch では、カスタムダッシュボードを作成し、これらのメトリクスにしきい値およびアラームを設定できます。

ワークグループの仕組みAthena のワークグループには、次の特徴があります。

• デフォルトでは、各アカウントにはプライマリワークグループがあり、デフォルトのアクセス許可により認証されたすべてのユーザーがこのワークグループにアクセスできます。プライマリワークグループは削除できません。

• 作成した各ワークグループには、そこで実行されたクエリについてのみ保存されたクエリおよびクエリ履歴が表示され、アカウントのすべてのクエリは表示されません。これにより、アカウント内の他のクエリからクエリが分離され、自分が保存したクエリおよび履歴内のクエリを見つけることがより効率的になります。

• ワークグループを無効にすると、有効にするまでクエリは実行されなくなります。無効なワークグループに送信されたクエリは、再び有効にするまで失敗します。

• アクセス権限がある場合は、空のワークグループと、保存したクエリを含むワークグループを削除できます。この場合、ワークグループを削除する前に、Athena は保存されたクエリが削除されることを警告します。他のユーザーがアクセスできるワークグループを削除する前に、そのユーザーが引き続きクエリを実行できる他のワークグループにアクセスできることを確認してください。

• ワークグループ全体の設定をセットアップし、ワークグループで実行されるすべてのクエリでその使用を強制することができます。設定には、Amazon S3 のクエリ結果の場所と暗号化の設定が含まれます。

332

Page 342: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループのセットアップ

Important

ワークグループ全体の設定を強制する場合、このワークグループで実行されるすべてのクエリはワークグループ設定を使用します。これは、クライアント側の設定がワークグループの設定と異なる場合でも発生します。詳細については、「ワークグループ設定がクライアント側の設定を上書きする (p. 340)」を参照してください。

ワークグループの制限事項• アカウントのリージョンあたり最大 1000 個のワークグループを作成できます。• プライマリワークグループは削除できません。• 各ワークグループで最大 10 個のクエリタブを開くことができます。ワークグループを切り替えると、

クエリタブは最大 3 つのワークグループに対して開いたままになります。

ワークグループのセットアップワークグループを設定するには、ワークグループを作成し、それらの使用に対するアクセス権限を確立する必要があります。まず、組織が必要とするワークグループを決定し、作成します。次に、workgroupリソースでのユーザーアクセスおよびアクションを制御する IAM ワークグループポリシーを設定します。これで、これらのワークグループにアクセスできるユーザーは、その中でクエリを実行できるようになります。

Note

初めて使用するときには、これらのタスクを使用してワークグループを設定します。Athena アカウントがすでにワークグループを使用している場合、各アカウントのユーザーには、そのアカウントの 1 つ以上のワークグループでクエリを実行するためのアクセス許可が必要です。クエリを実行する前に、IAM ポリシーを確認してアクセスできるワークグループを確認し、必要に応じてポリシーを調整して、使用する予定のワークグループに切り替え (p. 345)ます。

デフォルトでは、ワークグループを作成していない場合、アカウントのすべてのクエリはプライマリワークグループで実行されます。

ワークグループは、[Workgroup:(ワークグループ:)<workgroup_name>] タブの Athena コンソールに表示されます。コンソールには、切り替えたワークグループが一覧表示されます。クエリを実行すると、このワークグループでクエリが実行されます。コンソールのワークグループでクエリを実行するか、JDBC または ODBC ドライバーを介して API オペレーション、コマンドラインインターフェイス、またはクライアントアプリケーションを使用してクエリを実行できます。ワークグループにアクセスすると、ワークグループの設定、メトリクス、およびデータ使用量の制御制限を表示できます。さらに、設定およびデータ使用制御制限を編集するためのアクセス権限を持つことができます。

ワークグループをセットアップするには

1. 作成するワークグループを決定します。たとえば、次のことを決定できます。

• 各ワークグループでクエリを実行できるユーザー、およびワークグループ設定を所有しているユーザー。これにより、作成する IAM ポリシーが決まります。詳細については、「ワークグループにアクセスするための IAM ポリシー (p. 334)」を参照してください。

• 各ワークグループで実行されるクエリのクエリ結果に使用する Amazon S3 内の場所。ワークグループのクエリ結果の場所を指定するには、その前に場所が Amazon S3 に存在する必要があります。ワークグループを使用するすべてのユーザーは、この場所にアクセスできる必要があります。詳細については、「ワークグループ設定 (p. 339)」を参照してください。

333

Page 343: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループにアクセスするための IAM ポリシー

• どの暗号化設定が必要か、およびどのワークグループに暗号化する必要があるクエリがあるか。暗号化されたクエリと暗号化されていないクエリには別々のワークグループを作成することをお勧めします。そうすることで、その中で実行されるすべてのクエリに適用されるワークグループに対して暗号化を強制できます。詳細については、「Amazon S3 に保存されたクエリ結果の暗号化 (p. 240)」を参照してください。

2. 必要に応じてワークグループを作成し、それらにタグを追加します。Athena コンソールを開いて、[Workgroups (ワークグループ)<workgroup_name>] タブを選択して、[Create workgroup (ワークグループの作成)] を選択します。詳細な手順については、「ワークグループの作成 (p. 341)」を参照してください。

3. ワークグループへのアクセスを有効にするため、ユーザー、グループ、またはロール用の IAM ポリシーを作成します。ポリシーは、ワークグループメンバーシップおよび workgroup リソースのアクションへのアクセスを確立します。詳細なステップについては、「 ワークグループにアクセスするための IAM ポリシー (p. 334)」を参照してください。JSON ポリシーの例については、「ワークグループのポリシーの例 (p. 259)」を参照してください。

4. ワークグループ設定を指定します。必要に応じて、クエリ結果と暗号化設定の場所を AmazonS3 に指定します。ワークグループ設定を強制できます。詳細については、「ワークグループ設定 (p. 339)」を参照してください。

Important

クライアント側の設定を上書きする (p. 340)場合、Athena はワークグループの設定を使用します。これは、ドライバー、コマンドラインインターフェイス、または API オペレーションを使用してコンソールで実行するクエリに影響します。クエリが継続して実行されている間、特定の Amazon S3 バケットでの結果の可用性に基づいて構築されたオートメーションは破損する可能性があります。上書きする前に、ユーザーに通知することをお勧めします。ワークグループ設定を上書きするように設定した後は、ドライバーまたは API でクライアント側の設定の指定を省略できます。

5. クエリの実行に使用するワークグループをユーザーに通知します。使用できるワークグループ名、必要な IAM ポリシー、およびワークグループ設定についてアカウントのユーザーに通知する E メールを送信します。

6. クエリおよびワークグループについて、データ使用量の制御制限とも呼ばれるコスト管理制限を設定します。しきい値を超過したときに通知を送るには、Amazon SNS トピックを作成してサブスクリプションを設定します。詳細な手順は、を参照してください。 データ使用制限の設定 (p. 355) およびの作成 Amazon SNS トピック の Amazon Simple Notification Service 入門ガイド.

7. ワークグループに切り替え、クエリを実行できるようにします。クエリを実行するには、適切なワークグループに切り替えます。詳細なステップについては、「the section called “クエリを実行するワークグループの指定” (p. 346)」を参照してください。

ワークグループにアクセスするための IAM ポリシーワークグループへのアクセスを制御するには、リソースレベルの IAM アクセス許可またはアイデンティティベースの IAM ポリシーを使用します。

次の手順は、Athena に固有です。

IAM 固有の情報については、このセクションの最後に表示されているリンクを参照してください。JSONワークグループポリシーの詳細については、「ワークグループのポリシーの例 (p. 335)」を参照してください。

IAM コンソールでビジュアルエディタを使用してワークグループポリシーを作成するには

1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

2. 左側のナビゲーションペインで、[ポリシー]、[ポリシーの作成] の順に選択します。

334

Page 344: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループにアクセスするための IAM ポリシー

3. [Visual editor (ビジュアルエディタ)] タブで、[Choose a service (サービスの選択)] を選択します。次に、ポリシーに追加する Athena を選択します。

4. [アクションの選択] を選択し、ポリシーに追加するアクションを選択します。ビジュアルエディタは、Athena で使用可能なアクションを表示します。詳細については、以下を参照してください。Amazon Athenaのアクション、リソース、および条件キー の IAM ユーザーガイド.

5. [アクションの追加] を選択して特定のアクションを入力するか、ワイルドカード (*) を使用して複数のアクションを指定します。

デフォルトでは、作成しているポリシーによって選択したアクションが許可されます。Athena のworkgroup リソースへのリソースレベルのアクセス許可をサポートする 1 つ以上のアクションを選択した場合、エディタで workgroup リソースが一覧表示されます。

6. [リソース] を選択して、ポリシーの特定のワークグループを指定します。JSON ワークグループポリシーの例については、「ワークグループのポリシーの例 (p. 335)」を参照してください。

7. 次のようにして workgroup リソースを指定します。

arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>

8. [ポリシーの確認] を選択して、作成するポリシーの [名前] と [説明] (オプション) を入力します。ポリシー概要を確認して、意図したアクセス許可を付与したことを確認します。

9. [Create Policy (ポリシーの作成)] を選択して、新しいポリシーを保存します。10. このアイデンティティベースのポリシーをユーザー、グループ、またはロールにアタッチし、それら

のユーザー、グループ、またはロールがアクセスできる workgroup リソースを指定します。

詳細については、IAM ユーザーガイド の以下のトピックを参照してください。

• Amazon Athena のアクション、リソース、および条件キー• ビジュアルエディタでのポリシーの作成• IAM ポリシーの追加と削除• リソースへのアクセスの制御

JSON ワークグループポリシーの例については、「ワークグループのポリシーの例 (p. 335)」を参照してください。

すべての Amazon Athena アクションのリストについては、Amazon Athena API リファレンスで API アクション名を参照してください。

ワークグループのポリシーの例このセクションには、ワークグループに対するさまざまなアクションを有効にするために使用できるポリシーの例が含まれています。

ワークグループは、Athena で管理されている IAM リソースです。そのため、ワークグループポリシーが入力として workgroup を実行するアクションを使用する場合、ワークグループの ARN を次のように指定する必要があります。

"Resource": [arn:aws:athena:<region>:<user-account>:workgroup/<workgroup-name>]

<workgroup-name> は、ワークグループの名前です。たとえば、test_workgroup という名前のワークグループの場合は、次のようにリソースとして指定します。

"Resource": ["arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup"]

すべての Amazon Athena アクションのリストについては、Amazon Athena API リファレンスで API アクション名を参照してください。詳細については、以下を参照してください。 IAM ポリシーについては、を

335

Page 345: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループにアクセスするための IAM ポリシー

参照してください。 ビジュアル エディタによるポリシーの作成 の IAM ユーザーガイド. ワークグループの IAM ポリシーの作成の詳細については、「ワークグループの IAM ポリシー (p. 334)」を参照してください。

• Example Policy for Full Access to All Workgroups (p. 336)• Example Policy for Full Access to a Specified Workgroup (p. 336)• Example Policy for Running Queries in a Specified Workgroup (p. 337)• Example Policy for Running Queries in the Primary Workgroup (p. 338)• Example Policy for Management Operations on a Specified Workgroup (p. 338)• Example Policy for Listing Workgroups (p. 338)• Example Policy for Running and Stopping Queries in a Specific Workgroup (p. 339)• Example Policy for Working with Named Queries in a Specific Workgroup (p. 339)

Example すべてのワークグループへのフルアクセスのポリシーの例

次のポリシーでは、アカウントに存在している可能性があるすべてのワークグループリソースへのフルアクセスを許可します。アカウントの他のすべてのユーザーのワークグループを管理する必要があるユーザーにこのポリシーを使用することをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:*" ], "Resource": [ "*" ] } ]}

Example 特定のワークグループへのフルアクセスのポリシーの例

次のポリシーでは、1つの特定のワークグループリソースにフルアクセスすることができます。workgroupA。 このポリシーは、特定のワークグループを完全に管理するユーザーに対して使用できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:ListWorkGroups", "athena:GetExecutionEngine", "athena:GetExecutionEngines", "athena:GetNamespace", "athena:GetCatalogs", "athena:GetNamespaces", "athena:GetTables", "athena:GetTable" ], "Resource": "*" }, { "Effect": "Allow",

336

Page 346: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループにアクセスするための IAM ポリシー

"Action": [ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery", "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution", "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery", "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution" ], "Resource": [ "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA" ] }, { "Effect": "Allow", "Action": [ "athena:DeleteWorkGroup", "athena:UpdateWorkGroup", "athena:GetWorkGroup", "athena:CreateWorkGroup" ], "Resource": [ "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA" ] } ]}

Example 指定したワークグループでクエリを実行するためのポリシーの例

次のポリシーでは、ユーザは指定された workgroupA でクエリを実行し、それらを表示することを許可されています。ユーザーは、ワークグループの更新や削除など、ワークグループ自体の管理タスクを実行することはできません。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:ListWorkGroups", "athena:GetExecutionEngine", "athena:GetExecutionEngines", "athena:GetNamespace", "athena:GetCatalogs", "athena:GetNamespaces", "athena:GetTables", "athena:GetTable" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery", "athena:GetNamedQuery", "athena:ListQueryExecutions",

337

Page 347: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループにアクセスするための IAM ポリシー

"athena:StopQueryExecution", "athena:GetQueryResultsStream", "athena:ListNamedQueries", "athena:CreateNamedQuery", "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution", "athena:GetWorkGroup" ], "Resource": [ "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA" ] } ]}

Example プライマリワークグループでクエリを実行するためのポリシーの例

次の例では、特定のユーザーがプライマリワークグループでクエリを実行できるようにするポリシーを使用します。

Note

指定されたワークグループでクエリを実行するように設定されているすべてのユーザーにこのポリシーを追加することをお勧めします。このポリシーをワークグループのユーザーポリシーに追加すると、指定されたワークグループが削除されたり無効になったりする場合に役立ちます。この場合、プライマリワークグループでクエリを実行し続けることができます。

アカウントのユーザーがプライマリワークグループでクエリを実行できるようにするには、ExamplePolicy for Running Queries in a Specified Workgroup (p. 337) のリソースセクションに次のポリシーを追加します。

"arn:aws:athena:us-east-1:123456789012:workgroup/primary"

Example 指定したワークグループに対する管理オペレーションのポリシーの例

次のポリシーでは、ユーザはワークグループ test_workgroup の作成、削除、詳細の取得、および更新を許可されています。

{ "Effect": "Allow", "Action": [ "athena:CreateWorkGroup", "athena:GetWorkGroup", "athena:DeleteWorkGroup", "athena:UpdateWorkGroup" ], "Resource": [ "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup" ]}

Example ワークグループを一覧表示するためのポリシーの例

次のポリシーでは、すべてのワークグループをすべてのユーザーが一覧表示できるようにします。

{ "Effect": "Allow", "Action": [ "athena:ListWorkGroups" ], "Resource": "*"

338

Page 348: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループ設定

}

Example 特定のワークグループでクエリを実行および停止するためのポリシーの例

このポリシーでは、ユーザーは、ワークグループでクエリを実行できます。

{ "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:StopQueryExecution" ], "Resource": [ "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup" ]}

Example 特定のワークグループで名前付きクエリを使用するポリシーの例

次のポリシーでは、ユーザーは指定されたワークグループの名前付きクエリに関する情報を作成、削除、および取得するアクセス権限を持っています。

{ "Effect": "Allow", "Action": [ "athena:CreateNamedQuery", "athena:GetNamedQuery", "athena:DeleteNamedQuery" ], "Resource": [ "arn:aws:athena:us-east-1:123456789012:workgroup/test_workgroup" ]}

ワークグループ設定各ワークグループには次の設定があります。

• 一意の名前。英数字、ダッシュ、アンダースコアを含む 1~128 文字を含めることができます。ワークグループを作成したら、その名前を変更することはできません。ただし、同じ設定と別の名前で新しいワークグループを作成することはできます。

• ワークグループで実行されているすべてのクエリに適用される設定。この 8 つの原則は以下のとおりです。• このワークグループで実行されるすべてのクエリのクエリ結果を保存するための Amazon S3 の場

所。この場所は、作成時にワークグループに指定する前に存在している必要があります。Amazon S3バケットの作成については、「バケットを作成する」を参照してください。

• すべてのワークグループクエリに暗号化を使用する場合は、暗号化設定。ワークグループのすべてのクエリを暗号化できます。一部のクエリだけを暗号化することはできません。暗号化されているか、または暗号化されていないクエリを含めるには、別々のワークグループを作成することをお勧めします。

さらに、クライアント側の設定を上書きする (p. 340)ことができます。ワークグループのリリース前は、JDBC または ODBC ドライバー、または Athena コンソールの [Properties (プロパティ)] タブで、結果の場所と暗号化オプションをパラメータとして指定できました。これらの設定は、API オペレーションを介して直接指定することもできました。これらの設定は、「クライアント側の設定」と呼ばれています。ワークグループでは、ワークグループレベルでこれらの設定を設定し、それらに対する制御を強制できます。これにより、ユーザーが個別に設定することを防げます。[Override Client-Side Settings (クライ

339

Page 349: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループの管理

アント側設定の上書き)] を選択すると、クエリはワークグループ設定を使用し、クライアント側の設定を無視します。

[Override Client-Side Settings (クライアント側設定の上書き)] が選択されていると、ユーザーには設定が変更されたことがコンソールで通知されます。ワークグループ設定がこのように強制されている場合、ユーザーは対応するクライアント側の設定を省略できます。この場合、コンソールでクエリを実行すると、クエリにクライアント側の設定がある場合でも、ワークグループの設定が使用されます。また、このワークグループでコマンドラインインターフェイス、API オペレーション、またはドライバーを介してクエリを実行した場合、指定した設定はワークグループの設定によって上書きされます。これはクエリ結果の場所と暗号化に影響します。ワークグループにどの設定が使用されているかを確認するには、ワークグループの詳細を表示します (p. 344)。

ワークグループのクエリに対してクエリ制限を設定する (p. 348)こともできます。

ワークグループ設定がクライアント側の設定を上書きする[Create workgroup (ワークグループの作成)] および [ワークグループの編集] ダイアログには、[Overrideclient-side settings (クライアント側設定の上書き)] というタイトルのフィールドがあります。このフィールドは、デフォルトでは選択されていません。選択したかどうかに応じて、Athena は以下を実行します。

• [Override client-side settings (クライアント側設定の上書き)] が選択されていない場合、ワークグループ設定は強制されません。この場合、このワークグループで実行されるすべてのクエリに対して、Athenaはクエリ結果の場所と暗号化にクライアント側の設定を使用します。各ユーザーは、コンソールの[Settings (設定)] メニューでクライアント側の設定を指定できます。クライアント側の設定が使用されていない場合は、ワークグループ全体の設定が適用されますが強制はされません。また、このワークグループで API オペレーション、コマンドラインインターフェイス、または JDBC と ODBC ドライバーを介してクエリを実行し、そこでのクエリ結果の場所と暗号化を指定した場合、クエリはそれらの設定の使用を継続します。

• [Override client-side settings (クライアント側設定の上書き)] が選択されている場合、Athena はクエリ結果の場所と暗号化にワークグループ全体の設定を使用します。また、API オペレーションを使用して、またはドライバーで、コンソールでクエリに指定したその他の設定も上書きします。これは、このワークグループでクエリを実行した場合にのみ影響します。その場合は、ワークグループ設定が使用されます。

クライアント側の設定を上書きして、次にお客様または他のワークグループユーザーが Athena コンソールを開くと、次の例に示すように通知ダイアログボックスが表示されます。このワークグループのクエリがワークグループの設定を使用していることを通知し、この変更を確認するように求めます。

Important

API オペレーション、コマンドラインインターフェイス、または JDBC と ODBC ドライバーを介してクエリを実行し、ワークグループの設定と一致するように設定を更新していない場合、クエリが実行されますが、ワークグループの設定が使用されます。整合性を確保するために、この場合はクライアント側の設定を省略するか、結果の場所と暗号化に関するワークグループの設定と一致するようにクエリ設定を更新することをお勧めします。ワークグループにどの設定が使用されているかを確認するには、ワークグループの詳細を表示します (p. 344)。

ワークグループの管理https://console.aws.amazon.com/athena/ で、以下のタスクを実行できます。

340

Page 350: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループの管理

ステートメント 説明:

ワークグループの作成 (p. 341)

新しいワークグループを作成します。

ワークグループの編集 (p. 343)

ワークグループを編集して設定を変更します。ワークグループの名前を変更することはできませんが、同じ設定と別の名前で新しいワークグループを作成することはできます。

ワークグループの詳細の表示 (p. 344)

名前、説明、データ使用量の制限、クエリ結果の場所、暗号化など、ワークグループの詳細を表示します。[Override client-side settings (クライアント側設定の上書き)] がオンになっている場合、このワークグループがその設定を強制しているかどうかも確認できます。

ワークグループの削除 (p. 344)

ワークグループを削除します。ワークグループ、クエリ履歴、保存されたクエリを削除すると、ワークグループの設定とクエリごとのデータ制限コントロールが削除されます。ワークグループ全体のデータ制限コントロールは CloudWatch に保持され、個別に削除することができます。

プライマリワークグループは削除できません。

ワークグループを切り替える (p. 345)

アクセス権があるワークグループを切り替えます。

ワークグループの有効化および無効化 (p. 345)

ワークグループを有効または無効にします。ワークグループを無効にすると、そのユーザーはクエリを実行したり、新しい名前付きクエリを作成したりできません。アクセスできる場合でも、メトリクス、データ使用制限コントロール、ワークグループの設定、クエリ履歴、保存されたクエリを表示できます。

クエリを実行するワークグループの指定 (p. 346)

クエリを実行する前に、使用するワークグループを Athena に指定する必要があります。ワークグループに対するアクセス権限が必要です。

ワークグループの作成ワークグループを作成するには、CreateWorkgroup API アクションへのアクセス権限が必要です。Athena ワークグループへのアクセス (p. 259)および ワークグループにアクセスするための IAM ポリシー (p. 334)を参照してください。タグを追加する場合は、 TagResource。 参照 ワークグループのタグポリシーの例 (p. 365).

コンソールでワークグループを作成するには

1. Athena コンソールで、[Workgroup (ワークグループ)<workgroup_name>] タブを選択します。[Workgroups (ワークグループ)] パネルが表示されます。

2. [Workgroups (ワークグループ)] パネルで、[Create workgroup (ワークグループの作成)] を選択します。

3. [Create workgroup (ワークグループの作成)] ダイアログボックスで、以下のようにフィールドに入力します。

341

Page 351: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループの管理

Field 説明:

ワークグループ名 必須。ワークグループの一意の名前を入力します。1~128 文字で入力してください。A~Z、a~z、0~9 この名前は変更できません。

説明: (オプション) ワークグループの説明を入力します。最大 1024 文字を含めることができます。

クエリ結果の場所 (オプション) Amazon S3 バケットまたはプレフィックスへのパスを入力します。このバケットとプレフィックスは、指定する前に存在している必要があります。

Note

コンソールでクエリを実行する場合、クエリ結果の場所の指定はオプションです。ワークグループまたは [Settings (設定)] で指定しない場合、Athena はデフォルトのクエリ結果の場所を使用します。API またはドライバを使用してクエリを実行すると、 必ず 2つの場所のうち少なくとも1つでクエリ結果の場所を指定します。 出力位置、またはワークグループの場合は、ワークグループ構成.

クエリ結果の暗号化 (オプション) Amazon S3 に保存されている結果を暗号化します。選択すると、ワークグループのすべてのクエリは暗号化されます。

選択すると、[Encryption type (暗号化タイプ)]、[Encryption key (暗号化キー)] を選択して、[KMS Key ARN (KMS キー ARN)] を入力できます。

キーがない場合は、AWS KMS コンソールを開いて作成します。詳細については、『https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html』の「AWS Key Management Service Developer Guideキーの作成」を参照してください。

に発行します。CloudWatch

このフィールドは、デフォルトで選択されています。クエリメトリクスを Amazon CloudWatch に発行します。クエリメトリクスの表示 (p. 349)を参照してください。

[Override client-sidesettings (クライアント側設定の上書き)]

このフィールドは、デフォルトでは選択されていません。選択すると、ワークグループ設定はワークグループのすべてのクエリに適用され、クライアント側の設定を上書きします。詳細については、「ワークグループ設定がクライアント側の設定を上書きする (p. 340)」を参照してください。

Tags (タグ) (オプション) ワークグループに 1 つ以上のタグを追加します。タグは、Athena ワークグループリソースに割り当てるラベルです。キーと値から構成されます。AWS タグ付け戦略のベストプラクティスを使用して、一貫性のあるタグのセットを作成し、目的、所有者、環境に基づいてワークグループを分類します。IAM ポリシーでタグを使用したり、課金コストを管理することもできます。同じワークグループに重複したタグキーを使用しないでください。詳細については、「リソースのタグ付け (p. 359)」を参照してください。

342

Page 352: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループの管理

Field 説明:

リクエスタ支払い S3 バケット

(オプション) ワークグループのユーザーが、リクエスタ支払いとして設定された Amazon S3 バケットに保存されているデータに対してクエリを実行する場合は、[Enable queries on Requester Paysbuckets in Amazon S3 (Amazon S3 でリクエスタ支払いバケットに対するクエリを有効にする)] を選択します。クエリを実行しているユーザーのアカウントには、クエリに関連付けられた該当するデータアクセスの料金とデータ転送料金が請求されます。詳細については、https://docs.aws.amazon.com/AmazonS3/latest/dev/RequesterPaysBuckets.htmlの「Amazon Simple Storage Service 開発者ガイドリクエスタ支払いバケット」を参照してください。

4. [Create workgroup (ワークグループの作成)] を選択します。ワークグループが [Workgroups (ワークグループ)] パネルのリストに表示されます。

または、API オペレーションを使用してワークグループを作成します。

Important

ワークグループを作成したら、ワークグループ関連のアクションを実行できる ワークグループのIAM ポリシー (p. 334) IAM を作成します。

ワークグループの編集ワークグループを編集するには、UpdateWorkgroup API オペレーションへのアクセス権限が必要です。Athena ワークグループへのアクセス (p. 259)および ワークグループにアクセスするための IAM ポリシー (p. 334)を参照してください。タグを追加または編集する場合は、 TagResource。 参照 ワークグループのタグポリシーの例 (p. 365).

コンソールでワークグループを編集するには

1. Athena コンソールで、[Workgroup (ワークグループ)<workgroup_name>] タブを選択します。[Workgroups (ワークグループ)] パネルが表示され、アカウントのすべてのワークグループが一覧表示されます。

2. [Workgroups (ワークグループ)] パネルで、編集するワークグループを選択します。ワークグループの[View details (詳細の表示)] パネルが表示され、[Overview (概要)] タブが選択された状態になります。

3. [Edit workgroup (ワークグループの編集)] を選択します。

343

Page 353: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループの管理

4. 必要に応じて、フィールドの値を変更します。フィールドのリストについては、「ワークグループの作成 (p. 341)」を参照してください。ワークグループの名前を除くすべてのフィールドを変更できます。名前を変更する必要がある場合は、新しい名前と同じ設定で別のワークグループを作成してください。

5. [Save] を選択します。更新されたワークグループが [Workgroups (ワークグループ)] パネルのリストに表示されます。

ワークグループの詳細の表示各ワークグループの詳細を表示できます。詳細には、ワークグループの名前、説明、有効になっているか無効になっているか、ワークグループで実行されるクエリに使用される設定 (クエリ結果の場所や暗号化設定など) が含まれます。ワークグループにデータ使用量の制限がある場合は、それらも表示されます。

ワークグループの詳細を表示するには

• [Workgroups (ワークグループ)] パネルで、編集するワークグループを選択します。ワークグループの[View details (詳細の表示)] パネルが表示され、[Overview (概要)] タブが選択された状態になります。次の例のように、ワークグループの詳細が表示されます。

ワークグループの削除アクセス権限がある場合は、ワークグループを削除できます。プライマリワークグループは削除できません。

アクセス権限がある場合は、いつでも空のワークグループを削除できます。保存したクエリが含まれているワークグループを削除することもできます。この場合、ワークグループの削除に進む前に、Athena は保存されたクエリが削除されることを警告します。

344

Page 354: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループの管理

ワークグループにいる間にワークグループを削除した場合、コンソールは焦点をプライマリワークグループに切り替えます。アクセスできる場合は、クエリを実行して設定を表示します。

ワークグループを削除すると、その設定とクエリごとのデータ制限コントロールは削除されます。ワークグループ全体のデータ制限コントロールは、CloudWatch に保持され、必要に応じて削除できます。

Important

ワークグループを削除する前に、そのユーザーが引き続きクエリを実行できる他のワークグループに属していることを確認してください。ユーザーの IAM ポリシーにより、このワークグループでのみクエリを実行できる場合、ワークグループを削除すると、ユーザーはクエリを実行するアクセス権限を失います。詳細については、「Example Policy for Running Queries in the PrimaryWorkgroup (p. 338)」を参照してください。

コンソールでワークグループを削除するには

1. Athena コンソールで、[Workgroup (ワークグループ)<workgroup_name>] タブを選択します。[Workgroups (ワークグループ)] パネルが表示されます。

2. [Workgroups (ワークグループ)] パネルで、削除するワークグループを選択します。ワークグループの[View details (詳細の表示)] パネルが表示され、[Overview (概要)] タブが選択された状態になります。

3. [Delete workgroup (ワークグループの削除)] を選択して、削除を確認します。

API オペレーションでワークグループを削除するには、DeleteWorkGroup アクションを使用します。

ワークグループを切り替える両方のワークグループにアクセス権限がある場合は、あるワークグループから別のワークグループに切り替えることができます。

各ワークグループで最大 10 個のクエリタブを開くことができます。ワークグループを切り替えると、クエリタブは最大 3 つのワークグループに対して開いたままになります。

ワークグループを切り替えるには

1. Athena コンソールで、[Workgroup (ワークグループ)<workgroup_name>] タブを選択します。[Workgroups (ワークグループ)] パネルが表示されます。

2. [Workgroups (ワークグループ)] パネルで、切り替えるワークグループを選択し、次に [Switchworkgroup (ワークグループの切り替え)] を選択します。

3. [Switch (切り替え)] を選択します。コンソールには、切り替えたワークグループの名前の [Workgroup:(ワークグループ:)<workgroup_name>] タブが表示されます。これで、このワークグループでクエリを実行できます。

ワークグループの有効化および無効化アクセス権限がある場合は、API オペレーションを使用するか、JDBC および ODBC ドライバーを使用して、コンソールでワークグループを有効化または無効化できます。

345

Page 355: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena ワークグループ API

ワークグループを有効化または無効化するには

1. Athena コンソールで、[Workgroup (ワークグループ)<workgroup_name>] タブを選択します。[Workgroups (ワークグループ)] パネルが表示されます。

2. [Workgroups (ワークグループ)] パネルで、ワークグループを選択し、[Enable workgroup (ワークグループの有効化)] または [Disable workgroup (ワークグループの無効化)] を選択します。ワークグループを無効にすると、そのユーザーはその中でクエリを実行したり、新しい名前付きクエリを作成したりできません。ワークグループを有効にした場合、ユーザーはそれを使用してクエリを実行できます。

クエリを実行するワークグループの指定クエリを実行する前に、使用するワークグループを Athena に指定する必要があります。ワークグループに対するアクセス権限が必要です。

ワークグループを Athena に指定するには

1. 使用する予定のワークグループでクエリを実行できるアクセス権限であることを確認します。詳細については、「the section called “ ワークグループにアクセスするための IAM ポリシー” (p. 334)」を参照してください。

2. ワークグループを Athena に指定するには、次のいずれかのオプションを使用してください。

• コンソールを使用して Athena にアクセスしている場合は、ワークグループの切り替え (p. 345)でワークグループを設定します。

• Athena API オペレーションを使用している場合は、API アクションのワークグループ名を指定します。たとえば、次のように StartQueryExecution でワークグループ名を設定できます。

StartQueryExecutionRequest startQueryExecutionRequest = new StartQueryExecutionRequest() .withQueryString(ExampleConstants.ATHENA_SAMPLE_QUERY) .withQueryExecutionContext(queryExecutionContext) .withWorkGroup(WorkgroupName)

• JDBC または ODBC ドライバーを使用している場合、Workgroup 設定パラメータを使用して接続文字列にワークグループ名を設定します。ドライバーはワークグループ名を Athena に渡します。次の例のように、接続文字列にワークグループパラメータを指定します。

jdbc:awsathena://AwsRegion=<AWSREGION>;UID=<ACCESSKEY>;PWD=<SECRETKEY>;S3OutputLocation=s3://<athena-output>-<AWSREGION>/;Workgroup=<WORKGROUPNAME>;

詳細については、JDBC ドライバーのドキュメント (p. 72)に含まれているドライバーのドキュメントリンクで、「Workgroup」を検索してください。

Athena ワークグループ API以下に示しているのは、Athena ワークグループに使用される REST API オペレーションの一部です。ListWorkGroups を除く次のすべてのオペレーションで、ワークグループを指定する必要があります。StartQueryExecution のような他のオペレーションでは、ワークグループパラメータはオプションであり、オペレーションはここには一覧表示されません。オペレーションの詳細な一覧については、Amazon Athena API リファレンス を参照してください。

• CreateWorkGroup• DeleteWorkGroup

346

Page 356: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループのトラブルシューティング

• GetWorkGroup• ListWorkGroups• UpdateWorkGroup

ワークグループのトラブルシューティングワークグループのトラブルシューティングを行うには、以下のヒントを参考にしてください。

• アカウントの個々のユーザーのアクセス権限を確認します。それらは、クエリ結果の場所、およびクエリを実行するワークグループへのアクセス権を持っている必要があります。ワークグループを切り替える場合は、両方のワークグループに対するアクセス権限も必要です。詳細については、「ワークグループにアクセスするための IAM ポリシー (p. 334)」を参照してください。

• Athena コンソールのコンテキストに注意して、どのワークグループでクエリを実行するのかを確認してください。ドライバーを使用する場合は、ワークグループを必要なものに設定する必要があります。詳細については、「the section called “クエリを実行するワークグループの指定” (p. 346)」を参照してください。

• APIまたはドライバを使用してクエリーを実行する場合は、次のいずれかの方法を使用してクエリー結果の場所を指定する必要があります。個々のクエリーの場合は、 出力位置 (クライアント側)。ワークグループでは、 ワークグループ構成. どちらの方法でも場所が指定されていない場合は、 Athena クエリ実行時にエラーを発行します。

• クライアント側の設定をワークグループの設定で上書きすると、クエリ結果の場所でエラーが発生する可能性があります。たとえば、ワークグループのユーザーは、クエリ結果を保存するための Amazon S3のワークグループの場所に対するアクセス権限を持っていない可能性があります。この場合は、必要なアクセス権限を追加します。

• ワークグループは、API オペレーションの動作に変更を加えます。以下の既存の API オペレーションを呼び出すには、アカウントのユーザーが所属するワークグループへの IAM のリソースベースのアクセス権限を持っている必要があります。ワークグループとワークグループのアクションに対する権限が存在しない場合、次の API アクションが AccessDeniedException: 名前付きクエリを作成、 名前付きクエリを削除、 GetNamedQuery(名前付きクエリの取得)、 ListNamedQueries(リストネームドクエリ)、クエリ実行を開始、 クエリ実行の停止、 リストクエリ実行、 GetQueryExecution (GetQuery実行)、GetQueryResults (結果のクエリを取得)、および GetQueryResultsStream (GetQueryResultsStream) (このAPIアクションは、ドライバでのみ使用できます。一般に公開されることはありません)。詳細については、以下を参照してください。 Amazon Athenaのアクション、リソース、および条件キー の IAMユーザーガイド.

への通話 バッチ取得クエリ実行 および バッチGetNamedQuery API操作は、ユーザーがアクセスできるワークグループで実行されるクエリに関する情報のみを返します。ユーザがワークグループにアクセスできない場合、これらの API オペレーションは未処理の ID リストの一部として未承認クエリ ID を返します。詳細については、「the section called “ Athena ワークグループ API” (p. 346)」を参照してください。

• クエリが実行されるワークグループが強制されたクエリ結果の場所 (p. 340)で設定されている場合、CTAS クエリの external_location を指定しないでください。Athena でエラーが発生し、この場合 external_location を指定したクエリは失敗します。たとえば、クエリ結果の場所に関するクライアント側の設定を上書きし、ワークグループに独自の場所を使用するように強制すると、次のクエリは失敗します。CREATE TABLE <DB>.<TABLE1> WITH (format='Parquet',external_location='s3://my_test/test/') AS SELECT * FROM <DB>.<TABLE2> LIMIT10;

次のエラーが表示されることがあります。この表は、ワークグループに関連したエラーのリストを提供し、ソリューションを提案します。

347

Page 357: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudWatch メトリクスとイベントに

よるコスト管理とクエリのモニタリング

ワークグループのエラー

エラー 表示される場合

query state CANCELED. Bytes scannedlimit was exceeded.

クエリがクエリごとのデータ制限に達し、キャンセルされました。読み込むデータを少なくするためにクエリを書き換えることを検討するか、アカウント管理者に連絡してください。

User: arn:aws:iam::123456789012:user/abc is not authorized to perform:athena:StartQueryExecution onresource: arn:aws:athena:us-east-1:123456789012:workgroup/workgroupname

ユーザーがワークグループでクエリを実行しましたが、アクセスできません。ワークグループにアクセスできるようにポリシーを更新してください。

INVALID_INPUT. WorkGroup <name> isdisabled.

ユーザーがワークグループでクエリを実行しましたが、そのワークグループが無効になっています。ワークグループは管理者によって無効にされている可能性があります。また、アクセス権限がない可能性もあります。いずれの場合も、ワークグループを変更するアクセス権限を持つ管理者に連絡してください。

INVALID_INPUT. WorkGroup <name> is notfound.

ユーザーがワークグループでクエリを実行しましたが、そのワークグループが存在しません。ワークグループが削除された場合、このエラーが発生する可能性があります。別のワークグループに切り替えてクエリを実行してください。

InvalidRequestException: when callingthe StartQueryExecution operation: Nooutput location provided. An outputlocation is required either throughthe Workgroup result configurationsetting or as an API input.

ユーザーがクエリ結果の場所を指定せずに APIを使用してクエリを実行しました。2 つの方法のいずれかを使用して、クエリ結果の出力場所を設定する必要があります。個別のクエリの場合は「OutputLocation」 (クライアント側) を使用するか、ワークグループの場合は「WorkGroupConfiguration」を使用するかのいずれかです。

The Create Table As Select queryfailed because it was submitted withan 'external_location' property toan Athena Workgroup that enforcesa centralized output location forall queries. Please remove the'external_location' property andresubmit the query.

クエリが実行されるワークグループに、強制されたクエリ結果の場所 (p. 340)が設定されていて、CTAS クエリに external_location を指定しました。この場合、external_location を削除し、クエリを再実行します。

CloudWatch メトリクスとイベントによるコスト管理とクエリのモニタリング

ワークグループを使用すると、クエリごとまたはワークグループごとにデータ使用量の制御制限を設定し、それらの制限を超えたときにアラームを設定して、クエリメトリクスを CloudWatch に発行できます。

各ワークグループに、以下を行えます。

348

Page 358: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudWatch クエリメトリクスを有効にする

• クエリごとおよびワークグループごとに [Data usage controls (データ使用量の制御)] を設定し、クエリがしきい値を超えた場合に実行されるアクションを設定します。

• クエリメトリクスを表示および分析し、CloudWatch に発行します。コンソールでワークグループを作成すると、メトリクスを CloudWatch に発行するための設定が選択されます。API オペレーションを使用する場合は、メトリクスの発行を有効にする (p. 349)必要があります。メトリックが公開されると、指標 タブ( ワークグループ パネル。プライマリワークグループでは、メトリクスはデフォルトで無効になっています。

トピック• CloudWatch クエリメトリクスを有効にする (p. 349)• CloudWatch メトリクスを使用した Athena クエリのモニタリング (p. 349)• CloudWatch イベントを使用した Athena クエリのモニタリング (p. 353)• データ使用量の制御制限の設定 (p. 355)

CloudWatch クエリメトリクスを有効にするコンソールでワークグループを作成するときに、クエリメトリクスを CloudWatch に発行するための設定がデフォルトで選択されます。

ワークグループの Athena コンソールでクエリメトリクスを有効または無効にするには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [ワークグループ] タブを選択します。3. 変更するワークグループを選択し、[詳細の表示] を選択します。4. [Edit workgroup (ワークグループの編集)] を選択します。5. [ワークグループの編集] ページの [メトリクス] で、[クエリメトリクスを AWS CloudWatch に発行す

る] オプションをオンまたはオフにします。

API オペレーション、コマンドラインインターフェイス、または JDBC ドライバーを使用するクライアントアプリケーションでワークグループを作成して、クエリメトリクスを発行するには、WorkGroupConfiguration で、PublishCloudWatchMetricsEnabled を true に設定します。次の例では、メトリクス設定のみを示し、その他の設定は省略しています。

"WorkGroupConfiguration": { "PublishCloudWatchMetricsEnabled": "true" .... }

CloudWatch メトリクスを使用した Athena クエリのモニタリング[Publish to CloudWatch (CloudWatch に発行)] が選択されている場合、Athena は、クエリに関するメトリクスを Amazon CloudWatch に発行します。カスタムダッシュボードを作成したり、CloudWatch でメトリクスにアラームやトリガーを設定したり、Athena コンソールから事前に入力されているダッシュボードを使用できます。

ワークグループでクエリのクエリメトリックスを有効にすると、メトリックスは 指標 タブ( ワークグループ パネル( Athena コンソール。

Athena は、次のメトリクスを CloudWatch コンソールに発行します。

349

Page 359: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudWatch メトリクスを使用した Athena クエリのモニタリング

• EngineExecutionTime – ミリ秒単位• ProcessedBytes – DML クエリごとにスキャンされたデータの合計量• QueryPlanningTime – ミリ秒単位• QueryQueueTime – ミリ秒単位• ServiceProcessingTime – ミリ秒単位• TotalExecutionTime – DDL および DML クエリの場合、ミリ秒単位

これらのメトリクスには、次のディメンションがあります。

• QueryState – QUEUED、 RUNNING、 SUCCEEDED、 FAILED、または CANCELLED• QueryType – DML または DDL• WorkGroup – ワークグループの名前

詳細については、このトピックで後述する「CloudWatch メトリクスと Athena のディメンションの一覧表示 (p. 352)」を参照してください。

ワークグループのクエリメトリクスをコンソールに表示するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [Workgroup: (ワークグループ:)<name>] タブを選択します。

ワークグループのメトリクスを表示するために、そのワークグループに切り替える必要はなく、別のワークグループにとどまることができます。リストからワークグループを選択する必要があります。また、メトリクスを表示するアクセス権限が必要です。

3. リストからワークグループを選択して、[View details (詳細を表示)] を選択します。アクセス権限がある場合、ワークグループの詳細が [Overview (概要)] タブに表示されます。

4. [メトリクス] タブを選択します。

メトリクスダッシュボードが表示されます。

Note

ワークグループのメトリクスを最近有効にした場合や、最近のクエリアクティビティがない場合は、ダッシュボードのグラフが空になる可能性があります。クエリアクティビティは、次のステップで指定した間隔に応じて CloudWatch から取得されます。

5. CloudWatch からクエリメトリクスをフェッチするために Athena が使用するメトリクス間隔を選択するか、カスタム間隔を指定します。

350

Page 360: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudWatch メトリクスを使用した Athena クエリのモニタリング

6. 表示されたメトリクスを更新するには、更新アイコンを選択します。

7. 更新アイコンの横にある下向き矢印をクリックして、[自動更新] オプションとメトリクス表示の更新間隔を選択します。

Amazon CloudWatch コンソールでメトリクスを表示するには

1. Amazon CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/) を開きます。2. ナビゲーションペインで [メトリクス] を選択します。3. AWS/Athena 名前空間を選択します。

CLI を使用してメトリクスを表示するには

351

Page 361: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudWatch メトリクスを使用した Athena クエリのモニタリング

• コマンドプロンプトを開き、次のコマンドを使用します。

aws cloudwatch list-metrics --namespace "AWS/Athena"

• すべての使用可能なメトリクスのリストを表示するには、次のコマンドを使用します。

aws cloudwatch list-metrics --namespace "AWS/Athena"

CloudWatch メトリクスと Athena のディメンションの一覧表示Athena の CloudWatch メトリクスを有効にしている場合、ワークグループごとに CloudWatch に次のメトリクスを送信します。メトリクスは AWS/Athena 名前空間を使用します。

メトリクス名 説明:

EngineExecutionTime クエリの実行に要したミリ秒数。

ProcessedBytes Athena が DML クエリごとにスキャンしたデータの量 (メガバイト)(ユーザーによって、または制限に達した場合は自動的に) キャンセルされたクエリの場合、キャンセル前にスキャンされたデータの量も含まれます。このメトリクスは、DDL または CTAS クエリではレポートされません。

QueryPlanningTime Athena でクエリ処理フローの計画にかかったミリ秒数。データソースからテーブルパーティションを取得するのにかかる時間も含みます。クエリエンジンがクエリの計画を実行するため、クエリの計画時間は EngineExecutionTime のサブセットであることに注意してください。

QueryQueueTime クエリがリソースを待ってキューに並んでいたミリ秒数。一時的なエラーが発生した場合は、クエリを自動的にキューに追加し直すことができます。

ServiceProcessingTime ミリ秒単位で、 Athena は、クエリエンジンがクエリの実行を終了した後に、クエリ結果の処理を行いました。

TotalExecutionTime Athena が DDL クエリまたは DML クエリの実行にかかったミリ秒数。TotalExecutionTime には、QueryQueueTime、QueryPlanningTime、EngineExecutionTime、ServiceProcessingTimeが含まれます。

Athena の CloudWatch メトリクスには、次のディメンションがあります。

ディメンション: 説明:

QueryState クエリの状態。

有効な統計:QUEUED、RUNNING、SUCCEED、FAILED、CANCELED。

352

Page 362: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudWatch イベントを使用し

た Athena クエリのモニタリング

ディメンション: 説明:

Note

Athena は、特定の一時的なエラーの場合、クエリを自動的に再試行します。その結果、クエリの状態が「実行中」または「失敗」から「キューに追加済み」に移行することがあります。

QueryType クエリタイプ。

有効な統計: DDL または DML.

WorkGroup ワークグループの名前。

CloudWatch イベントを使用した Athena クエリのモニタリングAmazon Athena と Amazon CloudWatch を使用して、クエリの状態に関するリアルタイムの通知を受け取ることができます。送信したクエリの状態が移行すると、Athena はそのクエリ状態移行に関する情報を含むイベントを CloudWatch イベント に発行します。関心のあるイベントのシンプルなルールを作成し、イベントがルールに一致したときに自動化されたアクションが実行されるようにできます。たとえば、クエリが最終状態に達したときに AWS Lambda 関数を呼び出すルールを作成できます。

Athena のイベントルールを作成する前に、以下のことを行う必要があります。

• CloudWatch イベント のイベント、ルール、ターゲットに精通しておいてください。詳細については、「Amazon CloudWatch イベントとは」を参照してください。ルールの設定方法の詳細については、「CloudWatch イベント の開始方法」を参照してください。

• イベントのルールで使用するターゲットを作成します。

Note

Athena では現在、イベントの 1 タイプとして、Athena クエリ状態変更イベントが用意されていますが、他のタイプのイベントと詳細が追加されている可能性があります。イベントの JSONデータをプログラムで逆シリアル化する場合は、不明なプロパティが追加されているときにアプリケーションで対応する準備ができていることを確認してください。

Athena イベントの形式以下に示しているのは、Amazon Athena イベントの基本的なパターンです。

{ "source":[ "aws.athena" ], "detail-type":[ "Athena Query State Change" ], "detail":{ "currentState":[ "SUCCEEDED" ] }}

353

Page 363: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudWatch イベントを使用し

た Athena クエリのモニタリング

Athena クエリ状態変更イベント以下に示しているのは、Athena クエリ状態変更イベントの形式です。

{ "version":"0", "id":"abcdef00-1234-5678-9abc-def012345678", "detail-type":"Athena Query State Change", "source":"aws.athena", "account":"123456789012", "time":"2019-10-06T09:30:10Z", "region":"us-east-1", "resources":[

], "detail":{ "versionId":"0", "currentState":"SUCCEEDED", "previousState":"RUNNING", "statementType":"DDL", "queryExecutionId":"01234567-0123-0123-0123-012345678901", "workgroupName":"primary", "sequenceNumber":"3" }}

出力プロパティ

JSON 出力には、以下のプロパティが含まれます。

プロパティ 説明:

versionId 詳細オブジェクトのスキーマのバージョン番号。

currentState イベント発生時のクエリの移行後の状態。

previousState イベント発生時のクエリの移行前の状態。

statementType 実行されたクエリステートメントのタイプ。

queryExecutionId 実行されたクエリの一意の識別子。

workgroupName クエリが実行されたワークグループの名前。

sequenceNumber 重複排除と、1つのクエリーが実行される受信イベントのオーダーを可能にする、単調な増加数。同じ状態移行に対して重複するイベントが発行された場合、sequenceNumber 値は同じです。再キューイングがまれに発生するクエリなど、状態移行が複数回発生するクエリの場合は、sequenceNumber を使用して、currentState および previousState 値が同じイベントを順序付けできます。

Example以下の例では、サブスクライブした Amazon SNS トピックにイベントを発行しています。Athena がクエリされると、E メールを受信します。この例では、Amazon SNS トピックが存在し、そのトピックにサブスクライブしていることを前提としています。

354

Page 364: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータ使用量の制御制限の設定

Athena イベントを Amazon SNS トピックに発行するには

1. Amazon SNS トピックのターゲットを作成します。以下の例のように、CloudWatch イベント サービスプリンシパル events.amazonaws.com に Amazon SNS トピックへの発行アクセス許可を付与します。

{ "Effect":"Allow", "Principal":{ "Service":"events.amazonaws.com" }, "Action":"sns:Publish", "Resource":"arn:aws:sns:us-east-1:111111111111:your-sns-topic"}

2. 以下の例のように、AWS CLI events put-rule コマンドを使用して Athena イベントのルールを作成します。

aws events put-rule --name {ruleName} --event-pattern '{"source": ["aws.athena"]}'

3. 以下の例のように、AWS CLI events put-targets コマンドを使用して Amazon SNS トピックターゲットをルールにアタッチします。

aws events put-targets --rule {ruleName} --targets Id=1,Arn=arn:aws:sns:us-east-1:111111111111:your-sns-topic

4. Athena をクエリし、呼び出されるターゲットを確認します。Amazon SNS トピックから対応する Eメールを受信します。

データ使用量の制御制限の設定Athena では、クエリごとの制限とワークグループごとの制限の 2 種類のコスト管理を設定できます。ワークグループごとに、クエリごとの制限を 1 つとワークグループごとの制限を複数設定できます。

• クエリごとの制御制限は、クエリごとにスキャンされるデータの合計量を指定します。ワークグループで実行されるクエリが制限を超えると、キャンセルされます。ワークグループに作成できるクエリごとの制御制限は 1 つだけであり、その中で実行される各クエリに適用されます。変更する必要がある場合は、制限を編集します。詳細なステップについては、「クエリごとにデータ使用量の制御を作成するには (p. 356)」を参照してください。

• ワークグループ全体のデータ使用量の制御制限は、指定された期間中にこのワークグループで実行されるすべてのクエリに対してスキャンされるデータの合計量を指定します。ワークグループごとに複数の制限を作成できます。ワークグループ全体のクエリ制限を使用すると、ワークグループで実行されているクエリによってスキャンされたデータの時間単位または日単位の集計に複数のしきい値を設定できます。

スキャンされたデータの合計量がしきい値を超えた場合は、次のいずれかのアクションを実行するように選択できます。• 制限を超えるときに管理者に通知するように Amazon SNS アラームおよび Athena コンソールのアク

ションを設定します。詳細なステップについては、「ワークグループごとにデータ使用量の制御を作成するには (p. 357)」を参照してください。Athena が CloudWatch コンソールから発行する任意のメトリクスでアラームとアクションを作成することもできます。たとえば、失敗した多くのクエリに対してアラートを設定できます。このアラートは、数が特定のしきい値を超えた場合に管理者への Eメールをトリガーできます。制限を超えた場合、指定されたユーザーに Amazon SNS アラーム通知がアクションにより送信されます。

• Lambda 関数を呼び出す 詳細については、以下を参照してください。 呼び出す Lambda 関数使用カンスウ:シヨウ Amazon SNS 通知 の Amazon Simple Notification Service 開発者ガイド.

355

Page 365: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータ使用量の制御制限の設定

• ワークグループを無効にして、以降のクエリが実行されないようにします。

クエリごと、ワークグループごとの制限は相互に独立しています。指定したどちらかの制限を超えた場合にアクションが実行されます。複数のユーザーが同じワークグループで同時にクエリを実行した場合、各クエリは指定された制限を超えないものの、スキャンされたデータの合計がワークグループごとのデータ使用制限を超える可能性があります。この場合、Amazon SNS アラームがユーザーに送信されます。

クエリごとのデータ使用量の制御を作成するには

クエリごとの制御制限は、クエリごとにスキャンされるデータの合計量を指定します。ワークグループで実行されるクエリが制限を超えると、キャンセルされます。キャンセルされたクエリは、Amazon Athena料金表に基づいて課金されます。

Note

キャンセルまたは失敗したクエリの場合、Athena は既に部分的な結果を Amazon S3 に書き込んでいる可能性があります。このような場合、Athena は結果が保存されている Amazon S3 プレフィックスから部分的な結果を削除しません。部分的な結果を含む Amazon S3 プレフィックスを削除する必要があります。Athena は Amazon S3 マルチパートアップロードを使用してAmazon S3 にデータを書き込みます。クエリが失敗した場合は、バケットライフサイクルポリシーを設定してマルチパートアップロードを終了することをお勧めします。詳細については、『https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config』の「Amazon Simple Storage Service 開発者ガイドバケットライフサイクルポリシーを使用した不完全なマルチパートアップロードの中止」を参照してください。

ワークグループに作成できるクエリごとの制御制限は 1 つだけであり、その中で実行される各クエリに適用されます。変更する必要がある場合は、制限を編集します。

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [ワークグループ] タブを選択します。

特定のワークグループのクエリに対するデータ使用量の制御を作成するために、そのワークグループに切り替える必要はなく、別のワークグループにとどまることができます。リストからワークグループを選択することと、ワークグループを編集するアクセス権限があることが必要です。

3. リストからワークグループを選択して、[View details (詳細を表示)] を選択します。アクセス権限がある場合、ワークグループの詳細が [Overview (概要)] タブに表示されます。

4. [Data usage controls (データ使用量の制御)] タブを選択します。

356

Page 366: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータ使用量の制御制限の設定

5. の クエリデータ利用制御毎 セクションで、フィールド値を次のように指定します。

• 対象: データ制限、10000 KB(最小)から7000000 TB(最大)までの値を指定します。

Note

これらはワークグループのデータ使用量の制御のためにコンソールによって設定される制限です。Athena でのクエリの制限を表すものではありません。

• 単位の場合は、ドロップダウンリストから単位の値を選択します(KB、MB、GB、またはTB)。• デフォルトの [Action (アクション)] は、制限を超えた場合にクエリをキャンセルします。この設定

は変更できません。6. 新しい制限を作成するために [Create (作成)] を選択するか、既存の制限を編集するために [Update (更

新)] を選択します。既存の制限を編集する場合は、[Overview (概要)] タブを更新して更新された制限を表示します。

ワークグループごとのデータ使用量の制御を作成するには

ワークグループ全体のデータ使用量の制御制限は、指定された期間中にこのワークグループで実行されるすべてのクエリに対してスキャンされるデータの合計量を指定します。ワークグループごとに複数の制御を作成できます。制限を超えた場合、指定されたユーザーに Amazon SNS アラーム通知を送信するなど、実行するアクションを選択できます。

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. [ワークグループ] タブを選択します。

357

Page 367: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータ使用量の制御制限の設定

特定のワークグループに対するデータ使用量の制御を作成するために、そのワークグループに切り替える必要はなく、別のワークグループにとどまることができます。リストからワークグループを選択することと、ワークグループを編集するアクセス権限があることが必要です。

3. リストからワークグループを選択して、[View details (詳細を表示)] を選択します。編集権限がある場合、ワークグループの詳細が [Overview (概要)] タブに表示されます。

4. [Data usage controls (データ使用量の制御)] タブを選択して、下へスクロールします。次に ワークグループデータ使用コントロール 新しい限度を作成するか、既存の限度を編集します。[Createworkgroup data usage control (ワークグループのデータ使用量の制御の作成)] ダイアログが表示されます。

5. 次のようにフィールド値を指定します。

• 対象: データ制限、10 MB(最小)から7000000 TB(最大)までの値を指定します。

Note

これらはワークグループのデータ使用量の制御のためにコンソールによって設定される制限です。Athena でのクエリの制限を表すものではありません。

• 単位については、ドロップダウンリストから単位の値を選択します。• 期間については、ドロップダウンリストから期間を選択します。• 対象: アクション、 Amazon SNS トピック(設定済みの場合) または、[Create an Amazon SNS topic

(Amazon SNS トピックの作成)] を選択して、Amazon SNS コンソールに直接移動して、AmazonSNS トピックを作成して、Athena アカウントのユーザーの 1 人にサブスクリプションを設定します。詳細については、以下を参照してください。 の作成 Amazon SNS トピック の Amazon SimpleNotification Service 入門ガイド.

6. 新しい制限を作成するために [Create (作成)] を選択するか、既存の制限を編集するために [Save (保存)] を選択します。既存の制限を編集する場合は、ワークグループの [Overview (概要)] タブを更新して更新された制限を表示します。

358

Page 368: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドタグの基本

リソースのタグ付けタグは、1 つのキーと 1 つの値で構成されており、どちらもお客様側が定義します。Athena リソースにタグを付けるときは、カスタムメタデータを割り当てます。タグを使用すると、AWS リソースを目的、所有者、環境などさまざまな方法で分類することができます。Athena では、ワークグループとデータカタログはタグ付け可能なリソースです。たとえば、アカウントにワークグループの一連のタグを作成して、ワークグループの所有者を追跡したり、目的によってワークグループを識別したりできます。AWS タグ付けのベストプラクティスを使用して、組織の要件に適合する一連の一貫したタグを作成することをお勧めします。

タグは、Athena コンソール、または API オペレーションを使用して操作できます。

トピック• タグの基本 (p. 359)• タグの制限 (p. 360)• コンソールでのワークグループのタグの操作 (p. 360)• タグオペレーションの使用 (p. 361)• タグベースの IAM アクセスコントロールポリシー (p. 365)

タグの基本タグとは、Athena リソースに付けるラベルです。タグはそれぞれ、1 つのキーとオプションの 1 つの値で構成されており、どちらもお客様側が定義します。

タグを使用すると、さまざまな方法で AWS リソースを分類できます。たとえば、各ワークグループの所有者または目的を追跡しやすくするため、アカウントのワークグループに対して一連のタグを定義できます。

新しい Athena ワークグループまたはデータカタログを作成するときにタグを追加でき、それらのワークグループまたはデータカタログを対象にタグを追加、編集、または削除できます。タグは、コンソールで編集できます。API オペレーションを使用してタグを編集するには、古いタグを削除して新しいタグを追加します。リソースを削除すると、リソースのタグも削除されます。

Athena では、リソースに自動的にタグを割り当てることはありません。タグのキーと値は編集でき、タグはリソースからいつでも削除できます。タグの値を空の文字列に設定することはできますが、タグの値をnull に設定することはできません。同じリソースに重複したタグキーを追加しないでください。そのようにした場合には、Athena はエラーメッセージを発行します。TagResource アクションを使用して、既存のタグキーを使用してリソースにタグを付けると、新しいタグ値によって古い値が上書きされます。

IAM では、AWS アカウント内のユーザーに対してタグを作成、編集、削除、一覧表示するアクセス許可を割り当てることができます。詳細については、「タグベースの IAM アクセスコントロールポリシー (p. 365)」を参照してください。

すべての Amazon Athena タグアクションのリストについては、Amazon Athena API リファレンス で APIアクション名を参照してください。

タグは請求に使用できます。詳細については、AWS Billing and Cost Management ユーザーガイドの「請求用のタグの使用」を参照してください。

359

Page 369: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドタグの制限

詳細については、「タグの制限 (p. 360)」を参照してください。

タグの制限タグには、次の制約があります。

• Athena では、ワークグループとデータカタログにタグを付けることができます。クエリにタグを付けることはできません。

• リソースあたりのタグの最大数は 50 です。制限内に収まるようにするには、未使用のタグを確認して削除します。

• タグキーは、リソースごとにそれぞれ一意である必要があります。また、各タグキーに設定できる値は1 つのみです。同じリソースに重複したタグキーを同時に追加しないでください。そのようにした場合には、Athena はエラーメッセージを発行します。別の TagResource アクションで既存のタグキーを使用してリソースにタグを付けると、新しいタグ値によって古い値が上書きされます。

• タグキーの長さは、1~128 文字 (Unicode) (UTF-8) です。• タグ値の長さは、0~256 文字 (Unicode) (UTF-8) です。

タグの追加、編集、削除、一覧表示などのタグ付けオペレーションでは、ワークグループリソースのARN を指定する必要があります。

• Athena では、文字、数字、UTF-8 で表現されたスペース、および + - = . _ : / @ の文字を使用できます。

• タグのキーと値は大文字と小文字が区別されます。• タグキーの "aws:" プレフィックスは、AWS 用に予約されています。このプレフィックスが含まれる

タグキーを編集したり削除することはできません。このプレフィックスを持つタグは、リソースあたりのタグ数の制限時には計算されません。

• 割り当てたタグは、お客様の AWS アカウントだけに使用できます。

コンソールでのワークグループのタグの操作Athena コンソールを使用すると、アカウントの各ワークグループでどのタグが使用されているかを確認できます。ワークグループでのみタグを表示できます。また、Athena コンソールを使用して、一度に 1 つのワークグループについてタグの適用、編集、または削除を行うことができます。

作成したタグを使用してワークグループを検索できます。

トピック• 個々のワークグループのタグを表示する (p. 360)• 個々のワークグループでのタグの追加と削除 (p. 361)

個々のワークグループのタグを表示するAthena コンソールに個々のワークグループのタグを表示できます。

ワークグループのタグのリストを表示するには、ワークグループを選択して、[View Details (詳細を表示)] を選択し、[Tags (タグ)] タブを選択します。ワークグループのタグのリストが表示されます。[EditWorkgroup (ワークグループの編集)] を選択した場合、ワークグループのタグを表示することもできます。

タグを検索するには、[タグ] タブを選択し、検索ツールにタグ名を入力します。

360

Page 370: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド個々のワークグループでのタグの追加と削除

個々のワークグループでのタグの追加と削除[Workgroups (ワークグループ)] タブから、個々のワークグループのタグを直接管理できます。

Note

ユーザーがコンソールでワークグループを作成するときにタグを追加したり、CreateWorkGroupアクションを使用するときにタグを渡したりできるようにする場合は、TagResource アクションと CreateWorkGroup アクションへの IAM アクセス許可をユーザーに付与してください。

新しいワークグループを作成するときにタグを追加するには

1. Athena コンソール (https://console.aws.amazon.com/athena/) を開きます。2. ナビゲーションメニューで、[Workgroups (ワークグループ)] タブを選択します。3. [Create workgroup (ワークグループの作成)] を選択して、必要に応じて値を入力します。詳細なス

テップについては、「ワークグループの作成 (p. 341)」を参照してください。4. キーと値を指定して、1 つ以上のタグを追加します。同じワークグループに重複したタグキーを同時

に追加しないでください。そのようにした場合には、Athena はエラーメッセージを発行します。詳細については、「タグの制限 (p. 360)」を参照してください。

5. 終了したら、[ワークグループを作成する] を選択します。

既存のワークグループにタグを追加または編集するには

1. https://console.aws.amazon.com/athena/ で Athena コンソールを開いて、[Workgroups (ワークグループ)] タブを選択して、ワークグループを選択します。

2. [View details] を選択します。3. 次のいずれかを行ってください。

• [タグ] タブを選択し、[タグ管理] を選択します。• [ワークグループの編集] を選択し、[タグ] セクションまで下にスクロールします。

4. タグごとにキーと値を指定します。詳細については、「タグの制限 (p. 360)」を参照してください。5. [Save] を選択します。

個々のワークグループからタグを削除するには

1. Athena コンソールを開き、[Workgroups (ワークグループ)] タブを選択します。2. ワークグループのリストで、ワークグループを選択し、[詳細を表示する] を選択します。3. 次のいずれかを行ってください。

• [タグ] タブを選択し、[タグ管理] を選択します。• [ワークグループの編集] を選択し、[タグ] セクションまで下にスクロールします。

4. タグのリストで、削除するタグの [削除] ボタン ([x]) を選択し、[保存] を選択します。

タグオペレーションの使用次のタグオペレーションを使用して、リソースのタグを追加、削除、または一覧表示します。

API CLI アクションの説明

TagResource tag-resource 指定した ARN を持つリソースの 1 つ以上のタグを追加または上書きします。

361

Page 371: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAPI オペレーションを使用したタグの管理

API CLI アクションの説明

UntagResource untag-resource

指定した ARN を持つリソースから 1 つ以上のタグを削除します。

ListTagsForResourcelist#tags#for#resource指定した ARN を持つリソースの 1 つ以上のタグを一覧表示します。

リソースの作成時のタグの追加

ワークグループまたはデータカタログの作成時にタグを追加するには、tags パラメータをCreateWorkGroup または CreateDataCatalog API オペレーション、あるいは AWS CLI の create-work-group または create-data-catalog コマンドで使用します。

API オペレーションを使用したタグの管理このセクションの例では、タグ API オペレーションを使用してワークグループとデータカタログのタグを管理する方法を示します。例は、Java プログラミング言語で記述されています。

Example TagResource

次の例では、ワークグループ workgroupA に 2 つのタグを追加します。

List<Tag> tags = new ArrayList<>();tags.add(new Tag().withKey("tagKey1").withValue("tagValue1"));tags.add(new Tag().withKey("tagKey2").withValue("tagValue2"));

TagResourceRequest request = new TagResourceRequest() .withResourceARN("arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA") .withTags(tags);

client.tagResource(request);

次の例では、データカタログ datacatalogA に 2 つのタグを追加します。

List<Tag> tags = new ArrayList<>();tags.add(new Tag().withKey("tagKey1").withValue("tagValue1"));tags.add(new Tag().withKey("tagKey2").withValue("tagValue2"));

TagResourceRequest request = new TagResourceRequest() .withResourceARN("arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA") .withTags(tags);

client.tagResource(request);

Note

同じリソースに重複したタグキーを追加しないでください。そのようにした場合には、Athena はエラーメッセージを発行します。別の TagResource アクションで既存のタグキーを使用してリソースにタグを付けると、新しいタグ値によって古い値が上書きされます。

Example UntagResource

次の例では、ワークグループ workgroupA から tagKey2 を削除します。

List<String> tagKeys = new ArrayList<>();

362

Page 372: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CLI を使用したタグの管理

tagKeys.add("tagKey2");

UntagResourceRequest request = new UntagResourceRequest() .withResourceARN("arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA") .withTagKeys(tagKeys);

client.untagResource(request);

次の例では、データカタログ datacatalogA から tagKey2 を削除します。

List<String> tagKeys = new ArrayList<>();tagKeys.add("tagKey2");

UntagResourceRequest request = new UntagResourceRequest() .withResourceARN("arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA") .withTagKeys(tagKeys);

client.untagResource(request);

Example ListTagsForResource

次の例では、ワークグループ workgroupA のタグを一覧表示します。

ListTagsForResourceRequest request = new ListTagsForResourceRequest() .withResourceARN("arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA");

ListTagsForResourceResult result = client.listTagsForResource(request);

List<Tag> resultTags = result.getTags();

次の例では、データカタログ datacatalogA のタグを一覧表示します。

ListTagsForResourceRequest request = new ListTagsForResourceRequest() .withResourceARN("arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA");

ListTagsForResourceResult result = client.listTagsForResource(request);

List<Tag> resultTags = result.getTags();

AWS CLI を使用したタグの管理以下のセクションでは、AWS CLI を使用してデータカタログのタグを作成および管理する方法を示します。

リソースへのタグの追加: tag-resourcetag-resource コマンドは、指定されたリソースに 1 つ以上のタグを追加します。

構文

aws athena tag-resource --resource-arnarn:aws:athena:region:account_id:datacatalog/catalog_name --tagsKey=string,Value=string Key=string,Value=string

--resource-arn パラメータは、タグを追加するリソースを指定します。--tags パラメータは、リソースにタグとして追加するスペース区切りのキー/値ペアのリストを指定します。

363

Page 373: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CLI を使用したタグの管理

Example

次の例では、mydatacatalog データカタログにタグを追加します。

aws athena tag-resource --resource-arn arn:aws:athena:us-east-1:111122223333:datacatalog/mydatacatalog --tags Key=Color,Value=Orange Key=Time,Value=Now

結果を表示するには、list-tags-for-resource コマンドを使用します。

create-data-catalog コマンドの使用時にタグを追加する方法の詳細については、「カタログの登録:データカタログの作成 (p. 49)」を参照してください。

リソースのタグの一覧表示: list-tags-for-resourcelist-tags-for-resource コマンドは、指定されたリソースのタグを一覧表示します。

構文

aws athena list-tags-for-resource --resource-arnarn:aws:athena:region:account_id:datacatalog/catalog_name

--resource-arn パラメータは、タグを一覧表示するリソースを指定します。

次の例では、mydatacatalog データカタログのタグを一覧表示します。

aws athena list-tags-for-resource --resource-arn arn:aws:athena:us-east-1:111122223333:datacatalog/mydatacatalog

次のサンプル結果は JSON 形式です。

{ "Tags": [ { "Key": "Time", "Value": "Now" }, { "Key": "Color", "Value": "Orange" } ]}

リソースからのタグの削除: untag-resourceuntag-resource コマンドは、指定されたタグキーとその関連値を、指定されたリソースから削除します。

構文

aws athena untag-resource --resource-arnarn:aws:athena:region:account_id:datacatalog/catalog_name --tag-keys key_name[key_name ...]

--resource-arn パラメータは、タグを削除するリソースを指定します。--tag-keys パラメータは、キー名のスペース区切りリストを取ります。untag-resource コマンドは、指定されたキー名ごとに、キーとその値の両方を削除します。

364

Page 374: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドタグベースの IAM アクセスコントロールポリシー

次の例では、mydatacatalog カタログリソースから Color および Time キーとそれぞれの値を削除します。

aws athena untag-resource --resource-arn arn:aws:athena:us-east-1:111122223333:datacatalog/mydatacatalog --tag-keys Color Time

タグベースの IAM アクセスコントロールポリシータグが含まれるため、タグに基づいてリソースへのアクセスを制御するための Condition ブロックを含む IAM ポリシーを作成できます。

ワークグループのタグポリシーの例Example 1.基本的なタグ付けポリシー

次の IAM ポリシーでは、クエリを実行し、workgroupA という名前のワークグループのタグを操作できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:ListWorkGroups", "athena:GetExecutionEngine", "athena:GetExecutionEngines", "athena:GetNamespace", "athena:GetCatalogs", "athena:GetNamespaces", "athena:GetTables", "athena:GetTable" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery", "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution", "athena:GetQueryResultsStream", "athena:GetQueryExecutions", "athena:ListNamedQueries", "athena:CreateNamedQuery", "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution", "athena:GetWorkGroup", "athena:TagResource", "athena:UntagResource", "athena:ListTagsForResource" ], "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/workgroupA" } ]

365

Page 375: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドワークグループのタグポリシーの例

}

Example 2: タグキーとタグ値のペアに基づいてワークグループに対するアクションを拒否するポリシーブロック

ワークグループなどのリソースに関連付けられたタグは、リソースタグと呼ばれます。リソースタグを使用すると、stack、production などのキー/値ペアでタグ付けされたワークグループに対してリストされているアクションを拒否する、次のようなポリシーブロックを作成できます。

{ "Effect": "Deny", "Action": [ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery", "athena:UpdateWorkGroup", "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:GetWorkGroup", "athena:StopQueryExecution", "athena:GetQueryResultsStream", "athena:GetQueryExecutions", "athena:ListNamedQueries", "athena:CreateNamedQuery", "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution", "athena:TagResource", "athena:UntagResource", "athena:ListTagsForResource" ], "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/*", "Condition": { "StringEquals": { "aws:ResourceTag/stack": "production" } }}

Example 3.タグ変更アクションリクエストを指定のタグに制限するポリシーブロック

タグを変更するオペレーション (TagResource、UntagResource、タグを指定した CreateWorkGroupなど) にパラメータとして渡されるタグは、リクエストタグと呼ばれます。次のポリシーブロックの例では、渡されたタグのいずれかがキー costcenter と値 1、2、または 3 を持つ場合にのみ、CreateWorkGroup オペレーションを許可します。

Note

IAM ユーザーが CreateWorkGroup オペレーションの一部としてタグを渡すことを許可する場合は、TagResource アクションと CreateWorkGroup アクションへのアクセス許可をユーザーに付与してください。

{ "Effect": "Allow", "Action": [ "athena:CreateWorkGroup", "athena:TagResource" ], "Resource": "arn:aws:athena:us-east-1:123456789012:workgroup/*", "Condition": { "StringEquals": { "aws:RequestTag/costcenter": [

366

Page 376: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータカタログのタグポリシーの例

"1", "2", "3" ] } }}

データカタログのタグポリシーの例Example 1.基本的なタグ付けポリシー

次の IAM ポリシーでは、datacatalogA という名前のデータカタログのタグを操作できます。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "athena:ListWorkGroups", "athena:ListDataCatalogs", "athena:GetExecutionEngine", "athena:GetExecutionEngines", "athena:GetNamespace", "athena:GetNamespaces", "athena:GetTables", "athena:GetTable" ], "Resource":"*" }, { "Effect":"Allow", "Action":[ "athena:StartQueryExecution", "athena:GetQueryResults", "athena:DeleteNamedQuery", "athena:GetNamedQuery", "athena:ListQueryExecutions", "athena:StopQueryExecution", "athena:GetQueryResultsStream", "athena:GetQueryExecutions", "athena:ListNamedQueries", "athena:CreateNamedQuery", "athena:GetQueryExecution", "athena:BatchGetNamedQuery", "athena:BatchGetQueryExecution", "athena:GetWorkGroup", "athena:TagResource", "athena:UntagResource", "athena:ListTagsForResource" ], "Resource": [ "arn:aws:athena:us-east-1:123456789012:workgroup/*" ] }, { "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:DeleteDataCatalog", "athena:GetDataCatalog", "athena:GetDatabase",

367

Page 377: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータカタログのタグポリシーの例

"athena:GetTableMetadata", "athena:ListDatabases", "athena:ListTableMetadata", "athena:UpdateDataCatalog", "athena:TagResource", "athena:UntagResource", "athena:ListTagsForResource" ], "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/datacatalogA" } ]}

Example 2: タグキーとタグ値のペアに基づいてデータカタログに対するアクションを拒否するポリシーブロック

リソースタグを使用すると、特定のタグのキー/値ペアでタグ付けされたデータカタログに対して特定のアクションを拒否するポリシーブロックを作成できます。次のポリシーの例では、タグのキー/値ペアstack, production を持つデータカタログに対するアクションを拒否します。

{ "Effect":"Deny", "Action":[ "athena:CreateDataCatalog", "athena:DeleteDataCatalog", "athena:GetDataCatalog", "athena:GetDatabase", "athena:GetTableMetadata", "athena:ListDatabases", "athena:ListTableMetadata", "athena:UpdateDataCatalog", "athena:StartQueryExecution", "athena:TagResource", "athena:UntagResource", "athena:ListTagsForResource" ], "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/*", "Condition":{ "StringEquals":{ "aws:ResourceTag/stack":"production" } }}

Example 3.タグ変更アクションリクエストを指定のタグに制限するポリシーブロック

タグを変更するオペレーション (TagResource、UntagResource、タグを指定したCreateDataCatalog など) にパラメータとして渡されるタグは、リクエストタグと呼ばれます。次のポリシーブロックの例では、渡されたタグのいずれかがキー costcenter と値 1、2、または 3 を持つ場合にのみ、CreateDataCatalog オペレーションを許可します。

Note

IAM ユーザーが CreateDataCatalog オペレーションの一部としてタグを渡すことを許可する場合は、TagResource アクションと CreateDataCatalog アクションへのアクセス許可をユーザーに付与してください。

{ "Effect":"Allow", "Action":[ "athena:CreateDataCatalog", "athena:TagResource"

368

Page 378: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドデータカタログのタグポリシーの例

], "Resource":"arn:aws:athena:us-east-1:123456789012:datacatalog/*", "Condition":{ "StringEquals":{ "aws:RequestTag/costcenter":[ "1", "2", "3" ] } }}

369

Page 379: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CloudTrail を使用した Amazon

Athena API コールのログ記録

ログのモニタリングとトラブルシューティング

CloudTrail ログを使用して Athena リクエストを確認し、クエリをトラブルシューティングします。

トピック• AWS CloudTrail を使用した Amazon Athena API コールのログ記録 (p. 370)• トラブルシューティング (p. 373)

AWS CloudTrail を使用した Amazon Athena APIコールのログ記録

Athena は、Athena のユーザーやロール、または AWS のサービスによって実行されたアクションを記録するサービスである AWS CloudTrail と統合されています。

CloudTrail は、Athena のすべての API コールをイベントとしてキャプチャします。キャプチャされた呼び出しには、Athena コンソールの呼び出しと、Athena API オペレーションへのコード呼び出しが含まれます。証跡を作成する場合は、Athena のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの [Eventhistory (イベント履歴)] で最新のイベントを表示できます。

CloudTrail によって収集された情報を使用して、リクエストの作成元の IP アドレス、リクエストの実行者、リクエストの実行日時などの詳細を調べて、Athena に対してどのようなリクエストが行われたかを判断できます。

CloudTrail の詳細については、「AWS CloudTrail User Guide」を参照してください。

Athena を使用して CloudTrail のログファイルをクエリし、正しい情報を得ることもできます。詳細については、「AWS CloudTrail ログのクエリ (p. 206)」および「CloudTrail SerDe (p. 379)」を参照してください。

CloudTrail 内の Athena 情報CloudTrail は、アカウント作成時に AWS アカウントで有効になります。Athena でアクティビティが発生すると、そのアクティビティは [Event history (イベント履歴)] の AWS の他のサービスのイベントとともに CloudTrail イベントに記録されます。最近のイベントは、AWS アカウントで表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でのイベントの表示」を参照してください。

Athena のイベントなど、AWS アカウントのイベントの継続的な記録については、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで作成した証跡がすべての AWS リージョンに適用されます。証跡では、AWS パーティションのすべてのリージョンからのイベントがログに記録され、指定した Amazon S3 バケットにログファイルが配信されます。さらに、より詳細な分析と AWS ログで収集されたデータに基づいた行動のためにその他のCloudTrail サービスを設定できます。詳細については、以下を参照してください。

• 証跡を作成するための概要• CloudTrail でサポートされるサービスと統合

370

Page 380: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena ログファイルエントリの概要

• CloudTrail の Amazon SNS 通知の設定• 「複数のリージョンから CloudTrail ログファイルを受け取る」と「複数のアカウントから CloudTrail ロ

グファイルを受け取る」

Athena アクションはすべて CloudTrail によって記録されます。また、これらのアクションについてはAmazon Athena API リファレンス を参照してください。たとえば、StartQueryExecution アクションやGetQueryResults アクションを呼び出すと、CloudTrail のログファイルにエントリが生成されます。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。この ID 情報は以下のことを確認するのに役立ちます。

• リクエストが、ルートまたは AWS Identity and Access Management (IAM) ユーザー認証情報のどちらを使用して送信されたかどうか。

• リクエストが、ロールとフェデレーティッドユーザーのどちらの一時的なセキュリティ認証情報を使用して送信されたか.

• リクエストが、別の AWS サービスによって送信されたかどうか。

詳細については、「CloudTrail userIdentity 要素」を参照してください。

Athena ログファイルエントリの概要証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信できる設定です。CloudTrailログファイルには、1 つ以上のログエントリが含まれます。イベントは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

次の例は、以下に関する CloudTrail のログエントリを示しています。

• StartQueryExecution (成功) (p. 371)• StartQueryExecution (失敗) (p. 372)• CreateNamedQuery (p. 372)

StartQueryExecution (成功){ "eventVersion":"1.05", "userIdentity":{ "type":"IAMUser", "principalId":"EXAMPLE_PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/johndoe", "accountId":"123456789012", "accessKeyId":"EXAMPLE_KEY_ID", "userName":"johndoe" }, "eventTime":"2017-05-04T00:23:55Z", "eventSource":"athena.amazonaws.com", "eventName":"StartQueryExecution", "awsRegion":"us-east-1", "sourceIPAddress":"77.88.999.69", "userAgent":"aws-internal/3", "requestParameters":{ "clientRequestToken":"16bc6e70-f972-4260-b18a-db1b623cb35c", "resultConfiguration":{ "outputLocation":"s3://athena-johndoe-test/test/" },

371

Page 381: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena ログファイルエントリの概要

"queryString":"Select 10" }, "responseElements":{ "queryExecutionId":"b621c254-74e0-48e3-9630-78ed857782f9" }, "requestID":"f5039b01-305f-11e7-b146-c3fc56a7dc7a", "eventID":"c97cf8c8-6112-467a-8777-53bb38f83fd5", "eventType":"AwsApiCall", "recipientAccountId":"123456789012"}

StartQueryExecution (失敗){ "eventVersion":"1.05", "userIdentity":{ "type":"IAMUser", "principalId":"EXAMPLE_PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/johndoe", "accountId":"123456789012", "accessKeyId":"EXAMPLE_KEY_ID", "userName":"johndoe" }, "eventTime":"2017-05-04T00:21:57Z", "eventSource":"athena.amazonaws.com", "eventName":"StartQueryExecution", "awsRegion":"us-east-1", "sourceIPAddress":"77.88.999.69", "userAgent":"aws-internal/3", "errorCode":"InvalidRequestException", "errorMessage":"Invalid result configuration. Should specify either output location or result configuration", "requestParameters":{ "clientRequestToken":"ca0e965f-d6d8-4277-8257-814a57f57446", "queryString":"Select 10" }, "responseElements":null, "requestID":"aefbc057-305f-11e7-9f39-bbc56d5d161e", "eventID":"6e1fc69b-d076-477e-8dec-024ee51488c4", "eventType":"AwsApiCall", "recipientAccountId":"123456789012"}

CreateNamedQuery{ "eventVersion":"1.05", "userIdentity":{ "type":"IAMUser", "principalId":"EXAMPLE_PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/johndoe", "accountId":"123456789012", "accessKeyId":"EXAMPLE_KEY_ID", "userName":"johndoe" }, "eventTime":"2017-05-16T22:00:58Z", "eventSource":"athena.amazonaws.com", "eventName":"CreateNamedQuery", "awsRegion":"us-west-2", "sourceIPAddress":"77.88.999.69", "userAgent":"aws-cli/1.11.85 Python/2.7.10 Darwin/16.6.0 botocore/1.5.48", "requestParameters":{

372

Page 382: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドトラブルシューティング

"name":"johndoetest", "queryString":"select 10", "database":"default", "clientRequestToken":"fc1ad880-69ee-4df0-bb0f-1770d9a539b1" }, "responseElements":{ "namedQueryId":"cdd0fe29-4787-4263-9188-a9c8db29f2d6" }, "requestID":"2487dd96-3a83-11e7-8f67-c9de5ac76512", "eventID":"15e3d3b5-6c3b-4c7c-bc0b-36a8dd95227b", "eventType":"AwsApiCall", "recipientAccountId":"123456789012"},

トラブルシューティング以下のドキュメントのトピックを使用して、Amazon Athena の問題をトラブルシューティングします。

• サービスクォータ (p. 452)• Amazon Athena での SQL クエリに関する考慮事項と制約事項 (p. 435)• サポートされない DDL (p. 412)• テーブル、データベース、および列の名前 (p. 85)• のデータ型 Amazon Athena (p. 402)• サポートされる SerDes およびデータ形式 (p. 375)• 圧縮形式 (p. 401)• 予約キーワード (p. 86)• ワークグループのトラブルシューティング (p. 347)

さらに、以下の AWS リソースを使用します。

• AWS ナレッジセンターの Athena に関するトピック• Athena ディスカッションフォーラム• AWS Big Data Blog の Athena に関する記事

373

Page 383: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSerDe の使用

SerDe リファレンスAthena は、さまざまなデータ形式 (CSV、JSON、Parquet、ORC など) のデータを解析するために複数のSerDe ライブラリをサポートしています。Athena はカスタム SerDe をサポートしていません。

トピック• SerDe の使用 (p. 374)• サポートされる SerDes およびデータ形式 (p. 375)• 圧縮形式 (p. 401)

SerDe の使用SerDe (シリアライザー/デシリアライザー) は、Athena がさまざまな形式のデータを操作する方法です。

SerDe は、ユーザーが指定するものであり、テーブルスキーマを定義する DDL ではありません。SerDeにより、Athena でテーブルの作成時に指定した DDL 設定が上書きされる場合があります。

クエリで SerDe を使用するにはAthena でテーブルを作成するときに SerDe を使用するには、以下のいずれかの方法を使用します。

• DDL ステートメントを使用し、テーブルに対してデータを読み書きする方法を記述します。次の例に示すように、ROW FORMAT は指定しません。これにより、実際の SerDe タイプの表示が除外され、ネイティブの LazySimpleSerDe がデフォルトで使用されます。

通常、ROW FORMAT を指定しないか、ROW FORMAT DELIMITED を指定した場合、Athena はLazySimpleSerDe を使用します。

ROW FORMATDELIMITED FIELDS TERMINATED BY ','ESCAPED BY '\\'COLLECTION ITEMS TERMINATED BY '|'MAP KEYS TERMINATED BY ':'

• テーブルに対してデータを読み書きするときに Athena で使用する SerDe タイプを明示的に指定します。また、次の例に示すように、SERDEPROPERTIES で追加のプロパティを指定します。

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'WITH SERDEPROPERTIES ('serialization.format' = ',','field.delim' = ',','collection.delim' = '|','mapkey.delim' = ':','escape.delim' = '\\')

374

Page 384: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされる SerDes およびデータ形式

サポートされる SerDes およびデータ形式Athena でテーブルの作成とデータのクエリをサポートしているのは、CSV、TSV、カスタム区切り、JSON の各形式のデータ、Hadoop 関連形式 (ORC、Apache Avro、Parquet) のデータ、およびLogstash ログ、AWS CloudTrail ログ、Apache WebServer ログです。

Note

このセクションに記載されている形式は Athena でデータの読み取りに使用されます。CTAS クエリの実行時に Athena がデータの書き込みに使用する形式については、「クエリ結果からのテーブルの作成 (CTAS) (p. 126)」を参照してください。

Athena で上記形式からテーブルの作成とデータのクエリを行うには、シリアライザー/デシリアライザークラス (SerDe) を指定して、使用する形式とデータの解析方法を Athena に指示します。

次の表は、Athena でサポートされているデータ形式および対応する SerDe ライブラリの一覧です。

SerDe は、Athena で使用されているデータカタログに対してデータの処理方法を指示するカスタムライブラリです。SerDe タイプを指定するには、Athena で CREATE TABLE ステートメントの ROW FORMAT部分に明示的に SerDe 名を追加します。SerDe 名を省略できる場合もあります。データ形式によっては、Athena でデフォルトで特定の SerDe タイプが使用されるためです。

サポートされるデータ形式と SerDe

データ形式 説明 Athena でサポートされる SerDeタイプ

CSV (カンマ区切り値) CSV のデータでは、各行がデータレコードを表し、各レコードはカンマで区切られた 1 つ以上のフィールドで構成されます。

• 引用符で囲まれた値がデータに含まれていない場合は、CSV、TSV、およびカスタム区切りファイルのLazySimpleSerDe (p. 391) を使用します。

• 引用符が含まれた値がデータに含まれている場合、または別の区切り文字やエスケープ文字が含まれている場合は、CSV を処理するためのOpenCSVSerDe (p. 381) を使用します。

TSV (タブ区切り値) TSV のデータでは、各行がデータレコードを表し、各レコードはタブで区切られた 1 つ以上のフィールドで構成されます。

CSV、TSV、およびカスタム区切りファイルのLazySimpleSerDe (p. 391) を使用し、区切り文字を FIELDSTERMINATED BY '\t' に指定します。

カスタム区切り この形式のデータでは、各行がデータレコードを表し、レコード間は 1 文字のカスタム区切り文字で区切られます。

CSV、TSV、およびカスタム区切りファイルのLazySimpleSerDe (p. 391) を使用し、1 文字のカスタム区切り文字を指定します。

JSON (JavaScript ObjectNotation)

JSON データでは、各行がデータレコードを表します。各レコードは属性/値のペアと配列で構成され、それぞれがカンマで区切られます。

• cfn-create-stack Hive JSONSerDe (p. 387)

• cfn-create-stack OpenX JSONSerDe (p. 388)

375

Page 385: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAvro SerDe

データ形式 説明 Athena でサポートされる SerDeタイプ

Apache Avro Hadoop にデータを保存する形式であり、JSON ベースのスキーマをレコード値として使用します。

cfn-create-stack AvroSerDe (p. 376)

ORC (Optimized Row Columnar) Hive データの最適化された列指向ストレージの形式。

ORC SerDe (p. 396) およびZLIB 圧縮を使用します。

Apache Parquet Hadoop のデータの列指向ストレージ形式。

Parquet SerDe (p. 398) およびSNAPPY 圧縮を使用します。

Logstash ログ Logstash にログを保存する形式。

cfn-create-stack GrokSerDe (p. 384)

Apache WebServer ログ Apache WebServer にログを保存する形式。

Grok SerDe (p. 384) またはRegex SerDe (p. 378) を使用します。

CloudTrail ログ CloudTrail にログを保存する形式。

• CloudTrail SerDe (p. 379) を使用して、CloudTrail ログのほとんどのフィールドをクエリします。

• サービスに依存する形式を持ついくつかのフィールドでOpenX JSON SerDe (p. 388)を使用します。詳細については、「CloudTrailSerDe (p. 379)」を参照してください。

トピック• Avro SerDe (p. 376)• Regex SerDe (p. 378)• CloudTrail SerDe (p. 379)• CSV を処理するための OpenCSVSerDe (p. 381)• Grok SerDe (p. 384)• JSON SerDe ライブラリ (p. 387)• CSV、TSV、およびカスタム区切りファイルの LazySimpleSerDe (p. 391)• ORC SerDe (p. 396)• Parquet SerDe (p. 398)

Avro SerDeSerDe 名Avro SerDe

ライブラリ名org.apache.hadoop.hive.serde2.avro.AvroSerDe

376

Page 386: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAvro SerDe

例Athena では、セキュリティ上の理由から、avro.schema.url を使用したテーブルスキーマの指定はサポートしていません。avro.schema.literal を使用します。Avro 形式のデータからスキーマを抽出するには、Apache の avro-tools-<version>.jar で getschema パラメータを使用します。これによって返されるスキーマを WITH SERDEPROPERTIES ステートメントで使用できます。以下に例を示します。

java -jar avro-tools-1.8.2.jar getschema my_data.avro

avro-tools-<version>.jar ファイルは、インストールした Avro リリースの java サブディレクトリにあります。Avro をダウンロードするには、Apache Avro リリースを参照してください。Apache AvroTools を直接ダウンロードするには、Apache Avro Tools を参照してください。

スキーマを取得したら、CREATE TABLE ステートメントを使用して、Amazon S3 に保存されている基となる Avro データに基づいて Athena テーブルを作成します。ROWFORMAT では、Avro SerDe を以下のように指定する必要があります。ROW FORMAT SERDE'org.apache.hadoop.hive.serde2.avro.AvroSerDe'次の例に示すように、テーブルの列名と対応するデータ型を指定する以外に、WITH SERDEPROPERTIES 句を使用してスキーマを指定する必要があります。

Note

s3://athena-examples-myregion/path/to/data/ の myregion は、Athena を実行するリージョン識別子 (例: s3://athena-examples-us-west-1/path/to/data/) に置き換えます。

CREATE EXTERNAL TABLE flights_avro_example ( yr INT, flightdate STRING, uniquecarrier STRING, airlineid INT, carrier STRING, flightnum STRING, origin STRING, dest STRING, depdelay INT, carrierdelay INT, weatherdelay INT)PARTITIONED BY (year STRING)ROW FORMATSERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'WITH SERDEPROPERTIES ('avro.schema.literal'='{ "type" : "record", "name" : "flights_avro_subset", "namespace" : "default", "fields" : [ { "name" : "yr", "type" : [ "null", "int" ], "default" : null }, { "name" : "flightdate", "type" : [ "null", "string" ], "default" : null }, { "name" : "uniquecarrier", "type" : [ "null", "string" ], "default" : null }, { "name" : "airlineid",

377

Page 387: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドRegex SerDe

"type" : [ "null", "int" ], "default" : null }, { "name" : "carrier", "type" : [ "null", "string" ], "default" : null }, { "name" : "flightnum", "type" : [ "null", "string" ], "default" : null }, { "name" : "origin", "type" : [ "null", "string" ], "default" : null }, { "name" : "dest", "type" : [ "null", "string" ], "default" : null }, { "name" : "depdelay", "type" : [ "null", "int" ], "default" : null }, { "name" : "carrierdelay", "type" : [ "null", "int" ], "default" : null }, { "name" : "weatherdelay", "type" : [ "null", "int" ], "default" : null } ]}')STORED AS AVROLOCATION 's3://athena-examples-myregion/flight/avro/';

テーブルに対して MSCK REPAIR TABLE ステートメントを実行し、パーティションのメタデータを更新します。

MSCK REPAIR TABLE flights_avro_example;

出発の合計数で上位 10 の出発都市をクエリします。

SELECT origin, count(*) AS total_departuresFROM flights_avro_exampleWHERE year >= '2000'GROUP BY originORDER BY total_departures DESCLIMIT 10;

Note

フライトテーブルのデータは、米国 Department of Transportation、Bureau of TransportationStatistics が提供する Flights に基づいています。オリジナルからの不飽和。

Regex SerDeRegex SerDe では、正規表現 (REGEX) を使用し、正規表現グループをテーブルの列に抽出してデータを逆シリアル化します。

378

Page 388: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudTrail SerDe

データ内の行が正規表現と一致しない場合、その行内のすべての列が NULL として返されます。行が正規表現と一致するが、予想よりもグループが少ない場合、欠落しているグループは NULL です。データ内の行が正規表現と一致するが、正規表現内のグループよりも多くの列がある場合、追加の列は無視されます。

詳細については、Apache Hive ドキュメントの「Class RegexSerDe」を参照してください。

SerDe 名RegexSerDe

ライブラリ名RegexSerDe

例次の例では、RegExSerDe を使用して CloudFront ログからテーブルを作成します。s3://athena-examples-myregion/cloudfront/plaintext/ の myregion は、Athena を実行するリージョン識別子 (例: s3://athena-examples-us-west-1/cloudfront/plaintext/) に置き換えます。

CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, os STRING, Browser STRING, BrowserVersion STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples-myregion/cloudfront/plaintext/';

CloudTrail SerDeAWS CloudTrail は、AWS アカウントの AWS API コールとイベントを記録するサービスです。CloudTrailは暗号化されたログを生成して Amazon S3 に保存します。Athena では、保存先の Amazon S3 をLOCATION で指定し、そこでログを直接クエリできます。

Athena で CloudTrail ログをクエリするには、ログからテーブルを作成し、CloudTrail SerDe を使用してログデータを逆シリアル化します。

CloudTrail SerDe の使用に加えて、別の SerDe を使用したり、JSON からデータを抽出したりすることがインスタンスで必要になる場合があります。CloudTrail ログでは、特定のフィールドの STRING 値が、サービスに応じて変数のデータ形式になる場合があります。その結果、CloudTrail SerDe は想定どおりにデータを逆シリアル化できなくなります。以下のフィールドをクエリするには、データのパターンを識別して OpenX JSON SerDe (p. 388) など、別の SerDe を使用します。また、これらのフィールドからデータを取得するには、JSON_EXTRACT 関数を使用します。詳細については、「JSON からのデータの抽出 (p. 186)」を参照してください。

379

Page 389: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCloudTrail SerDe

• requestParameters

• responseElements

• additionalEventData

• serviceEventDetails

SerDe 名CloudTrail SerDe

ライブラリ名com.amazon.emr.hive.serde.CloudTrailSerde

例次の例では、架空のログファイルのセットに対して CloudTrail SerDe を使用し、このログを基にしてテーブルを作成します。

次の例には、JSON で使用する STRUCT データ型の一部としてrequestParameters、responseElements、および additionalEventData の各フィールドが含まれています。これらのフィールドからデータを取得するには、JSON_EXTRACT 関数を使用します。詳細については、「JSON からのデータの抽出 (p. 186)」を参照してください。

CREATE EXTERNAL TABLE cloudtrail_logs (eventversion STRING,userIdentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, userName:STRING,sessioncontext:STRUCT<attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>,sessionIssuer:STRUCT< type:STRING, principalId:STRING, arn:STRING, accountId:STRING, userName:STRING>>>,eventTime STRING,eventSource STRING,eventName STRING,awsRegion STRING,sourceIpAddress STRING,userAgent STRING,errorCode STRING,errorMessage STRING,requestParameters STRING,responseElements STRING,additionalEventData STRING,requestId STRING,eventId STRING,resources ARRAY<STRUCT< ARN:STRING, accountId:STRING,

380

Page 390: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV を処理するための OpenCSVSerDe

type:STRING>>,eventType STRING,apiVersion STRING,readOnly STRING,recipientAccountId STRING,serviceEventDetails STRING,sharedEventID STRING,vpcEndpointId STRING)ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://cloudtrail_bucket_name/AWSLogs/Account_ID/';

次のクエリは、24 時間中に行われたログイン数を返します。

SELECT useridentity.username, sourceipaddress, eventtime, additionaleventdataFROM default.cloudtrail_logsWHERE eventname = 'ConsoleLogin' AND eventtime >= '2017-02-17T00:00:00Z' AND eventtime < '2017-02-18T00:00:00Z';

詳細については、「AWS CloudTrail ログのクエリ (p. 206)」を参照してください。

CSV を処理するための OpenCSVSerDeAthena で CSV データからテーブルを作成する場合、テーブルに含まれる値のタイプを判断します。

• データに含まれる値が二重引用符 (") で囲まれている場合は、Athena で OpenCSV SerDe を使用して値を逆シリアル化できます。次のセクションでは、STRING データ型でのこの SerDe の動作に注目してください。

• データが含まれる値が二重引用符 (") で囲まれていない場合は、どの SerDe も指定する必要がありません。この場合、Athena はデフォルトの LazySimpleSerDe を使用します。詳細については、「CSV、TSV、およびカスタム区切りファイルの LazySimpleSerDe (p. 391)」を参照してください。

CSV SerDe (OpenCSVSerDe)この OpenCSV SerDe は、以下のように動作します。

• すべての列タイプ値を STRING に変換します。• STRING 以外のデータ型を認識する場合は、Presto パーサーに依存し、値を STRING からそれらのデー

タ型 (認識できる場合) に変換します。• デフルルトの引用文字は二重引用符 (") を使用し、区切り文字、引用符、およびエスケープ文字を指定

できます。

WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\" )

• \t または \n を直接エスケープすることはできません。それらをエスケープするには、"escapeChar"= "\\" を使用します。このトピックの例を参照してください。

• CSV ファイルの埋め込み改行はサポートしません。• 数値データ型として定義された列では、空のフィールドはサポートされません。

381

Page 391: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV を処理するための OpenCSVSerDe

Note

OpenCSVSerDe で Athena を使用すると、SerDe はすべての列タイプを STRING に変換します。次に、Athena のパーサーは、STRING が見つけたものに基づいて、その値を実際のタイプに解析します。たとえば、値を識別できた場合は、BOOLEAN、BIGINT、INT、および DOUBLEの各データ型に解析します。値が UNIX 形式の TIMESTAMP にある場合、Athena はそれらをTIMESTAMP として解析します。値が Hive 形式の TIMESTAMP にある場合、Athena は値を INTとして解析します。また、DATE 型の値は INT として解析されます。テーブル内の列を希望の型にさらに変換するには、テーブル上にビューを作成し (p. 120)、CASTを使用して目的の型に変換します。

STRING 以外のデータ型の場合、Athena のパーサーがそれらを認識できるとき、この SerDe は次のように動作します。

• BOOLEAN、BIGINT、INT、および DOUBLE の各データ型を認識し、これらを変更なしで解析します。パーサーは、数値データ型として定義された列の空または NULL 値を認識せず、デフォルトの STRINGのデータ型として残します 。この問題を回避するには、列を STRING として宣言し、SELECT クエリまたはビューで CAST を実行します。

• TIMESTAMP 型が 1564610311 などの UNIX 数値形式で指定されている場合、これを認識します。• TIMESTAMP の JDBC 準拠の java.sql.Timestamp 形式 ("YYYY-MM-DD HH:MM:SS.fffffffff"

などの小数点以下 9 桁の精度) はサポートされていません。Hive の CSV データを処理する場合は、UNIX 数値形式を使用します。

• DATE 型が 1562112000 などの UNIX 数値形式で指定されている場合、これを認識します。• DATE の別の形式はサポートされていません。Hive の CSV データを処理する場合は、UNIX 数値形式を

使用します。

Note

TIMESTAMP 列と DATE 列が UNIX 数値形式で指定されていない場合に使用する方法については、AWS ナレッジセンターで「Amazon Athena のテーブルにクエリを実行すると、TIMESTAMP の結果が空になる」を参照してください。

Example 例: UNIX 数値形式で指定された TIMESTAMP 型と DATE 型の使用。

次のテストデータの場合を考えます。

"unixvalue creationdate 18276 creationdatetime 1579146280000","18276","1579146280000"

次のステートメントは、指定された Amazon S3 バケットロケーションから Athena にテーブルを作成します。

CREATE EXTERNAL TABLE IF NOT EXISTS testtimestamp1( `profile_id` string, `creationdate` date, `creationdatetime` timestamp ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' LOCATION 's3://<location>'

次に、以下のクエリを実行します。

select * from testtimestamp1

クエリは、日付と時刻のデータを示す次の結果を返します。

382

Page 392: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV を処理するための OpenCSVSerDe

profile_id creationdate creationdatetime1 unixvalue creationdate 18276 creationdatetime 1579146280000 2020-01-15 2020-01-16 03:44:40.000

Example 例: \t または \n をエスケープ

次のテストデータの場合を考えます。

" \\t\\t\\n 123 \\t\\t\\n ",abc" 456 ",xyz

次のステートメントは Athena にテーブルを作成し、"escapeChar" = "\\" を指定します。

CREATE EXTERNAL TABLE test1 (f1 string,s2 string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ("separatorChar" = ",", "escapeChar" = "\\") LOCATION 's3://user-test-region/dataset/test1/'

次に、以下のクエリを実行します。

select * from test1;

この結果は、\t または \n を正しくエスケープして返されます。

f1 s2\t\t\n 123 \t\t\n abc456 xyz

SerDe 名

CSV SerDe

ライブラリ名

この SerDe を使用するには、完全修飾クラス名を ROW FORMAT で指定します。また、次に示すようにSERDEPROPERTIES 内に区切り記号を指定します。

...ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ( "separatorChar" = ",", "quoteChar" = "`", "escapeChar" = "\\")

次の例では、CSV のデータが s3://mybucket/mycsv/ に保存されており、コンテンツが以下のとおりであるとします。

"a1","a2","a3","a4""1","2","abc","def"

383

Page 393: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドGrok SerDe

"a","a1","abc3","ab4"

CREATE TABLE ステートメントを使用して、このデータに基づく Athena テーブルを作成し、OpenCSVSerDe クラスを ROW FORMAT で参照します。また、次に示すように文字の区切り記号、引用符文字、およびエスケープ文字の SerDe プロパティを指定します。

CREATE EXTERNAL TABLE myopencsvtable ( col1 string, col2 string, col3 string, col4 string)ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '"', 'escapeChar' = '\\' )STORED AS TEXTFILELOCATION 's3://location/of/csv/';

テーブル内のすべての値に対してクエリを実行します。

SELECT * FROM myopencsvtable;

クエリは次の値を返します。

col1 col2 col3 col4-----------------------------a1 a2 a3 a41 2 abc defa a1 abc3 ab4

Note

フライトテーブルのデータは、米国 Department of Transportation、Bureau of TransportationStatistics が提供する Flights に基づいています。オリジナルからの不飽和。

Grok SerDeLogstash Grok SerDe は、構造化されていないテキストデータ (通常はログ) の逆シリアル化専用のパターンセットで構成されるライブラリです。各 Grok パターンは名前付きの正規表現です。必要に応じて、これらの逆シリアル化パターンを特定し、再利用できます。このため、正規表現を使用するよりも Grok を使用するほうが簡単です。Grok は、定義済みパターンのセットを提供します。カスタムパターンを作成することもできます。

Athena でテーブルを作成するときに Grok SerDe を指定するには、ROW FORMAT SERDE'com.amazonaws.glue.serde.GrokSerDe' 句に続けて WITH SERDEPROPERTIES 句を使用し、データでマッチさせるパターンを指定します。

• input.format 式は、データでマッチさせるパターンを定義します。この値は必須です。• input.grokCustomPatterns 式は、カスタムの名前付きパターンを定義します。後で、このパ

ターンを input.format 式内で使用できます。これは省略可能です。複数のパターンエントリをinput.grokCustomPatterns 式に含めるには、改行のエスケープ文字 (\n) を使用して、次のように区切ります。'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)')。

384

Page 394: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドGrok SerDe

• STORED AS INPUTFORMAT 句と OUTPUTFORMAT 句は必須です。• LOCATION 句は、Amazon S3 バケットを指定します。このバケットには、複数のデータオブジェクトを

含めることができます。バケット内のすべてのデータオブジェクトが逆シリアル化されてテーブルが作成されます。

例以下の例は、Grok の定義済みパターンのリストに依存します。「定義済みパターン」を参照してください。

例 1この例では、s3://mybucket/groksample/ に保存された Postfix のメールログのエントリからソースデータを使用します。

Feb 9 07:15:00 m4eastmail postfix/smtpd[19305]: B88C4120838: connect from unknown[192.168.55.4]Feb 9 07:15:00 m4eastmail postfix/smtpd[20444]: B58C4330038: client=unknown[192.168.55.4]Feb 9 07:15:03 m4eastmail postfix/cleanup[22835]: BDC22A77854: message-id=<[email protected]>

次のステートメントでは、指定したカスタムパターンと定義済みパターンを使用して、ソースデータファイルから mygroktable というテーブルを Athena で作成します。

CREATE EXTERNAL TABLE `mygroktable`( syslogbase string, queue_id string, syslog_message string )ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'WITH SERDEPROPERTIES ( 'input.grokCustomPatterns' = 'POSTFIX_QUEUEID [0-9A-F]{7,12}', 'input.format'='%{SYSLOGBASE} %{POSTFIX_QUEUEID:queue_id}: %{GREEDYDATA:syslog_message}' )STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://mybucket/groksample/';

%{NOTSPACE:column} などのシンプルなパターンから始め、最初に列をマッピングし、次に必要に応じて列を特化します。

例 2次の例では、Log4j ログのクエリを作成します。ログの例には、次の形式のエントリが含まれています。

2017-09-12 12:10:34,972 INFO - processType=AZ, processId=ABCDEFG614B6F5E49, status=RUN,threadId=123:amqListenerContainerPool23[P:AJ|ABCDE9614B6F5E49||2017-09-12T12:10:11.172-0700],executionTime=7290, tenantId=12456, userId=123123f8535f8d76015374e7a1d87c3c, shard=testapp1,jobId=12312345e5e7df0015e777fb2e03f3c, messageType=REAL_TIME_SYNC,action=receive, hostname=1.abc.def.com

このログデータをクエリするには

385

Page 395: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドGrok SerDe

• Grok パターンを各列の input.format に追加します。たとえば、timestamp に%{TIMESTAMP_ISO8601:timestamp} を追加します。loglevel に %{LOGLEVEL:loglevel} を追加します。

• ログ形式のエントリを区切るダッシュ (-) とカンマをマッピングすることで、input.format のパターンがログの形式と正確に一致することを確認します。

CREATE EXTERNAL TABLE bltest ( timestamp STRING, loglevel STRING, processtype STRING, processid STRING, status STRING, threadid STRING, executiontime INT, tenantid INT, userid STRING, shard STRING, jobid STRING, messagetype STRING, action STRING, hostname STRING )ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe'WITH SERDEPROPERTIES ("input.grokCustomPatterns" = 'C_ACTION receive|send',"input.format" = "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} - processType=%{NOTSPACE:processtype}, processId=%{NOTSPACE:processid}, status=%{NOTSPACE:status}, threadId=%{NOTSPACE:threadid}, executionTime=%{POSINT:executiontime}, tenantId=%{POSINT:tenantid}, userId=%{NOTSPACE:userid}, shard=%{NOTSPACE:shard}, jobId=%{NOTSPACE:jobid}, messageType=%{NOTSPACE:messagetype}, action=%{C_ACTION:action}, hostname=%{HOST:hostname}") STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://mybucket/samples/';

例 3

Amazon S3 ログのクエリを実行する次の例には、改行エスケープ文字 (\n)で区切られた、2 つのパターンエントリを含む 'input.grokCustomPatterns' 式があります。クエリ例のスニペットは'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)') です。

CREATE EXTERNAL TABLE `s3_access_auto_raw_02`( `bucket_owner` string COMMENT 'from deserializer', `bucket` string COMMENT 'from deserializer', `time` string COMMENT 'from deserializer', `remote_ip` string COMMENT 'from deserializer', `requester` string COMMENT 'from deserializer', `request_id` string COMMENT 'from deserializer', `operation` string COMMENT 'from deserializer', `key` string COMMENT 'from deserializer', `request_uri` string COMMENT 'from deserializer', `http_status` string COMMENT 'from deserializer', `error_code` string COMMENT 'from deserializer', `bytes_sent` string COMMENT 'from deserializer', `object_size` string COMMENT 'from deserializer', `total_time` string COMMENT 'from deserializer', `turnaround_time` string COMMENT 'from deserializer', `referrer` string COMMENT 'from deserializer', `user_agent` string COMMENT 'from deserializer', `version_id` string COMMENT 'from deserializer')

386

Page 396: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON SerDe ライブラリ

ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( 'input.format'='%{NOTSPACE:bucket_owner} %{NOTSPACE:bucket} \\[%{INSIDE_BRACKETS:time}\\] %{NOTSPACE:remote_ip} %{NOTSPACE:requester} %{NOTSPACE:request_id} %{NOTSPACE:operation} %{NOTSPACE:key} \"?%{INSIDE_QS:request_uri}\"? %{NOTSPACE:http_status} %{NOTSPACE:error_code} %{NOTSPACE:bytes_sent} %{NOTSPACE:object_size} %{NOTSPACE:total_time} %{NOTSPACE:turnaround_time} \"?%{INSIDE_QS:referrer}\"? \"?%{INSIDE_QS:user_agent}\"? %{NOTSPACE:version_id}', 'input.grokCustomPatterns'='INSIDE_QS ([^\"]*)\nINSIDE_BRACKETS ([^\\]]*)') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION 's3://bucket-for-service-logs/s3_access/'

JSON SerDe ライブラリAthena では、2 つの SerDe ライブラリを使用して JSON データを逆シリアル化できます。逆シリアル化では、JSON データを変換し、Parquet や ORC のような別の形式にシリアル化 (書き出し) できるようにします。

• ネイティブの Hive JSON SerDe (p. 387)• OpenX JSON SerDe (p. 388)

SerDe 名Hive-JsonSerDe

Openx-JsonSerDe

ライブラリ名以下のいずれかを使用します。

org.apache.hive.hcatalog.data.JsonSerDe

org.openx.data.jsonserde.JsonSerDe

Hive JSON SerDeHive JSON SerDe は通常、イベントなどの JSON データを処理するために使用されます。これらのイベントは、改行で区切られた JSON エンコード形式のテキストブロックとして表現されます。Hive JSONSerDe では、map または struct キー名に重複するキーを使用できません。

次の DDL ステートメントの例では、Hive JSON SerDe を使用して、サンプルオンライン広告データに基づいてテーブルを作成します。の LOCATION 句、myregion () s3://myregion.elasticmapreduce/samples/hive-ads/tables/impressions 実行する領域識別子 Athena (例: s3://us-west-2.elasticmapreduce/samples/hive-ads/tables/impressions)。

CREATE EXTERNAL TABLE impressions ( requestbegintime string, adid string, impressionid string, referrer string, useragent string, usercookie string, ip string,

387

Page 397: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON SerDe ライブラリ

number string, processid string, browsercookie string, requestendtime string, timers struct < modellookup:string, requesttime:string >, threadid string, hostname string, sessionid string) PARTITIONED BY (dt string)ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe'with serdeproperties ( 'paths'='requestbegintime, adid, impressionid, referrer, useragent, usercookie, ip' )LOCATION 's3://myregion.elasticmapreduce/samples/hive-ads/tables/impressions';

テーブルを作成したら、MSCK REPAIR TABLE (p. 429) を実行してテーブルをロードし、Athena からクエリ可能にします。

MSCK REPAIR TABLE impressions

OpenX JSON SerDeさらに、 paths OpenX JSON SerDe には、データ内の不整合への対処に役立つオプションのプロパティがあります。

ignore.malformed.json

(オプション) TRUE に設定すると、不正な形式の JSON 構文を無視できます。デフォルト: FALSE。dots.in.keys

(オプション) デフォルトは FALSE。 に設定した場合 TRUE、では、SerDe はキー名のドットを下線で置き換えます。たとえば、JSON データセットに "a.b" という名前のキーが含まれている場合は、このプロパティを使用して列名を Athena の "a_b" に定義できます。デフォルトでは (この SerDe がないと)、Athena は列名にドットを許可しません。

case.insensitive

(オプション) デフォルトは TRUE。 に設定した場合 TRUEでは、SerDe はすべての大文字の列を小文字に変換します。

データに大文字と小文字を区別するキー名を使用するには、 WITH SERDEPROPERTIES("case.insensitive"= FALSE;)。 次に、まだすべて小文字ではないすべてのキーについて、次の構文を使用して、列名からプロパティ名へのマッピングを提供します。

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'WITH SERDEPROPERTIES ("case.insensitive" = "FALSE", "mapping.userid" = "userId")

URL と Url のように小文字である 2 つのキーがある場合は、次のようなエラーが発生する可能性があります。

HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key "url"

これを解決するには、次の例のように、case.insensitive プロパティを FALSE に設定し、キーを異なる名前にマッピングします。

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'

388

Page 398: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON SerDe ライブラリ

WITH SERDEPROPERTIES ("case.insensitive" = "FALSE", "mapping.url1" = "URL", "mapping.url2" = "Url")

マッピングを

(オプション) 列名を、列名と同一ではない JSON キーにマップします。mapping パラメータは、JSON データにキーワード (p. 86)のキーが含まれている場合に便利です。たとえば、timestampという名前の JSON キーがある場合、次の構文を使用して、キーを ts という名前の列にマッピングします。

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'WITH SERDEPROPERTIES ("mapping.ts"= "timestamp")

Hive JSON SerDe と同様に、OpenX JSON SerDe では、map または struct キー名の重複キーは許可されません。

次の DDL ステートメントの例では、OpenX JSON SerDe を使用して、Hive JSON SerDe の例で使用したのと同じサンプルオンライン広告データに基づいてテーブルを作成します。の LOCATION 句、置換myregion 実行する領域識別子 Athena.

CREATE EXTERNAL TABLE impressions ( requestbegintime string, adid string, impressionId string, referrer string, useragent string, usercookie string, ip string, number string, processid string, browsercokie string, requestendtime string, timers struct< modellookup:string, requesttime:string>, threadid string, hostname string, sessionid string) PARTITIONED BY (dt string)ROW FORMAT serde 'org.openx.data.jsonserde.JsonSerDe'with serdeproperties ( 'paths'='requestbegintime, adid, impressionid, referrer, useragent, usercookie, ip' )LOCATION 's3://myregion.elasticmapreduce/samples/hive-ads/tables/impressions';

例: 。ネストされたJSONのデシリアライズJSON SerDe を使用して、より複雑な JSON エンコードされたデータを解析できます。このためには、ネストされた構造を表すために struct 要素と array 要素を使用する CREATE TABLE ステートメントを使用する必要があります。

次の例では、ネストされた構造を持つ JSON データから Athena テーブルを作成します。Athena で JSONエンコードされたデータを解析するには、各 JSON ドキュメントが改行で区切られた独自の行にあることを確認します。

この例で、JSON エンコード形式のデータ構造は次のとおりとします。

{"DocId": "AWS","User": { "Id": 1234,

389

Page 399: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJSON SerDe ライブラリ

"Username": "bob1234", "Name": "Bob","ShippingAddress": {"Address1": "123 Main St.","Address2": null,"City": "Seattle","State": "WA" },"Orders": [ { "ItemId": 6789, "OrderDate": "11/11/2017" }, { "ItemId": 4352, "OrderDate": "12/12/2017" } ] }}

次の CREATE TABLE ステートメントは、Openx-JsonSerDe を struct および array コレクションデータ型とともに使用して、オブジェクトのグループを構築します。各 JSON ドキュメントは個別の行にリストされ、新しい行で区切られます。エラーを回避するため、クエリ中のデータには、struct またはマップキー名の重複するキーは含まれません。

CREATE external TABLE complex_json ( docid string, `user` struct< id:INT, username:string, name:string, shippingaddress:struct< address1:string, address2:string, city:string, state:string >, orders:array< struct< itemid:INT, orderdate:string > > > )ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'LOCATION 's3://mybucket/myjsondata/';

その他の リソースAthena の JSON およびネストされた JSON の操作の詳細については、次のリソースを参照してください。

• JSONSerDe を使用してネストされた JSON とマッピングから Amazon Athena でテーブルを作成する(AWS ビッグデータブログ)

• Amazon Athena で JSON データを読み込もうとするとエラーが発生する (AWS ナレッジセンターの記事)

• JSON ドキュメントの例から CREATE TABLE ステートメントを生成する、Java で書かれた hive-json-schema (GitHub) – ツール。生成される CREATE TABLE ステートメントは、OpenX JSON Serde を使用します。

390

Page 400: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV、TSV、およびカスタム区

切りファイルの LazySimpleSerDe

CSV、TSV、およびカスタム区切りファイルのLazySimpleSerDeこの SerDe の指定はオプションです。これは、Athena がデフォルトで使用する CSV、TSV、およびカスタム区切り形式のデータ用の SerDe です。このSerDeは、SerDeを指定せず、 ROW FORMATDELIMITED。 データに引用符で囲まれた値がない場合は、このSerDeを使用します。

LazySimpleSerDe に関する参照ドキュメントについては、 ハイブ・セルデ Apache Hive 開発者ガイドのセクションを参照してください。

ライブラリ名LazySimpleSerDeのクラスライブラリ名はorg.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe。 LazySimpleSerDe クラスの詳細については、以下を参照してください。 LazySimpleSerDe(レイジー・シンプティック・サーデ).

ヘッダーを無視するテーブルを定義するときにデータ内のヘッダーを無視するには、 skip.header.line.count テーブルプロパティ(次の例を参照)。

TBLPROPERTIES ("skip.header.line.count"="1")

例については、 CREATE TABLE のステートメント Amazon VPC フローログのクエリ (p. 219) およびAmazon CloudFront ログのクエリ (p. 204).

Examples次の例は、 でテーブルを作成する方法を示しています。 Athena CSVおよびTSVから、LazySimpleSerDe。 このSerDeを使用してカスタム区切りファイルをデシリアライズするには、FIELDS TERMINATED BY 次の例のように、1 文字の区切り文字を指定する句。LazySimpleSerDe は、複数文字の区切り文字をサポートしていません。

• CSV の例 (p. 391)• TSV の例 (p. 394)

Note

s3://athena-examples-myregion/path/to/data/ の myregion は、Athena を実行するリージョン識別子 (例: s3://athena-examples-us-west-1/path/to/data/) に置き換えます。

Note

フライトテーブルのデータは、米国 Department of Transportation、Bureau of TransportationStatistics が提供する Flights に基づいています。オリジナルからの不飽和。

CSV の例

CREATE TABLE ステートメントを使用して、Amazon S3 に保存されている基となる CSV ファイルからAthena テーブルを作成します。

CREATE EXTERNAL TABLE flight_delays_csv ( yr INT,

391

Page 401: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV、TSV、およびカスタム区

切りファイルの LazySimpleSerDe

quarter INT, month INT, dayofmonth INT, dayofweek INT, flightdate STRING, uniquecarrier STRING, airlineid INT, carrier STRING, tailnum STRING, flightnum STRING, originairportid INT, originairportseqid INT, origincitymarketid INT, origin STRING, origincityname STRING, originstate STRING, originstatefips STRING, originstatename STRING, originwac INT, destairportid INT, destairportseqid INT, destcitymarketid INT, dest STRING, destcityname STRING, deststate STRING, deststatefips STRING, deststatename STRING, destwac INT, crsdeptime STRING, deptime STRING, depdelay INT, depdelayminutes INT, depdel15 INT, departuredelaygroups INT, deptimeblk STRING, taxiout INT, wheelsoff STRING, wheelson STRING, taxiin INT, crsarrtime INT, arrtime STRING, arrdelay INT, arrdelayminutes INT, arrdel15 INT, arrivaldelaygroups INT, arrtimeblk STRING, cancelled INT, cancellationcode STRING, diverted INT, crselapsedtime INT, actualelapsedtime INT, airtime INT, flights INT, distance INT, distancegroup INT, carrierdelay INT, weatherdelay INT, nasdelay INT, securitydelay INT, lateaircraftdelay INT, firstdeptime STRING, totaladdgtime INT, longestaddgtime INT, divairportlandings INT, divreacheddest INT, divactualelapsedtime INT,

392

Page 402: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV、TSV、およびカスタム区

切りファイルの LazySimpleSerDe

divarrdelay INT, divdistance INT, div1airport STRING, div1airportid INT, div1airportseqid INT, div1wheelson STRING, div1totalgtime INT, div1longestgtime INT, div1wheelsoff STRING, div1tailnum STRING, div2airport STRING, div2airportid INT, div2airportseqid INT, div2wheelson STRING, div2totalgtime INT, div2longestgtime INT, div2wheelsoff STRING, div2tailnum STRING, div3airport STRING, div3airportid INT, div3airportseqid INT, div3wheelson STRING, div3totalgtime INT, div3longestgtime INT, div3wheelsoff STRING, div3tailnum STRING, div4airport STRING, div4airportid INT, div4airportseqid INT, div4wheelson STRING, div4totalgtime INT, div4longestgtime INT, div4wheelsoff STRING, div4tailnum STRING, div5airport STRING, div5airportid INT, div5airportseqid INT, div5wheelson STRING, div5totalgtime INT, div5longestgtime INT, div5wheelsoff STRING, div5tailnum STRING) PARTITIONED BY (year STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ESCAPED BY '\\' LINES TERMINATED BY '\n' LOCATION 's3://athena-examples-myregion/flight/csv/';

このテーブルに新しいパーティションを追加するたびに、MSCK REPAIR TABLE を実行してパーティションメタデータを更新します。

MSCK REPAIR TABLE flight_delays_csv;

遅延が 1 時間を超えた上位 10 便をクエリします。

SELECT origin, dest, count(*) as delaysFROM flight_delays_csvWHERE depdelayminutes > 60GROUP BY origin, destORDER BY 3 DESCLIMIT 10;

393

Page 403: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV、TSV、およびカスタム区

切りファイルの LazySimpleSerDe

TSV の例

次の例では、ソース TSV データが s3://mybucket/mytsv/ に保存されているものとします。

CREATE TABLE ステートメントを使用して、Amazon S3 に保存されている TSV データから Athena テーブルを作成します。次の例では、ROW FORMAT の SerDe クラスを参照していないことに注意してください。LazySimpleSerDe が自動的に使用されるため、SerDe の指定は省略できます。この例では、文字と行の区切り文字、およびエスケープ文字の SerDe プロパティを指定します。

CREATE EXTERNAL TABLE flight_delays_tsv ( yr INT, quarter INT, month INT, dayofmonth INT, dayofweek INT, flightdate STRING, uniquecarrier STRING, airlineid INT, carrier STRING, tailnum STRING, flightnum STRING, originairportid INT, originairportseqid INT, origincitymarketid INT, origin STRING, origincityname STRING, originstate STRING, originstatefips STRING, originstatename STRING, originwac INT, destairportid INT, destairportseqid INT, destcitymarketid INT, dest STRING, destcityname STRING, deststate STRING, deststatefips STRING, deststatename STRING, destwac INT, crsdeptime STRING, deptime STRING, depdelay INT, depdelayminutes INT, depdel15 INT, departuredelaygroups INT, deptimeblk STRING, taxiout INT, wheelsoff STRING, wheelson STRING, taxiin INT, crsarrtime INT, arrtime STRING, arrdelay INT, arrdelayminutes INT, arrdel15 INT, arrivaldelaygroups INT, arrtimeblk STRING, cancelled INT, cancellationcode STRING, diverted INT, crselapsedtime INT, actualelapsedtime INT, airtime INT, flights INT,

394

Page 404: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCSV、TSV、およびカスタム区

切りファイルの LazySimpleSerDe

distance INT, distancegroup INT, carrierdelay INT, weatherdelay INT, nasdelay INT, securitydelay INT, lateaircraftdelay INT, firstdeptime STRING, totaladdgtime INT, longestaddgtime INT, divairportlandings INT, divreacheddest INT, divactualelapsedtime INT, divarrdelay INT, divdistance INT, div1airport STRING, div1airportid INT, div1airportseqid INT, div1wheelson STRING, div1totalgtime INT, div1longestgtime INT, div1wheelsoff STRING, div1tailnum STRING, div2airport STRING, div2airportid INT, div2airportseqid INT, div2wheelson STRING, div2totalgtime INT, div2longestgtime INT, div2wheelsoff STRING, div2tailnum STRING, div3airport STRING, div3airportid INT, div3airportseqid INT, div3wheelson STRING, div3totalgtime INT, div3longestgtime INT, div3wheelsoff STRING, div3tailnum STRING, div4airport STRING, div4airportid INT, div4airportseqid INT, div4wheelson STRING, div4totalgtime INT, div4longestgtime INT, div4wheelsoff STRING, div4tailnum STRING, div5airport STRING, div5airportid INT, div5airportseqid INT, div5wheelson STRING, div5totalgtime INT, div5longestgtime INT, div5wheelsoff STRING, div5tailnum STRING) PARTITIONED BY (year STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ESCAPED BY '\\' LINES TERMINATED BY '\n' LOCATION 's3://athena-examples-myregion/flight/tsv/';

このテーブルに新しいパーティションを追加するたびに、MSCK REPAIR TABLE を実行してパーティションメタデータを更新します。

395

Page 405: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドORC SerDe

MSCK REPAIR TABLE flight_delays_tsv;

遅延が 1 時間を超えた上位 10 便をクエリします。

SELECT origin, dest, count(*) as delaysFROM flight_delays_tsvWHERE depdelayminutes > 60GROUP BY origin, destORDER BY 3 DESCLIMIT 10;

Note

フライトテーブルのデータは、米国 Department of Transportation、Bureau of TransportationStatistics が提供する Flights に基づいています。オリジナルからの不飽和。

ORC SerDeSerDe 名OrcSerDe

ライブラリ名これは ORC 形式のデータの SerDe クラスです。オブジェクトを ORC からリーダーおよびライターに渡します。OrcSerDe

例Note

s3://athena-examples-myregion/path/to/data/ の myregion は、Athena を実行するリージョン識別子 (例: s3://athena-examples-us-west-1/path/to/data/) に置き換えます。

次の例では、ORC で航空便の遅延データのテーブルを作成します。テーブルにはパーティションが含まれます。

DROP TABLE flight_delays_orc;CREATE EXTERNAL TABLE flight_delays_orc ( yr INT, quarter INT, month INT, dayofmonth INT, dayofweek INT, flightdate STRING, uniquecarrier STRING, airlineid INT, carrier STRING, tailnum STRING, flightnum STRING, originairportid INT, originairportseqid INT, origincitymarketid INT, origin STRING, origincityname STRING,

396

Page 406: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドORC SerDe

originstate STRING, originstatefips STRING, originstatename STRING, originwac INT, destairportid INT, destairportseqid INT, destcitymarketid INT, dest STRING, destcityname STRING, deststate STRING, deststatefips STRING, deststatename STRING, destwac INT, crsdeptime STRING, deptime STRING, depdelay INT, depdelayminutes INT, depdel15 INT, departuredelaygroups INT, deptimeblk STRING, taxiout INT, wheelsoff STRING, wheelson STRING, taxiin INT, crsarrtime INT, arrtime STRING, arrdelay INT, arrdelayminutes INT, arrdel15 INT, arrivaldelaygroups INT, arrtimeblk STRING, cancelled INT, cancellationcode STRING, diverted INT, crselapsedtime INT, actualelapsedtime INT, airtime INT, flights INT, distance INT, distancegroup INT, carrierdelay INT, weatherdelay INT, nasdelay INT, securitydelay INT, lateaircraftdelay INT, firstdeptime STRING, totaladdgtime INT, longestaddgtime INT, divairportlandings INT, divreacheddest INT, divactualelapsedtime INT, divarrdelay INT, divdistance INT, div1airport STRING, div1airportid INT, div1airportseqid INT, div1wheelson STRING, div1totalgtime INT, div1longestgtime INT, div1wheelsoff STRING, div1tailnum STRING, div2airport STRING, div2airportid INT, div2airportseqid INT, div2wheelson STRING, div2totalgtime INT,

397

Page 407: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドParquet SerDe

div2longestgtime INT, div2wheelsoff STRING, div2tailnum STRING, div3airport STRING, div3airportid INT, div3airportseqid INT, div3wheelson STRING, div3totalgtime INT, div3longestgtime INT, div3wheelsoff STRING, div3tailnum STRING, div4airport STRING, div4airportid INT, div4airportseqid INT, div4wheelson STRING, div4totalgtime INT, div4longestgtime INT, div4wheelsoff STRING, div4tailnum STRING, div5airport STRING, div5airportid INT, div5airportseqid INT, div5wheelson STRING, div5totalgtime INT, div5longestgtime INT, div5wheelsoff STRING, div5tailnum STRING)PARTITIONED BY (year String)STORED AS ORCLOCATION 's3://athena-examples-myregion/flight/orc/'tblproperties ("orc.compress"="ZLIB");

テーブルに対して MSCK REPAIR TABLE ステートメントを実行し、パーティションのメタデータを更新します。

MSCK REPAIR TABLE flight_delays_orc;

次のクエリでは、遅延が 1 時間を超えた上位 10 便を取得します。

SELECT origin, dest, count(*) as delaysFROM flight_delays_orcWHERE depdelayminutes > 60GROUP BY origin, destORDER BY 3 DESCLIMIT 10;

Parquet SerDeSerDe 名ParquetHiveSerDe は、Parquet 形式で保存されているデータに対して使用します。

Note

データを Parket 形式に変換するには、CREATE TABLE AS SELECT (CTAS) (p. 423) クエリを使用できます。詳細については、「クエリ結果からのテーブルの作成 (CTAS) (p. 126)」、「CTAS クエリの例 (p. 132)」、および「ETL およびデータ分析での CTAS および INSERT INTOの使用 (p. 135)」を参照してください。

398

Page 408: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドParquet SerDe

ライブラリ名Athena では、Parquet (org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe) に保存されているデータを逆シリアル化する必要があるときに、このクラスを使用します。

例: Parquet で保存されているファイルのクエリNote

s3://athena-examples-myregion/path/to/data/ の myregion は、Athena を実行するリージョン識別子 (例: s3://athena-examples-us-west-1/path/to/data/) に置き換えます。

CREATE TABLE ステートメントを使用して、Parquet で Amazon S3 に保存されている基となる CSV ファイルから Athena テーブルを作成します。

CREATE EXTERNAL TABLE flight_delays_pq ( yr INT, quarter INT, month INT, dayofmonth INT, dayofweek INT, flightdate STRING, uniquecarrier STRING, airlineid INT, carrier STRING, tailnum STRING, flightnum STRING, originairportid INT, originairportseqid INT, origincitymarketid INT, origin STRING, origincityname STRING, originstate STRING, originstatefips STRING, originstatename STRING, originwac INT, destairportid INT, destairportseqid INT, destcitymarketid INT, dest STRING, destcityname STRING, deststate STRING, deststatefips STRING, deststatename STRING, destwac INT, crsdeptime STRING, deptime STRING, depdelay INT, depdelayminutes INT, depdel15 INT, departuredelaygroups INT, deptimeblk STRING, taxiout INT, wheelsoff STRING, wheelson STRING, taxiin INT, crsarrtime INT, arrtime STRING, arrdelay INT, arrdelayminutes INT, arrdel15 INT, arrivaldelaygroups INT,

399

Page 409: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドParquet SerDe

arrtimeblk STRING, cancelled INT, cancellationcode STRING, diverted INT, crselapsedtime INT, actualelapsedtime INT, airtime INT, flights INT, distance INT, distancegroup INT, carrierdelay INT, weatherdelay INT, nasdelay INT, securitydelay INT, lateaircraftdelay INT, firstdeptime STRING, totaladdgtime INT, longestaddgtime INT, divairportlandings INT, divreacheddest INT, divactualelapsedtime INT, divarrdelay INT, divdistance INT, div1airport STRING, div1airportid INT, div1airportseqid INT, div1wheelson STRING, div1totalgtime INT, div1longestgtime INT, div1wheelsoff STRING, div1tailnum STRING, div2airport STRING, div2airportid INT, div2airportseqid INT, div2wheelson STRING, div2totalgtime INT, div2longestgtime INT, div2wheelsoff STRING, div2tailnum STRING, div3airport STRING, div3airportid INT, div3airportseqid INT, div3wheelson STRING, div3totalgtime INT, div3longestgtime INT, div3wheelsoff STRING, div3tailnum STRING, div4airport STRING, div4airportid INT, div4airportseqid INT, div4wheelson STRING, div4totalgtime INT, div4longestgtime INT, div4wheelsoff STRING, div4tailnum STRING, div5airport STRING, div5airportid INT, div5airportseqid INT, div5wheelson STRING, div5totalgtime INT, div5longestgtime INT, div5wheelsoff STRING, div5tailnum STRING)PARTITIONED BY (year STRING)STORED AS PARQUET

400

Page 410: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド圧縮形式

LOCATION 's3://athena-examples-myregion/flight/parquet/'tblproperties ("parquet.compression"="SNAPPY");

テーブルに対して MSCK REPAIR TABLE ステートメントを実行し、パーティションのメタデータを更新します。

MSCK REPAIR TABLE flight_delays_pq;

遅延が 1 時間を超えた上位 10 便をクエリします。

SELECT origin, dest, count(*) as delaysFROM flight_delays_pqWHERE depdelayminutes > 60GROUP BY origin, destORDER BY 3 DESCLIMIT 10;

Note

フライトテーブルのデータは、米国 Department of Transportation、Bureau of TransportationStatistics が提供する Flights に基づいています。オリジナルからの不飽和。

圧縮形式このセクションに記載されている圧縮形式は CREATE TABLE (p. 420) クエリで使用されます。CTAS クエリの場合、Athena では (Parquet および ORC に保存されているデータに対して) GZIP と SNAPPY がサポートされています。圧縮形式を省略すると、デフォルトで GZIP 形式が使用されます。詳細については、「CREATE TABLE AS (p. 423)」を参照してください。

Athena は以下の圧縮形式をサポートしています。

• SNAPPY– これは Parquet データストレージ形式のファイルに対するデフォルトの圧縮形式です。• ZLIB– これは ORC データストレージ形式のファイルに対するデフォルトの圧縮形式です。• LZO

• GZIP

• BZIP2

注意事項とリソース• CSV、TSV、および JSON のデータについては、Athena がファイル拡張子から圧縮タイプを判断しま

す。ファイル拡張子がない場合、Athena はデータを非圧縮プレーンテキストとして扱います。データが圧縮されている場合は、ファイル名に圧縮の拡張子 (gz など) が含まれていることを確認します。

• ZIP ファイル形式はサポートされていません。• Athena から Amazon Kinesis Data Firehose ログをクエリする場合、サポートされる形式には GZIP 圧

縮、または SNAPPY 圧縮を使用した ORC ファイルなどがあります。• 圧縮の使用の詳細については、AWS ビッグデータブログの「Amazon Athena のパフォーマンスチュー

ニングのヒントトップ 10」のセクション 3 (「ファイルの圧縮と分割」)を参照してください。

401

Page 411: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドのデータ型 Athena

Amazon Athena の SQL リファレンス

Amazon Athena では、データ定義言語 (DDL) とデータ操作言語 (DML) のステートメント、関数、演算子、およびデータ型のサブセットがサポートされています。いくつかの例外を除き、Athena DDL はHiveQL DDL に基づいており、Athena DML は Presto 0.172 に基づいています。

トピック• のデータ型 Amazon Athena (p. 402)• DML クエリ、関数、および演算子 (p. 403)• DDL ステートメント (p. 411)• Amazon Athena での SQL クエリに関する考慮事項と制約事項 (p. 435)

のデータ型 Amazon Athena実行時 テーブルの作成 (p. 420)各列に含むことのできる列名とデータ型を指定します。 Athena は、以下のデータ型をサポートしています。JDBC ドライバがサポートするデータ型マッピングについては、Athena、JDBC、および Java については、以下を参照してください。 データタイプ を JDBCドライバのインストールおよび構成ガイド. ODBC ドライバーがサポートするデータ タイプ マッピングについては、Athena および SQL、参照 データタイプ を ODBC Driver インストールおよび構成ガイド.

• BOOLEAN – 値は true および false.• TINYINT – 2 の補数形式の 8 ビット符号付き INTEGER。最小値は -27、最大値は 27-1 です。• SMALLINT – 2 の補数形式の 16 ビット符号付き INTEGER。最小値は -215、最大値は 215-1 です。• INT および INTEGER – Athena は、2 種類の異なる整数データ型の実装です。

• INT – Athena では、データ定義言語 (DDL) クエリで、INT データ型を使用します。• INTEGER – DMLクエリでは、 Athena では、 INTEGER データ型。INTEGER は、2 の補数形式で 32

ビット符号付き値として表され、最小値は -2 です。31 および最大値231-1.• ビジネス分析アプリケーションとの互換性を保証するため、JDBC ドライバーは INTEGER 型を返

します。• BIGINT – 2 の補数形式の 64 ビット符号付き INTEGER。最小値は -263、最大値は 263-1 です。• DOUBLE – 64 ビットの倍精度浮動小数点数。• FLOAT – 32 ビットの単精度浮動小数点数。Presto の REAL に相当。イン Athena、使用 FLOAT 次のよ

うなDDLステートメントで CREATE TABLE および REAL SQL 関数で SELECT CAST. [ AWS Glue クローラーは、次の値を返します。 FLOAT、および Athena 翻訳 REAL および FLOAT 種類( 2018 年 5 月 6日 (p. 468) リリースノート)。

• DECIMAL(precision, scale) – precision は、合計桁数です。scale (オプション) は、デフォルトが 0 の分数部分の桁数です。たとえば、次のタイプ定義を使用します。DECIMAL(11,5)、DECIMAL(15).

クエリDDL式で特定の10進値を持つ行を選択するなど、10進値をリテラルとして指定するには、 DECIMAL この例のように、クエリで10進数をリテラル(一重引用符)としてリストします。decimal_value = DECIMAL '0.12'.

402

Page 412: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドDML クエリ、関数、および演算子

• CHAR – 固定長文字データ。たとえば、 char(10). 詳細については、以下を参照してください。 CHARハイブデータタイプ.

Note

substr 関数を使用して、CHAR データ型から指定された長さの部分文字列を返すには、次の例のように、まず CHAR 値を VARCHAR としてキャストする必要があります。

substr(cast(col1 as varchar), 1, 4)

• VARCHAR – 可変長文字データ。 varchar(10). 詳細については、以下を参照してください。VARCHARハイブデータタイプ.

• STRING – 一重引用符または二重引用符で囲まれた文字列リテラル。詳細については、「STRING Hiveデータ型」を参照してください。

Note

文字列以外のデータ型は、Athena で STRING にキャストすることができません。代わりにVARCHAR にキャストします。

• BINARY – Parquetのデータに使用されます。• DATE – 次のようなISO形式の日付 YYYY-MM-DD. たとえば、 DATE '2008-09-15'.• TIMESTAMP – の日付と時刻の瞬間 java.sql.Timestamp 互換性のあるフォーマット、たとえばyyyy-MM-dd HH:mm:ss[.f...]. たとえば、 TIMESTAMP '2008-09-15 03:04:05.324'. この形式は、セッションのタイムゾーンを使用します。

• ARRAY<data_type>

• MAP<primitive_type, data_type>

• STRUCT<col_name : data_type [COMMENT col_comment] , ...>

DML クエリ、関数、および演算子Athena DML クエリステートメントは Presto 0.172 に基づいています。これらの関数の詳細については、オープンソースの Presto ドキュメントの「Presto 0.172 関数と演算子」を参照してください。Presto 関数 (p. 411) トピックでは、そのドキュメントの特定のサブセクションへのリンクを提供しています。

Athena は Presto のすべての機能をサポートしているわけではなく、いくつかの大きな違いがあります。詳細については、このセクションの特定のステートメントのリファレンストピック、および「考慮事項と制約事項 (p. 435)」を参照してください。

トピック• SELECT (p. 403)• INSERT INTO (p. 408)• Amazon Athena の Presto 関数 (p. 411)

SELECT0 個以上のテーブルからデータの行を取得します。

Note

このトピックでは、参照用に概要情報を提供します。SELECT と SQL 言語の使用に関する包括的な情報は、このドキュメントでは説明しません。Athena に固有の SQL の使用については、「Amazon Athena での SQL クエリに関する考慮事項と制約事項 (p. 435)」および「AmazonAthena を使用した SQL クエリの実行 (p. 111)」を参照してください。

403

Page 413: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSELECT

Synopsis

[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...][ FROM from_item [, ...] ][ WHERE condition ][ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ][ HAVING condition ][ UNION [ ALL | DISTINCT ] union_query ][ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ][ LIMIT [ count | ALL ] ]

Note

SQL SELECT ステートメントの予約語は、二重引用符で囲む必要があります。詳細については、SQL SELECT ステートメントの予約キーワードのリスト (p. 86) を参照してください。

Parameters[ WITH with_query [, ....] ]

WITH を使用すると、ネストされたクエリをフラット化したり、サブクエリを簡素化できます。

WITH 句を使用して再帰的なクエリを作成することは、サポートされていません。

WITH 句はクエリの SELECT リストに先行し、SELECT クエリ内で使用する 1 つ以上のサブクエリを定義します。

各サブクエリは、ビュー定義と同じように、一時テーブルを定義します。一時テーブルは FROM 句で参照できます。このテーブルはクエリを実行時のみに使用します。

with_query 構文は次のとおりです。

subquery_table_name [ ( column_name [, ...] ) ] AS (subquery)

各パラメータの意味は次のとおりです。• subquery_table_name は、WITH 句のサブクエリの結果を定義する一時テーブルの一意な名前で

す。各 subquery には、FROM 句で参照可能なテーブル名を付ける必要があります。• column_name [, ...] は、出力列名の省略可能なリストです。列名の数は、subquery で定義

した列数以下でなければなりません。• subquery は、任意のクエリステートメントです。

[ ALL | DISTINCT ] select_expr

select_expr は、選択する行を決定します。

ALL はデフォルトです。ALL は、それを省略した場合と同じように扱われます。すべての列のすべての行が選択され、重複も含まれます。

DISTINCT は、列に重複する値が含まれているときに、個別の値のみを返すために使用します。FROM from_item [, ...]

クエリへの入力を示します。from_item は、以下に示すように、ビュー、結合コンストラクト、サブクエリのいずれかです。

from_item は以下のいずれかです。• table_name [ [ AS ] alias [ (column_alias [, ...]) ] ]

404

Page 414: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSELECT

table_name は行の選択元であるターゲットテーブルの名前であり、alias は SELECT ステートメントの出力に渡す名前です。column_alias は指定した alias の列を定義します。

-または-• join_type from_item [ ON join_condition | USING ( join_column [, ...] ) ]

join_type は以下のいずれかです。• [ INNER ] JOIN

• LEFT [ OUTER ] JOIN

• RIGHT [ OUTER ] JOIN

• FULL [ OUTER ] JOIN

• CROSS JOIN

• ON join_condition | USING (join_column [, ...])。join_condition では、複数のテーブルにおいて結合キーの列名を指定できます。join_column を使用するには、join_column が両方のテーブルに存在している必要があります。

[ WHERE 条件 ]

指定した condition に従って結果をフィルタ処理します。[ GROUP BY [ ALL | DISTINCT ] grouping_expressions [, ...] ]

SELECT ステートメントの出力を、一致する値を持つ行に分割します。

ALL と DISTINCT は、重複したグループ化セットごとに個別の出力行を生成するかどうかを決定します。省略すると、ALL が使用されます。

grouping_expressions では、複雑なグループ化オペレーションを実行できます。

grouping_expressions 要素は、SUM、AVG あるいは COUNT などの任意の関数となり、出力列を位置で選択するための 1 から開始する序数です。

GROUP BY 式は、SELECT ステートメントの出力に表示されない入力列名で出力をグループ化できます。

すべての出力式は、集計関数であるか、GROUP BY 句に存在する列であることが必要です。

単一のクエリを使用して、複数の列セットの集計を必要とする分析を実行できます。

これらの複雑なグループ化オペレーションでは、入力列で構成される式がサポートされません。列名または序数のみが許可されます。

通常、UNION ALL を使用しても、これらの GROUP BY オペレーションと同じ結果を達成できます。ただし、GROUP BY を使用するクエリでは、データの読み取りが 1 回で済むという利点があります。UNION ALL は基となるデータを 3 回読み取るため、データソースが変わりやすい場合は、不整合な結果が生成されることがあります。

GROUP BY CUBEは、特定の列のセットに対して、すべての可能なグループ化セットを生成します。GROUP BY ROLLUP は、特定の列のセットに対して、すべての可能な小計を生成します。

[ HAVING condition ]

集計関数と GROUP BY 句で使用します。どのグループを選択するかを制御しますcondition。 を満たさないグループは排除されます。 このフィルタリングは、グループおよび集計の計算後に行われます。

[ UNION [ ALL | DISTINCT ] union_query] ]

複数のSELECTステートメントの結果を 1 つのクエリに結合します。ALL または DISTINCT は、最終的な結果セットに含める行を制御します。

ALL は、行が同一の場合でも、すべての行が含まれる処理を実行します。

405

Page 415: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSELECT

DISTINCTは、結合した結果セットに含まれる一意の行のみを処理します。DISTINCT はデフォルトです。

重複を排除するため、 UNIONはハッシュテーブルを構築します。このテーブルはメモリを消費します。パフォーマンスを向上させるには、クエリで重複を排除する必要のないUNION ALL場合に使用します。

複数の UNION 句は左から右に処理されます。ただし、括弧を使用して処理の順序を明示的に定義することもできます。

[ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ]

結果セットを 1 つ以上の出力 expression でソートします。

句に複数の式が含まれている場合、結果セットは最初の に従ってソートされますexpression。 次に、最初の式で一致した値がある行に 2 番目が適用されます。以下同様です。expression

各 expression では、SELECT の出力列を指定するか、出力列の位置を 1 から始まる序数で指定できます。

ORDER BYは、 GROUP BYまたは HAVING句の後の最後のステップとして評価されます。ASC と DESCは、結果のソートを昇順にするか、降順にするかを決定します。

デフォルトの null 順序は、昇順または降順のソート順に関係なしに NULLS LAST です。LIMIT [ count | ALL ]

結果セットの行数を count に制限します。LIMIT ALL は LIMIT 句を省略した場合と同じです。クエリに ORDER BY 句がない場合は、任意の結果になります。

TABLESAMPLE BERNOULLI | SYSTEM (percentage)

サンプリング方法に基づいてテーブルから行を選択する演算子 (オプション) です。

は、 の確率でテーブルサンプルに存在する各行BERNOULLIを選択しますpercentage。 テーブルのすべての物理ブロックがスキャンされ、サンプルの実行時に計算されるランダム値とサンプルの比較に基づいて、特定の行がスキップされます。percentage

SYSTEM では、テーブルがデータの論理セグメントに分割され、この詳細度でテーブルがサンプリングされます。

特定のセグメントのすべての行が選択されるか、サンプルの実行時に計算されたランダム値の比較に基づいて当該セグメントがスキップされます。percentageSYSTEMサンプリングはコネクタに依存します。この方法では、独立したサンプリング確率は保証されません。

[ UNNEST (array_or_map) [WITH ORDINALITY] ]

配列またはマップをリレーションに展開します。配列は単一の列に展開されます。マップは 2 つの列(キー、値) に展開されます。

UNNEST に複数の引数を使用できます。これらの引数は、複数の列に展開され、各列の行数は最大の基数引数と同じになります。

その他の列には NULL が埋め込まれます。

WITH ORDINALITY 句は、序数列を末尾に追加します。

通常、UNNEST は JOIN と一緒に使用し、JOIN の左側のリレーションの列を参照できます。

でソースデータのファイルの場所を取得するAmazon S3テーブル行内のデータファイルの場所を確認するには、次の例のように、 Amazon S3 "$path"をクエリで使用できます。SELECT

406

Page 416: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSELECT

SELECT "$path" FROM "my_database"."my_table" WHERE year=2019;

次のような結果が返されます。

s3://awsexamplebucket/datasets_mytable/year=2019/data_file1.json

テーブル内のデータの S3 ファイル名パスのソートされた一意のリストを返すには、次の例のようにSELECT DISTINCTと ORDER BY を使用できます。

SELECT DISTINCT "$path" AS data_source_fileFROM sampledb.elb_logsORDER By data_source_file ASC

パスのないファイル名のみを返すには、次の例のように "$path" 関数にパラメータregexp_extractとして渡すことができます。

SELECT DISTINCT regexp_extract("$path", '[^/]+$') AS data_source_fileFROM sampledb.elb_logsORDER By data_source_file ASC

特定のファイルからデータを返すには、次の例のように句でファイルを指定します。WHERE

SELECT *,"$path" FROM my_database.my_table WHERE "$path" = 's3://awsexamplebucket/my_table/my_partition/file-01.csv'

詳細と例については、ナレッジセンターの記事で、Athena テーブルの行の Amazon S3 ソースファイルを表示する方法を参照してください。http://aws.amazon.com/premiumsupport/knowledge-center/find-s3-source-file-athena-table-row/

一重引用符のエスケープ一重引用符をエスケープするには、以下の例のように、その前に別の一重引用符を付けます。これを二重引用符と混同しないでください。

Select 'O''Reilly'

Results

O'Reilly

その他のリソースでのSELECTステートメントの使用の詳細については、次のリソースを参照してください。Athena

詳細については、 詳細については以下を参照してください。

で実行中のクエリAthena Amazon Athena を使用した SQL クエリの実行 (p. 111)

を使用したテーブルの作成SELECT クエリ結果からのテーブルの作成 (CTAS) (p. 126)

SELECTクエリから別のテーブルにデータを挿入する

INSERT INTO (p. 408)

407

Page 417: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドINSERT INTO

詳細については、 詳細については以下を参照してください。

SELECTステートメントでの組み込み関数の使用 Amazon Athena の Presto 関数 (p. 411)

SELECTステートメントでのユーザー定義関数の使用

ユーザー定義関数を使用したクエリ(プレビュー) (p. 193)

Data Catalogメタデータのクエリ AWS Glue データカタログ のクエリ (p. 224)

INSERT INTOソーステーブルで実行される SELECT クエリステートメント、またはステートメントの一部として提供される VALUES のセットに基づいて、送信先テーブルに新しい行を挿入します。ソース テーブルが、CSVや JSON などの 1 つの形式の基礎となるデータに基づいており、宛先テーブルが Parquet や ORC などの別の形式に基づいている場合、 INSERT INTO 選択したデータを宛先テーブルのフォーマットに変換するクエリ。

考慮事項と制約事項Athena で INSERT クエリを使用するときは、以下について検討します。

Important

の実行時には、 INSERT で暗号化されている基になるデータを含むテーブル上のクエリ AmazonS3、 INSERT クエリの書き込みは、デフォルトでは暗号化されません。暗号化されたデータを含むテーブルに挿入する場合は、INSERT クエリの結果を暗号化することをお勧めします。コンソールを使用したクエリ結果の暗号化の詳細については、「Amazon S3 に保存されたクエリ結果の暗号化 (p. 240)」を参照してください。AWS CLI または Athena API を使用して暗号化を有効にするには、StartQueryExecution アクションの EncryptionConfiguration プロパティを使用して、要件に応じて Amazon S3 暗号化オプションを指定します。

サポートされる形式と SerDes次の形式と SerDes を使用して、データから作成されたテーブルに対して INSERT クエリを実行できます。

データ形式 SerDe

Avro org.apache.hadoop.hive.serde2.avro.AvroSerDe

JSON: org.apache.hive.hcatalog.data.JsonSerDe

ORC org.apache.hadoop.hive.ql.io.orc.OrcSerde

Parquet org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe

テキストファイル

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

Note

CSV、TSV、およびカスタム区切りファイルがサポートされています。

バケット化されたテーブルはサポートされていませんINSERT INTO はバケット化されたテーブルではサポートされていません。詳細については、「バケット化とパーティション化の比較 (p. 131)」を参照してください。

408

Page 418: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドINSERT INTO

Partitioningとの分別を使用する場合、このセクションのポイントを考慮する INSERT INTO または CREATE TABLEAS SELECT クエリ。

Limits

この INSERT INTO ステートメントは、最大 100 個のパーティションの送信先テーブルへの書き込みをサポートします。100 個を超えるパーティションを持つテーブルで SELECT 句を実行すると、SELECT クエリは、100 個以下のパーティションに制限されない限り失敗します。

この制限を回避する方法については、「CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141)」を参照してください。

カラムの順序

INSERT INTO または CREATE TABLE AS SELECT ステートメントでは、パーティション化された列が、SELECT ステートメント。

ソーステーブルがパーティション化されていない、または宛先テーブルとは異なる列でパーティション化されている場合、次のようなクエリがあります。 INSERT INTO destination_table SELECT *FROM source_table ソース テーブルの最後の列の値を、宛先テーブル内のパーティション列の値と見なします。パーティション化されたテーブルをパーティション化されていないテーブルから作成する場合は、この点に注意してください。

Resources

使用方法の詳細については、 INSERT INTO パーティショニングあり、以下のリソースを参照してください。

• パーティション化されたデータをパーティション化されたテーブルに挿入するには、以下を参照してください。 CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141).

• パーティション化されていないデータをパーティション化テーブルに挿入するには、以下を参照してください。 ETL およびデータ分析での CTAS および INSERT INTO の使用 (p. 135).

Amazon S3 に書き込まれるファイルAthena は、INSERT コマンドの結果として、Amazon S3 のソースデータの場所にファイルを書き込みます。INSERT オペレーションごとに、既存のファイルを追加するのではなく、新しいファイルが作成されます。ファイルの場所は、テーブルの構造と SELECT クエリ (存在する場合) によって異なります。Athenaは各 INSERT クエリのデータマニフェストファイルを生成します。マニフェストは、クエリが書き込んだファイルを追跡します。これは、Amazon S3 の Athena クエリ結果の場所に保存されます。詳細については、「クエリ出力ファイルの識別 (p. 113)」を参照してください。

孤立したファイルの検索CTAS または INSERT INTO ステートメントが失敗した場合、孤立したデータがデータの場所に残っている可能性があります。Athena はバケットからデータ (部分データも含む) を削除しないため、後続のクエリでこの部分データが読み取り可能になる可能性があります。検査または削除する孤立したファイルを見つけるには、Athena に用意されているデータマニフェストファイルを使用して、書き込まれるファイルのリストを追跡できます。詳細については、「クエリ出力ファイルの識別 (p. 113)」および「DataManifestLocation」を参照してください。

INSERT INTO...SELECT1 つのテーブルで実行するクエリを指定します。 source_table2 番目のテーブルに挿入する行を指定する 、 destination_table。 _が SELECT クエリは、 source_table列は destination_table.

409

Page 419: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドINSERT INTO

SELECT クエリの詳細については、「SELECT (p. 403)」を参照してください。

Synopsis

INSERT INTO destination_table SELECT select_query FROM source_table_or_view

Examples

vancouver_pageviews テーブル内のすべての行を選択し、canada_pageviews テーブルに挿入します。

INSERT INTO canada_pageviews SELECT * FROM vancouver_pageviews;

date 列の値が 2019-07-01~2019-07-31 の vancouver_pageviews テーブル内の行のみを選択し、canada_july_pageviews に挿入します。

INSERT INTO canada_july_pageviewsSELECT *FROM vancouver_pageviewsWHERE date BETWEEN date '2019-07-01' AND '2019-07-31';

cities_world テーブルの city と state 列で、country 列の値が usa の行だけを選択して、cities_usa テーブルの city と state 列に挿入します。

INSERT INTO cities_usa (city,state)SELECT city,stateFROM cities_world WHERE country='usa'

INSERT INTO...VALUES列と値を指定して、既存のテーブルに行を挿入します。指定された列および関連するデータ型は、送信先テーブルの列およびデータ型と正確に一致する必要があります。

Important

Athena は INSERT オペレーションごとにファイルを生成するため、VALUES を使用して行を挿入することはお勧めしません。これにより、多数の小さなファイルが作成され、テーブルのクエリパフォーマンスが低下する可能性があります。INSERT クエリが作成するファイルを識別するには、データマニフェストファイルを調べます。詳細については、「クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111)」を参照してください。

Synopsis

INSERT INTO destination_table [(col1,col2,...)] VALUES (col1value,col2value,...)[, (col1value,col2value,...)][, ...]

Examples

次の例では、都市テーブルには、、、、 の 3 つの列があります。id、 city、 state、 state_motto。は、 id 列はタイプです INT 他のすべての列はタイプです VARCHAR.

410

Page 420: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドPresto 関数

cities テーブルに 1 つの行を挿入し、すべての列の値を指定します。

INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice')

cities テーブルに 2 行を挿入します。

INSERT INTO cities VALUES (1,'Lansing','MI','Si quaeris peninsulam amoenam circumspice'), (3,'Boise','ID','Esto perpetua')

Amazon Athena の Presto 関数Athena クエリエンジンは、Presto 0.172 に基づいています。これらの関数の詳細については、Presto0.172 関数と演算子、および以下に参照する Presto ドキュメントの特定のセクションを参照してください。

Athena では、Presto の機能の一部だけがサポートされます。詳細については、考慮事項と制約事項 (p. 435) を参照してください。

• 論理演算子• 比較関数および演算子• 条件式• 変換関数• 数学関数および演算子• ビット単位関数• 10 進数関数および演算子• 文字列関数および演算子• バイナリ関数• 日付/時刻関数および演算子• 正規表現関数• JSON 関数および演算子• URL 関数• 集計関数• ウィンドウ関数• カラー関数• 配列関数および演算子• マップ関数および演算子• Lambda 式および関数• Teradata 関数

DDL ステートメント以下の DDL ステートメントは Athena で直接使用します。

Athenaクエリエンジンは、部分的に HiveQL DDL に基づいています。

411

Page 421: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサポートされない DDL

Athenaはすべての DDL ステートメントをサポートしているわけではなく、HiveQLDDL と Athena DDLにはいくつかの違いがあります。詳細については、このセクションのリファレンストピック、および「サポートされない DDL (p. 412)」を参照してください。

トピック• サポートされない DDL (p. 412)• ALTER DATABASE SET DBPROPERTIES (p. 413)• ALTER TABLE ADD COLUMNS (p. 414)• ALTER TABLE ADD PARTITION (p. 415)• ALTER TABLE DROP PARTITION (p. 416)• ALTER TABLE RENAME PARTITION (p. 416)• ALTER TABLE REPLACE COLUMNS (p. 417)• ALTER TABLE SET LOCATION (p. 418)• ALTER TABLE SET TBLPROPERTIES (p. 418)• CREATE DATABASE (p. 419)• CREATE TABLE (p. 420)• CREATE TABLE AS (p. 423)• CREATE VIEW (p. 426)• DESCRIBE TABLE (p. 426)• DESCRIBE VIEW (p. 427)• DROP DATABASE (p. 427)• DROP TABLE (p. 428)• DROP VIEW (p. 429)• MSCK REPAIR TABLE (p. 429)• SHOW COLUMNS (p. 431)• SHOW CREATE TABLE (p. 431)• SHOW CREATE VIEW (p. 432)• SHOW DATABASES (p. 432)• SHOW PARTITIONS (p. 432)• SHOW TABLES (p. 433)• SHOW TBLPROPERTIES (p. 434)• SHOW VIEWS (p. 434)

サポートされない DDL次のネイティブ Hive DDLsは でサポートされていませんAthena。

• ALTER INDEX• ALTER TABLE table_name ARCHIVE PARTITION• ALTER TABLE table_name CLUSTERED BY• ALTER TABLE table_name EXCHANGE PARTITION• ALTER TABLE table_name NOT CLUSTERED• ALTER TABLE table_name NOT SKEWED• ALTER TABLE table_name NOT SORTED• ALTER TABLE table_name NOT STORED AS DIRECTORIES

412

Page 422: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドALTER DATABASE SET DBPROPERTIES

• ALTER TABLE table_name partitionSpec CHANGE COLUMNS (ALTER テーブル変更 COLUMNS)• ALTER TABLE table_name partitionSpec COMPACT• ALTER TABLE table_name partitionSpec CONCATENATE (ALTER TABLE CONCATENATE キー)• ALTER TABLE table_namepartitionSpecSET FILEFORMAT• ALTER TABLE table_name RENAME TO• ALTER TABLE table_name SET SKEWED LOCATION• ALTER TABLE table_name SKEWED BY• ALTER TABLE table_name TOUCH• ALTER TABLE table_name UNARCHIVE PARTITION• COMMIT• CREATE INDEX• CREATE ROLE• CREATE TABLE table_name LIKE existing_table_name• CREATE TEMPORARY MACRO• DELETE FROM• DESCRIBE DATABASE• DFS• DROP INDEX• DROP ROLE• DROP TEMPORARY MACRO• EXPORT TABLE• GRANT ROLE• IMPORT TABLE• LOCK DATABASE• LOCK TABLE• REVOKE ROLE• ROLLBACK• SHOW COMPACTIONS• SHOW CURRENT ROLES• SHOW GRANT• SHOW INDEXES• SHOW LOCKS• SHOW PRINCIPALS• SHOW ROLE GRANT• SHOW ROLES• SHOW TRANSACTIONS• START TRANSACTION• UNLOCK DATABASE• UNLOCK TABLE

ALTER DATABASE SET DBPROPERTIESデータベースのプロパティを 1 つ以上作成します。DATABASE と SCHEMA は、どちらを使用しても同じように機能します。

413

Page 423: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドALTER TABLE ADD COLUMNS

概要ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES ('property_name'='property_value' [, ...] )

パラメータSET DBPROPERTIES ('property_name'='property_value' [, ...]

データベースのプロパティを property_name として指定し、各プロパティの値をproperty_value として設定します。property_name が既に存在する場合、古い値はproperty_value で上書きされます。

例ALTER DATABASE jd_datasets SET DBPROPERTIES ('creator'='John Doe', 'department'='applied mathematics');

ALTER SCHEMA jd_datasets SET DBPROPERTIES ('creator'='Jane Doe');

ALTER TABLE ADD COLUMNS既存のテーブルに 1 つ以上の列を追加します。オプションの PARTITION 構文を使用すると、パーティションメタデータが更新されます。

SynopsisALTER TABLE table_name [PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value][,...])] ADD COLUMNS (col_name data_type)

ParametersPARTITION (partition_col_name = partition_col_value [,...])

指定した列名/値の組み合わせでパーティションを作成します。列のデータ型が文字列である場合にのみ、partition_col_value を引用符で囲みます。

ADD COLUMNS (col_name data_type [,col_name data_type,…])

既存の列の後、パーティション列の前に列を追加します。

ExamplesALTER TABLE events ADD COLUMNS (eventowner string)

ALTER TABLE events PARTITION (awsregion='us-west-2') ADD COLUMNS (event string)

414

Page 424: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドALTER TABLE ADD PARTITION

ALTER TABLE events PARTITION (awsregion='us- west-2') ADD COLUMNS (eventdescription string)

Notes• を実行した後にAthenaクエリエディタのナビゲーションペインに新しいテーブル列を表示するには、エ

ディタでテーブルリストを手動で更新してから、テーブルをもう一度展開します。ALTER TABLE ADDCOLUMNS

• ALTER TABLE ADD COLUMNSは、データ型を持つ列に対しては機能しません。dateこの問題を回避するには、代わりにデータ型を使用します。timestamp

ALTER TABLE ADD PARTITIONテーブルのパーティション列を 1 つ以上作成します。各パーティションは、1 つ以上の異なる列名/値の組み合わせで構成されます。指定した組み合わせごとに別個のデータディレクトリが作成されます。これにより、クエリパフォーマンスが向上する場合があります。パーティション分割された列は、テーブルのデータ自体内には存在しないため、テーブル内の列自体と同じ名前を使用すると、エラーになります。詳細については、「データのパーティション分割 (p. 93)」を参照してください。

Athena では、テーブルとそのパーティションでは同じデータ形式を使用する必要がありますが、スキーマは異なる場合があります。詳細については、パーティションがあるテーブルを更新する (p. 152) を参照してください。

で必要なリソース レベルの権限に関する情報は、 IAM 保険( glue:CreatePartition)、参照 AWS GlueAPI権限: アクションとリソース参照 および AWS Glue データカタログ のデータベースとテーブルへのきめ細かなアクセス (p. 249).

Synopsis

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value] [,...]) [LOCATION 'location1'] [PARTITION (partition_colA_name = partition_colA_value [,partition_colB_name = partition_colB_value [,...])] [LOCATION 'location2'] [,...]

Parametersパーティションを追加する場合は、パーティションと Amazon S3 パーティションのデータファイルが存在するパス。

IF NOT EXISTS

同じ定義のパーティションが既に存在する場合、エラーを抑制します。PARTITION (partition_col_name = partition_col_value [,...])

指定した列名/値の組み合わせでパーティションを作成します。列のデータ型が文字列である場合に限り、partition_col_value を文字列の文字で囲みます。

415

Page 425: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドALTER TABLE DROP PARTITION

[LOCATION 'location']

前のステートメントで定義したパーティションの保存先のディレクトリを指定します。

ExamplesALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN');

ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN') PARTITION (dt = '2016-05-15', country = 'IN');

ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_14_May_2016/' PARTITION (dt = '2016-05-15', country = 'IN') LOCATION 's3://mystorage/path/to/INDIA_15_May_2016/';

ALTER TABLE DROP PARTITION名前付きテーブルの指定したパーティションを削除します。

概要ALTER TABLE table_name DROP [IF EXISTS] PARTITION (partition_spec) [, PARTITION (partition_spec)]

パラメータ[IF EXISTS]

指定したパーティションが存在しない場合、エラーメッセージを抑制します。PARTITION (partition_spec)

各 partition_spec は、列名/値の組み合わせを partition_col_name =partition_col_value [,...] という形式で指定します。

例ALTER TABLE orders DROP PARTITION (dt = '2014-05-14', country = 'IN');

ALTER TABLE orders DROP PARTITION (dt = '2014-05-14', country = 'IN'), PARTITION (dt = '2014-05-15', country = 'IN');

ALTER TABLE RENAME PARTITIONtable_name という名前のテーブルで、パーティション列の名前を partition_spec からnew_partition_spec に変更します。

416

Page 426: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドALTER TABLE REPLACE COLUMNS

パーティショニングの詳細については,以下を参照: データのパーティション分割 (p. 93).

Synopsis

ALTER TABLE table_name PARTITION (partition_spec) RENAME TO PARTITION (new_partition_spec)

ParametersPARTITION (partition_spec)

各 partition_spec は、列名/値の組み合わせを partition_col_name =partition_col_value [,...] という形式で指定します。

Examples

ALTER TABLE orders PARTITION (dt = '2014-05-14', country = 'IN') RENAME TO PARTITION (dt = '2014-05-15', country = 'IN');

ALTER TABLE REPLACE COLUMNSで作成されたテーブルから既存のすべての列を削除し、指定された列のセットに置き換えます。LazySimpleSerDe (p. 391)オプションの PARTITION 構文を使用すると、パーティションメタデータが更新されます。を使用して、保持する列のみを指定することで、列を削除することもできます。ALTERTABLE REPLACE COLUMNS

Synopsis

ALTER TABLE table_name [PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value][,...])] REPLACE COLUMNS (col_name data_type [, col_name data_type, ...])

ParametersPARTITION (partition_col_name = partition_col_value [,...])

指定した列名/値の組み合わせでパーティションを指定します。列のデータ型が文字列である場合にのみ、partition_col_value を引用符で囲みます。

REPLACE COLUMNS (col_name data_type [,col_name data_type,...])

既存の列を、指定された列名とデータ型に置き換えます。

Notes• を実行した後にAthenaクエリエディターのナビゲーションペインでテーブル列の変更点を表示するに

は、エディタでテーブルリストを手動で更新してから、テーブルをもう一度展開します。ALTER TABLEREPLACE COLUMNS

• ALTER TABLE REPLACE COLUMNSは、データ型を持つ列に対しては機能しません。dateこの問題を回避するには、代わりにテーブル内のデータ型を使用します。timestamp

417

Page 427: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドALTER TABLE SET LOCATION

ALTER TABLE SET LOCATIONtable_name という名前のテーブルの場所と、必要に応じて partition_spec のパーティションを変更します。

概要

ALTER TABLE table_name [ PARTITION (partition_spec) ] SET LOCATION 'new location'

パラメータPARTITION (partition_spec)

場所を変更するパーティションを partition_spec パラメータで指定します。partition_specは、列名/値の組み合わせを partition_col_name = partition_col_value という形式で指定します。

SET LOCATION 'new location'

新しい場所を指定します。Amazon S3 の場所にする必要があります。構文については、Amazon S3のテーブルの場所 (p. 87)を参照してください。

ALTER TABLE customers PARTITION (zip='98040', state='WA') SET LOCATION 's3://mystorage/custdata/';

ALTER TABLE SET TBLPROPERTIESカスタムのメタデータプロパティをテーブルに追加し、割り当てられた値を設定します。

マネージド型のテーブルはサポートされていないため、'EXTERNAL'='FALSE' を設定しても効果はありません。

概要

ALTER TABLE table_name SET TBLPROPERTIES ('property_name' = 'property_value' [ , ... ])

パラメータSET TBLPROPERTIES ('property_name' = 'property_value' [ , ... ])

追加するメタデータプロパティを property_name として指定し、各プロパティの値を propertyvalue として指定します。property_name が既に存在する場合、その値は property_value にリセットされます。

ALTER TABLE orders SET TBLPROPERTIES ('notes'="Please don't drop this table.");

418

Page 428: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE DATABASE

CREATE DATABASEデータベースを作成します。DATABASE と SCHEMA はどちらでも使用できます。どちらも同じ意味です。

SynopsisCREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT 'database_comment'] [LOCATION 'S3_loc'] [WITH DBPROPERTIES ('property_name' = 'property_value') [, ...]]

Parameters[IF NOT EXISTS]

database_name という名前のデータベースが既に存在する場合、エラーメッセージを抑制します。[COMMENT database_comment]

という組み込みメタデータプロパティにメタデータ値commentを設定し、 database_comment に値を指定します。 AWS Glueでは、COMMENT内容はデータベースのプロパティのDescriptionフィールドに書き込まれます。

[LOCATION S3_loc]

データベースファイルとメタストアがある場所を として指定しますS3_loc。 の場所である必要があります。Amazon S3

[WITH DBPROPERTIES ('property_name' = 'property_value') [, ...] ]

データベース定義のカスタムメタデータプロパティを指定します。

ExamplesCREATE DATABASE clickstreams;

CREATE DATABASE IF NOT EXISTS clickstreams COMMENT 'Site Foo clickstream data aggregates' LOCATION 's3://myS3location/clickstreams/' WITH DBPROPERTIES ('creator'='Jane D.', 'Dept.'='Marketing analytics');

データベースのプロパティの表示AWSDataCatalogで作成したデータベースのデータベースプロパティを表示するには、次の例のように aws glue CREATE DATABASE get-database AWS CLI コマンドを使用します。https://awscli.amazonaws.com/v2/documentation/api/latest/reference/glue/get-database.html

aws glue get-database --name <your-database-name>

JSON 出力では、結果は次のようになります。

{ "Database": { "Name": "<your-database-name>", "Description": "<your-database-comment>", "LocationUri": "s3://<your-database-location>",

419

Page 429: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE TABLE

"Parameters": { "<your-database-property-name>": "<your-database-property-value>" }, "CreateTime": 1603383451.0, "CreateTableDefaultPermissions": [ { "Principal": { "DataLakePrincipalIdentifier": "IAM_ALLOWED_PRINCIPALS" }, "Permissions": [ "ALL" ] } ] }}

AWS CLI の詳細については、「AWS Command Line Interface ユーザーガイド」を参照してください。

CREATE TABLE指定した名前とパラメータでテーブルを作成します。

SynopsisCREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [ROW FORMAT row_format] [STORED AS file_format] [WITH SERDEPROPERTIES (...)] ] [LOCATION 's3://bucket_name/[folder]/'] [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]

Parameters[EXTERNAL]

Amazon S3 内の基になるデータファイルに基づくテーブルを、指定した LOCATION に作成することを指定します。外部テーブルを作成する場合、参照先のデータはデフォルト形式に準拠しているか、ユーザーが ROW FORMAT、STORED AS、および WITH SERDEPROPERTIES で指定する形式に準拠している必要があります。

IF NOT EXISTS

table_name という名前のテーブルが既に存在している場合は、エラーメッセージを抑制します。[db_name.]table_name

作成するテーブルの名前を指定します。オプションの db_name パラメータは、テーブルを作成する先のデータベースを指定します。この引数を省略すると、現在のデータベースが使用されます。テーブル名に数字が含まれる場合は、 table_name たとえば、 "table123"。 次の場合: table_nameアンダースコアで始まり、バックティックを使用します。たとえば、 `_mytable`。 特殊文字(アンダースコア以外)はサポートされていません。

Athena のテーブル名では大文字と小文字が区別されません。ただし、Apache Spark を使用する場合は、テーブル名を小文字にする必要があります。

420

Page 430: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE TABLE

[ ( col_name data_type [COMMENT col_comment] [, ...] ) ]

作成する各列の名前とデータ型を指定します。列名にアンダースコア以外の特殊文字は使用できません (_)。 次の場合: col_name はアンダースコアで始まり、列名をバックティックで囲みます。たとえば、 `_mycolumn`.

data_type 値には次のいずれかを指定できます。• BOOLEAN。 値は true および false.• TINYINT。 8ビット符号付き INTEGER -2^7 の最小値と 2^7-1 の最大値を持つ 2 つの補数形式。• SMALLINT。 16 ビットの符号付き INTEGER 2つの補数形式で表示され、最小値は-2^15、最大値は

2^15-1です。• INT。Athena では、2 種類の異なる INTEGER データ型を組み合わせて実装しています。Athena

では、データ定義言語 (DDL) クエリで、INT データ型を使用します。他のすべてのクエリでは、Athena は INTEGER データ型を使用します。ここで INTEGER は 2 の補数形式の 32 ビット符号付き値で表されます。最小値は -2^31、最大値は 2^31-1 です。JDBC ドライバーで、ビジネス分析アプリケーションとの互換性を保証するために、INTEGER が返ります。

• BIGINT。2 の補数形式の 64 ビット符号付き INTEGER。最小値は -2^63、最大値は 2^63-1 です。• DOUBLE

• FLOAT

• DECIMAL [ (precision, scale) ]。ここで precision は桁の合計数であり、scale (オプション) は小数点以下の桁数です。デフォルトは 0 です。たとえば、次のタイプ定義を使用します。、。DECIMAL(11,5)、 DECIMAL(15).

クエリ DDL 式で特定の小数値を持つ行を選択するときなど、小数値をリテラルとして指定するには、 DECIMAL 定義を入力し、次の例のように、クエリにリテラル(一重引用符)として小数点値をリストします。decimal_value = DECIMAL '0.12'.

• CHAR。 固定長文字データ、1 ~ 255 の指定した長さ char(10)。 詳細については、以下を参照してください。 CHAR ハイブ データ タイプ.

• VARCHAR。 可変長文字データ。1から65535までの長さが指定されています。例: varchar(10)。詳細については、以下を参照してください。 VARCHAR ハイブ データ タイプ.

• STRING。 一重引用符または二重引用符で囲まれた文字列リテラル。

Note

文字列以外のデータ型は、Athena で STRING にキャストすることができません。代わりにVARCHAR にキャストします。

• BINARY (Parquet のデータ用)• 日付と時刻の型• DATE ISO 形式の日付。例: YYYY-MM-DD。 例えば、 DATE '2008-09-15'.• TIMESTAMP の即時日時 java.sql.Timestamp 互換性のある形式、例: yyyy-MM-ddHH:mm:ss[.f...]。 例えば、 TIMESTAMP '2008-09-15 03:04:05.324'。 この形式は、セッションのタイムゾーンを使用します。

• ARRAY < data_type >• MAP < primitive_type, data_type >• STRUCT < col_name : data_type [COMMENT col_comment] [, ...] >

[COMMENT table_comment]

comment テーブルプロパティを作成し、指定した table_comment を追加します。[PARTITIONED BY (col_name data_type [ COMMENT col_comment ], ... ) ]

col_name、data_type および col_comment が指定された 1 つ以上の列を持つ、パーティション分割されたテーブルを作成します。テーブルは、個別の列名と値の組み合わせで構成されるパーティションを 1 つ以上持つことができます。指定した組み合わせごとに別個のデータディレクトリが作成

421

Page 431: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE TABLE

されます。これにより、クエリパフォーマンスが向上する場合があります。パーティション化された列はテーブルデータ内には存在しません。テーブル列と同じ col_name の値を使用する場合は、エラーになります。詳細については、「データのパーティション分割 (p. 93)」を参照してください。

Note

パーティションを含むテーブルを作成した後、 MSCK修理表 (p. 429) パーティション メタデータを更新する句(例: MSCK REPAIR TABLE cloudfront_logs;。 Hive と互換性のないパーティションには、 ALTER TABLE ADD PARTITION (p. 415) パーティションをロードして、データをクエリできるようにします。

[ROW FORMAT row_format]

テーブルの行形式と基になるソースデータ (該当する場合) を指定します。row_format として、DELIMITED 句で 1 つ以上の区切り記号を指定できます。または、以下に説明するように、SERDE 句を使用できます。ROW FORMAT を省略するか、ROW FORMAT DELIMITED を指定すると、ネイティブ SerDe が使用されます。• [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]• [DELIMITED COLLECTION ITEMS TERMINATED BY char]• [MAP KEYS TERMINATED BY char]• [LINES TERMINATED BY char]• [NULL DEFINED AS char]

Hive 0.13 で、STORED AS ファイル形式が TEXTFILE である場合にのみ使用できます。

--または--• SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value",

"property_name" = "property_value" [, ...] )]

serde_name は、使用する SerDe を示します。WITH SERDEPROPERTIES 句を使用すると、SerDe で許可される 1 つ以上のカスタムプロパティを指定できます。

[STORED AS file_format]

テーブルデータのファイル形式を指定します。省略すると、デフォルトの TEXTFILE が使用されます。file_format のオプションは以下のとおりです。• SEQUENCEFILE• TEXTFILE• RCFILE• ORC• PARQUET• AVRO• INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

[LOCATION 's3://bucket_name/[folder]/']

テーブルを作成する基となるデータがある Amazon S3 の場所を指定します。ロケーションパスは、バケット名、またはバケット名と 1 つ以上のフォルダである必要があります。パーティションを使用する場合は、パーティション分割されたデータのルートを指定します。テーブルのロケーションの詳細については、「Amazon S3 のテーブルの場所 (p. 87)」を参照してください。データ形式とアクセス許可の詳細については、「Athena のテーブルと Amazon S3 のデータに関する要件 (p. 79)」を参照してください。

フォルダやバケットの後にはスラッシュを使用します。ファイル名や glob 文字を使用しないでください。

使用アイテム:

422

Page 432: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE TABLE AS

s3://mybucket/

s3://mybucket/folder/

s3://mybucket/folder/anotherfolder/

使用不可:

s3://path_to_bucket

s3://path_to_bucket/*

s3://path_to-bucket/mydatafile.dat

[TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',]property_name=property_value [, ...] ) ]

定義済みのテーブルプロパティ ("comment" など) に加えて、テーブル定義のカスタムメタデータとしてキーと値のペアを指定します。

Athena 建物が備え付けられている has_encrypted_data。 このプロパティをに設定 true で指定した基礎となるデータセットを示します。 LOCATION 暗号化されています。省略するか、そのワークグループの設定がクライアント側の設定を上書きしない場合、false が設定されます。省略するか、false に設定して基になるデータを暗号化すると、クエリはエラーになります。詳細については「暗号化オプションの設定 (p. 238)」を参照してください。

ETLジョブを実行するには、AWS Glueで classification AWS Glueのデータ型を示すプロパティを csv、 parquet、 orc、 avro、または json。 例えば、 'classification'='csv'。 このプロパティを指定しないと、ETLジョブは失敗します。AWS Glue コンソール、API、または CLI を使用して後で指定できます。詳細については、AWS Glue 開発者ガイド (p. 28)の「Athena における ETL用の AWS Glue ジョブの使用」と「Glue でのジョブの作成」を参照してください。

Examples

CREATE EXTERNAL TABLE IF NOT EXISTS mydatabase.cloudfront_logs ( Date DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, os STRING, Browser STRING, BrowserVersion STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples-myregion/cloudfront/plaintext/';

CREATE TABLE ASSELECT (p. 403) クエリの結果が入力された新しいテーブルを作成します。空のテーブルを作成するには CREATE TABLE (p. 420) を使用します。

423

Page 433: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE TABLE AS

詳細情報については、 CREATE TABLE AS この参照トピックの範囲外です。を参照してください。 クエリ結果からのテーブルの作成 (CTAS) (p. 126).

トピック• Synopsis (p. 404)• CTAS テーブルのプロパティ (p. 424)• Examples (p. 425)

Synopsis

CREATE TABLE table_name[ WITH ( property_name = expression [, ...] ) ]AS query[ WITH [ NO ] DATA ]

各パラメータの意味は次のとおりです。

WITH ( property_name = expression [, ...] )

オプションの CTAS テーブルのプロパティのリスト。一部のプロパティはデータストレージ形式に固有です。「CTAS テーブルのプロパティ (p. 424)」を参照してください。

query

A SELECT (p. 403) クエリを使用して新しいテーブルを作成します。

Important

パーティションがあるクエリを作成する予定がある場合は、SELECT ステートメントで列のリストの最後に、パーティション分割された列の名前を指定します。

[ WITH [ NO ] DATA ]

WITH NO DATA が指定されている場合、元のテーブルと同じスキーマを持つ新しい空のテーブルが作成されます。

CTAS テーブルのプロパティ各CTASテーブル Athena には、 WITH (property_name = expression [, ...] ). これらのパラメータの使用については、以下を参照してください。 CTAS クエリの例 (p. 132).

WITH (property_name = expression [, ...], )

external_location = [location]

省略可能。次の例のように、Athena が CTAS クエリを Amazon S3 に保存する場所です。

WITH (external_location ='s3://my-bucket/tables/parquet_table/')

Athena は、クエリ結果に同じパスを 2 回使用しません。手動で場所を指定する場合は、指定するその Amazon S3 場所にデータがないことを確認します。Athena がデータを削除することはありません。再度同じ場所を使用する場合は、手動でデータを削除します。そうしないと、CTAS クエリは失敗します。

クエリ結果の場所を強制するワークグループで external_location を指定する CTAS クエリ (p. 340)を実行すると、クエリは失敗し、エラーメッセージが表示されます。ワークグループ

424

Page 434: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE TABLE AS

に対して指定されたクエリ結果の場所を確認するには、ワークグループの詳細を参照してください (p. 344)。

ワークグループがクエリ結果の場所に対するクライアント側の設定を上書きする場合、Athena は次の場所にテーブルを作成します。

s3://<workgroup-query-results-location>/tables/<query-id>/

external_location プロパティを使用して場所を指定せず、ワークグループがクライアント側の設定を上書きしない場合、Athena はクエリ結果の場所に対して クライアント側の設定 (p. 116)を使用し、次の場所にテーブルを作成します。

s3://<query-results-location-setting>/<Unsaved-or-query-name>/<year>/<month/<date>/tables/<query-id>/

format = [format]

次のようなCTASクエリ結果のデータ形式 ORC、 PARQUET、 AVRO、 JSON、または TEXTFILE.たとえば、 WITH (format = 'PARQUET'). 省略した場合は、 PARQUET はデフォルトで使用されます。このパラメータの名前である format は小文字で記述する必要があります。そうしないと、CTAS クエリは失敗します。

partitioned_by = ARRAY( [col_name,…])

省略可能。CTAS テーブルをパーティション分割する列の配列リスト。パーティション分割された列の名前は、SELECT ステートメントで列のリストの最後に記述します。

bucketed_by( [bucket_name,…])

データの配置先となるバケットの配列リスト。省略した場合、Athena はこのクエリでデータをバケットに配置しません。

bucket_count = [int]

データの配置先となるバケットの数。省略した場合、Athena はデータをバケットに配置しません。

orc_compression = [format]

ORC データに対して使用する圧縮タイプ。たとえば、 WITH (orc_compression = 'ZLIB').省略すると、ORC および CTAS でサポートされている他のデータ ストレージ フォーマットでは、GZIP 圧縮がデフォルトで使用されます。

parquet_compression = [format]

Parquet データに対して使用する圧縮タイプ。たとえば、 WITH (parquet_compression ='SNAPPY'). 省略した場合、GZIP圧縮はデフォルトで、ParcetおよびCTASでサポートされているその他のデータストレージフォーマットに使用されます。

field_delimiter = [delimiter]

オプションであり、テキストベースのデータストレージ形式に固有のパラメータ。CSV、TSV、およびテキスト ファイル内のファイルの単一文字フィールド区切り文字。たとえば、 WITH(field_delimiter = ','). 現在、CTASクエリでは複数文字のフィールド区切り文字はサポートされていません。フィールド区切り文字を指定しなかった場合、デフォルトで \001 が使用されます。

ExamplesCTAS クエリの例については、次のリソースを参照してください。

• CTAS クエリの例 (p. 132)

425

Page 435: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドCREATE VIEW

• ETL およびデータ分析での CTAS および INSERT INTO の使用 (p. 135)• CTASステートメントを Amazon Athena コストを削減し、パフォーマンスを向上させる• CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141)

CREATE VIEW指定する SELECT クエリから新しいビューを作成します。このビューは、この先のクエリで参照できる論理的なテーブルです。ビューにはデータは一切含まれず、データを書き込むこともできません。代わりに、ビューで指定するクエリは、別のクエリでそのビューを参照するたびに実行されます。

Note

このトピックでは、参照用に概要情報を提供します。でビューを使用する方法の詳細については、 Athena、を参照 ビューの使用 (p. 120).

Synopsis

CREATE [ OR REPLACE ] VIEW view_name AS query

オプションの OR REPLACE 句は、既存のビューを更新して置き換えます。詳細については、「ビューの作成 (p. 124)」を参照してください。

Examplesテーブル orders から test ビューを作成するには、次のようなクエリを使用します。

CREATE VIEW test ASSELECT orderkey, orderstatus, totalprice / 2 AS halfFROM orders;

テーブル orders から orders_by_date ビューを作成するには、次のクエリを使用します。

CREATE VIEW orders_by_date ASSELECT orderdate, sum(totalprice) AS priceFROM ordersGROUP BY orderdate;

既存のビューを更新するには、次のような例を使用します。

CREATE OR REPLACE VIEW test ASSELECT orderkey, orderstatus, totalprice / 4 AS quarterFROM orders;

SHOW COLUMNS (p. 431)、SHOW CREATE VIEW (p. 432)、DESCRIBE VIEW (p. 427)、DROPVIEW (p. 429) も参照してください。

DESCRIBE TABLE名前付きの列に関連する列 (パーティション列を含む) を一覧表示します。これにより、複雑な列の属性を確認できます。

426

Page 436: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドDESCRIBE VIEW

概要

DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )]

パラメータ[EXTENDED | FORMATTED]

出力の形式を判断します。EXTENDED を指定すると、テーブルのすべてのメタデータが Thrift シリアル化形式で出力されます。これは主にデバッグや一般的な用途に役立ちます。メタデータを表形式で表示するには、FORMATTED を使用するか、この句を省略します。

[PARTITION partition_spec]

含まれている場合は、partition_spec で指定されたパーティションのメタデータが一覧表示されます。partition_spec は (partition_column = partition_col_value,partition_column = partition_col_value, ...) の形式です。

[col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )* ]

確認する列と属性を指定します。構造体の要素には .field_name、配列要素には '$elem$'、マップキーには '$key$'、およびマップ値には '$value$' を指定できます。これを再帰的に指定することで、複雑な列を詳しく調査できます。

DESCRIBE orders;

DESCRIBE FORMATTED mydatabase.mytable PARTITION (part_col = 100) columnA;

DESCRIBE VIEW名前が付けられたビューの列のリストを表示します。これにより、複雑なビューの属性を確認できます。

概要

DESCRIBE [view_name]

DESCRIBE orders;

SHOW COLUMNS (p. 431)、SHOW CREATE VIEW (p. 432)、SHOW VIEWS (p. 434)、DROPVIEW (p. 429) も参照してください。

DROP DATABASE指定したデータベースをカタログから削除します。データベースがテーブルを含む場合、テーブルをドロップしてから実行する必要があります。 DROP DATABASE または CASCADE 条項。DATABASE とSCHEMA はどちらでも使用できます。どちらも同じ意味です。

427

Page 437: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドDROP TABLE

Synopsis

DROP {DATABASE | SCHEMA} [IF EXISTS] database_name [RESTRICT | CASCADE]

ParametersIF EXISTS

database_name が存在しない場合に、エラーを抑制します。[RESTRICT|CASCADE]

database_name 内のテーブルを DROP オペレーションで処理する方法を決定します。RESTRICT を指定すると、テーブルが含まれているデータベースは削除されません。これがデフォルトの動作です。CASCADE を指定すると、データベースとそのすべてのテーブルが削除されます。

Examples

DROP DATABASE clickstreams;

DROP SCHEMA IF EXISTS clickstreams CASCADE;

DROP TABLEtable_name という名前のテーブルからメタデータのテーブル定義を削除します。Athena のすべてのテーブルは EXTERNAL であるため、外部テーブルを削除しても基となるデータは影響を受けません。

概要

DROP TABLE [IF EXISTS] table_name

パラメータ[ IF EXISTS ]

table_name が存在しない場合に、エラーを抑制します。

DROP TABLE fulfilled_orders

DROP TABLE IF EXISTS fulfilled_orders

Athena コンソールのクエリエディターを使用してアンダースコア (_) 以外の特殊文字を含むテーブルを削除する場合は、次の例のようにバックティックを使用します。

DROP TABLE `my-athena-database-01.my-athena-table`

428

Page 438: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドDROP VIEW

JDBC コネクタを使用して特殊文字を含むテーブルを削除する場合は、バックティック文字は必要ありません。

DROP TABLE my-athena-database-01.my-athena-table

DROP VIEW既存のビューをドロップ (削除) します。オプションの IF EXISTS 句は、ビューが存在しない場合に、エラーが制御される原因となります。

詳細については、「ビューの削除 (p. 125)」を参照してください。

概要DROP VIEW [ IF EXISTS ] view_name

例DROP VIEW orders_by_date

DROP VIEW IF EXISTS orders_by_date

CREATE VIEW (p. 426)、SHOW COLUMNS (p. 431)、SHOW CREATE VIEW (p. 432)、SHOWVIEWS (p. 434) および DESCRIBE VIEW (p. 427) も参照してください。

MSCK REPAIR TABLEHive 互換パーティションを追加した後に、このMSCK REPAIR TABLEコマンドを使用してカタログ内のメタデータを更新します。

このコマンドは、テーブルの作成後にファイルシステムに追加された Hive 互換パーティションなどのファイルシステムをスキャンします。MSCK REPAIR TABLEAmazon S3MSCK REPAIR TABLEは、テーブルメタデータ内のパーティションと S3 内のパーティションを比較します。テーブルの作成時に指定した S3 の場所に新しいパーティションがある場合、そのパーティションはメタデータおよびAthenaテーブルに追加されます。

物理パーティションを追加すると、カタログのメタデータがファイルシステムのデータのレイアウトと不整合になるため、新しいパーティションに関する情報をカタログに追加する必要があります。メタデータを更新するには、Athena から新しいパーティションのデータをクエリMSCK REPAIR TABLEできるように実行します。

Note

はメタデータにパーティションを追加するMSCK REPAIR TABLEだけで、そのパーティションは削除されません。でパーティションを手動で削除した後でメタデータからパーティションを削除するには、コマンドを実行しますAmazon S3。ALTER TABLE table-name DROP PARTITION詳細については、「」を参照してくださいALTER TABLE DROP PARTITION (p. 416)。

考慮事項と制約事項MSCK REPAIR TABLE を使用する際は、次のポイントに注意が必要です。

• すべてのパーティションを追加するには時間がかかる場合があります。このオペレーションがタイムアウトになると、未完了状態となり、一部のパーティションのみがカタログに追加されます。すべての

429

Page 439: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドMSCK REPAIR TABLE

パーティションが追加されるまで、同じテーブルで MSCK REPAIR TABLE を実行してください。詳細については、「データのパーティション分割 (p. 93)」を参照してください。

• Hive と互換性のないパーティションの場合、ALTER TABLE ADD PARTITION (p. 415) を使用してパーティションをロードすることで、データをクエリできるようにします。

• Athena で使用するパーティションの場所では、s3 プロトコル (s3://bucket/folder/ など) を使用する必要があります。Athena では、他のプロトコル (s3a://bucket/folder/ など) を使用する場所があると、その場所が含まれているテーブルに対して MSCK REPAIR TABLE クエリを実行したときに、クエリが失敗します。

Synopsis

MSCK REPAIR TABLE table_name

Examples

MSCK REPAIR TABLE orders;

TroubleshootingMSCK REPAIR TABLEを実行した後、 が のテーブルにパーティションを追加しない場合は、次の点を確認してください。AthenaAWS Glue データカタログ

• AWS Identity and Access Management (IAM) ユーザーまたはロールに、glue:BatchCreatePartition アクションを許可するポリシーがあることを確認します。

• IAMAmazon S3アクションを含め、 にアクセスするのに十分なアクセス許可を持つポリシーがs3:DescribeJobユーザーまたはロールにあることを確認します。許可する Amazon S3 アクションの例については、 のバケットポリシー例を参照してくださいAmazon S3 バケットへの Athena のクロスアカウントアクセス (p. 256)。

• Amazon S3 パスがキャメルケースではなく小文字になっていることを確認します (たとえば、userIdではなく userid)。

• クエリタイムアウト–MSCK REPAIR TABLEは、テーブルを初めて作成するときや、データとパーティションのメタデータのパリティに不確実性がある場合に最適です。を使用して新しいパーティションMSCK REPAIR TABLEを頻繁に追加する場合 (たとえば、毎日)、クエリのタイムアウトが発生している場合は、 ALTER TABLE ADD PARTITION (p. 415) の使用を検討してください。

• ファイルシステムからパーティションが欠落–しています。 でパーティションを手動で削除AmazonS3して MSCK REPAIR TABLE を実行した場合、エラーメッセージが表示される場合があります。Partitions missing from filesystem。 これは、 MSCK REPAIR TABLEがテーブルのメタデータから古いパーティションを削除しないために発生します。テーブルメタデータから削除されたパーティションを削除するには、ALTER TABLE DROP PARTITION (p. 416)代わりにを実行します。SHOWPARTITIONS (p. 432)と同様に、メタデータ内のパーティションのみが表示され、ファイルシステム内のパーティションは表示されていないことに注意してください。

以下のセクションでは、その他の詳細について説明します。

IAM ポリシーで glue:BatchCreatePartition を許可します。

の実行に使用している ユーザーまたはロールにアタッチされているIAMポリシーを確認しますMSCKREPAIR TABLE。 Athena で AWS Glue データカタログを使用する場合、 (p. 17)ポリシーでIAMそのアクションを許可する必要があります。glue:BatchCreatePartitionglue:BatchCreatePartition アクションを許可する IAM ポリシーの例については、「AmazonAthenaFullAccess 管理ポリシー (p. 245)」を参照してください。

430

Page 440: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSHOW COLUMNS

Amazon S3 パスを小文字に変更する

Amazon S3 パスは小文字にする必要があります。S3 パスがキャメルケースの場合、MSCK REPAIRTABLE は AWS Glue データカタログ にパーティションを追加しません。たとえば、S3 パスが userId の場合、次のパーティションは AWS Glue データカタログ に追加されません。

s3://bucket/path/userId=1/

s3://bucket/path/userId=2/

s3://bucket/path/userId=3/

この問題を解決するには、キャメルケースではなくフラットケースを使用します。

s3://bucket/path/userid=1/

s3://bucket/path/userid=2/

s3://bucket/path/userid=3/

SHOW COLUMNS基本テーブルあるいはビュー用にスキーマの列を一覧表示します。SELECTステートメントを使用して列を表示するには、「」を参照してください指定した表またはビューの列のリスト化または検索 (p. 226)。

Synopsis

SHOW COLUMNS IN table_name|view_name

Examples

SHOW COLUMNS IN clicks;

SHOW CREATE TABLEtable_name という既存のテーブルを分析し、作成元のクエリを生成します。

概要

SHOW CREATE TABLE [db_name.]table_name

パラメータTABLE [db_name.]table_name

db_name パラメータはオプションです。省略すると、コンテキストはデフォルトで現在のデータベースになります。

Note

テーブル名は必須です。

431

Page 441: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSHOW CREATE VIEW

SHOW CREATE TABLE orderclickstoday;

SHOW CREATE TABLE `salesdata.orderclickstoday`;

SHOW CREATE VIEW指定するビューを作成する SQL ステートメントを表示します。

概要

SHOW CREATE VIEW view_name

SHOW CREATE VIEW orders_by_date

「CREATE VIEW (p. 426)」および「DROP VIEW (p. 429)」も参照してください。

SHOW DATABASESメタストアに定義されているすべてのデータベースを一覧表示します。DATABASES または SCHEMAS を使用できます。どちらも同じ意味です。

概要

SHOW {DATABASES | SCHEMAS} [LIKE 'regular_expression']

パラメータ[LIKE 'regular_expression']

データベースのリストをフィルタ処理して、指定した regular_expression と一致するものに絞り込みます。ワイルドカード文字の照合では、組み合わせ .* を使用できます。この組み合わせは、任意のゼロ文字に無制限に一致します。

SHOW SCHEMAS;

SHOW DATABASES LIKE '.*analytics';

SHOW PARTITIONSテーブルのすべてのパーティションを一覧表示します。

432

Page 442: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSHOW TABLES

SynopsisSHOW PARTITIONS table_name

• テーブル内のパーティションを表示し、特定の順序で一覧表示するには、AWS Glue データカタログ のクエリ (p. 224) ページの「特定の表のパーティションのリスト化 (p. 226)」セクションを参照してください。

• パーティションの内容を表示するには、データのパーティション分割 (p. 93) ページの「データのクエリ (p. 95)」セクションを参照してください。

• SHOW PARTITIONS では、Athena によって射影されているが AWS Glue カタログに登録されていないパーティションはリストされません。パーティション射影の詳細については、「Amazon Athena を使用したパーティション射影 (p. 98)」を参照してください。

• SHOW PARTITIONSは、実際のファイルシステムのパーティションではなく、メタデータのパーティションを一覧表示します。でパーティションを手動で削除した後にメタデータを更新するには、Amazon S3 を実行しますALTER TABLE DROP PARTITION (p. 416)。

ExamplesSHOW PARTITIONS clicks;

SHOW TABLESデータベース内のすべての基本テーブルとビューを一覧表示します。

概要SHOW TABLES [IN database_name] ['regular_expression']

パラメータ[IN database_name]

テーブルを一覧表示する database_name を指定します。省略すると、現在のコンテキストのデータベースが使用されます。

['regular_expression']

テーブルのリストをフィルタして、指定した regular_expression と一致するものに絞り込みます。ワイルドカードとして使用できるのは、任意の文字を示す *、または複数の文字からの選択を示す | のみです。

例Example – データベース sampledb 内のすべてのテーブルを表示します

SHOW TABLES IN sampledb

Results

alb_logscloudfront_logs

433

Page 443: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSHOW TBLPROPERTIES

elb_logsflights_2016flights_parquetview_2016_flights_dfw

Example – 「フライト」という単語を含む sampledb のすべてのテーブルの名前を表示します

SHOW TABLES IN sampledb '*flights*'

Results

flights_2016flights_parquetview_2016_flights_dfw

Example – 「ログ」という単語がその末尾にある sampledb のすべてのテーブルの名前を表示します

SHOW TABLES IN sampledb '*logs'

Results

alb_logscloudfront_logselb_logs

SHOW TBLPROPERTIES指定されたテーブルのテーブルプロパティを一覧表示します。

概要SHOW TBLPROPERTIES table_name [('property_name')]

パラメータ[('property_name')]

このパラメータを含めると、property_name というプロパティの値のみが表示されます。

例SHOW TBLPROPERTIES orders;

SHOW TBLPROPERTIES orders('comment');

SHOW VIEWS指定するデータベース、あるいは、データベース名を省略する場合の現在のデータベースのビューのリスト。オプションの LIKE 句を正規表現で使用して、ビュー名のリストを制限します。

434

Page 444: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド考慮事項と制約事項

Athena は、各値がビューの名前である STRING タイプの値の一覧を返します。

概要SHOW VIEWS [IN database_name] LIKE ['regular_expression']

パラメータ

[IN database_name]

ビューを一覧表示する database_name を指定します。省略すると、現在のコンテキストのデータベースが使用されます。

[LIKE 'regular_expression']

ビューのリストをフィルタして、指定した regular_expression と一致するものに絞り込みます。ワイルドカードとして使用できるのは、任意の文字を示す *、または複数の文字からの選択を示す |のみです。

例SHOW VIEWS;

SHOW VIEWS IN marketing_analytics LIKE 'orders*';

SHOW COLUMNS (p. 431)、SHOW CREATE VIEW (p. 432)、DESCRIBE VIEW (p. 427)、DROPVIEW (p. 429) も参照してください。

Amazon Athena での SQL クエリに関する考慮事項と制約事項

Athena のクエリを実行するときは、以下の考慮事項と制限事項に留意してください。

• ストアドプロシージャ – ストアドプロシージャはサポートされていません。• パラメータ化されたクエリ – パラメータ化されたクエリはサポートされていません。ただし、クエリの

本文で呼び出すことができるユーザー定義関数を作成できます。詳細については、「ユーザー定義関数を使用したクエリ(プレビュー) (p. 193)」を参照してください。

• パーティションの最大数 – CREATE TABLE AS SELECT (CTAS) ステートメントで作成できるパーティションの最大数は 100 です。詳細については、「CREATE TABLE AS (p. 423)」を参照してください。回避策については、「CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141)」を参照してください。

• サポートされていないステートメント – 次のステートメントはサポートされていません。• PREPARED ステートメントはサポートされていません。USING を指定して EXECUTE を実行すること

はできません。• CREATE TABLE LIKE はサポートされていません。• DESCRIBE INPUT および DESCRIBE OUTPUT はサポートされていません。• EXPLAIN ステートメントはサポートされていません。

• Presto フェデレーションコネクタ – Presto フェデレーションコネクタ はサポートされていません。データソースを接続するために Amazon Athena Federated Query (Preview) を使用します。詳細については、Amazon Athena Federated Query (Preview) を使用する (p. 55) を参照してください。

435

Page 445: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクロスリージョンクエリ

• 複雑なデータ型の Parquet 列に対してクエリを実行する – 複雑なデータ型 (array、map、struct) の列に対してクエリを実行する場合で、データの保存に Parquet を使用している場合、Athena は現行では、想定されているように指定された列のみを選択して読み取るのではなく、データの列全体を読み込みます。これは既知の問題です。

• 多数のパーティションを持つテーブルのタイムアウト – Athena は、何千ものパーティションを持つテーブルにクエリを実行すると、タイムアウトすることがあります。これは、テーブルに 型ではないパーティションが多数ある場合に発生しますstring。 タイプを使用すると、 string はメタストアレベルでパーティションAthenaを除外します。ただし、他のデータ型を使用する場合、Athena はサーバー側のパーティションを除外します。パーティションの数が多いほど、このプロセスにかかる時間が長くなり、クエリがタイムアウトする可能性が高くなります。この問題を解決するには、Athena がメタストアレベルでパーティションを除外するように、パーティションのタイプを string に設定します。これにより、オーバーヘッドが軽減され、クエリがタイムアウトするのを防ぐことができます。

• Amazon S3 GLACIER ストレージ – データが Amazon S3 GLACIER ストレージクラスに移動または移行されると、Athena による読み取りまたはクエリはできなくなります。これは、ストレージクラスオブジェクトが復元された後でも当てはまります。クエリする復元されたオブジェクトを Athena による読み取り可能にするには、復元されたオブジェクトを Amazon S3 にコピーして、ストレージクラスを変更します。

• Amazon S3 アクセスポイント – LOCATION 句で Amazon S3 アクセスポイントを使用することはできません。ただし、Amazon S3 バケットポリシーによって Amazon S3 アクセスポイントを介するオブジェクトへのリクエストが明示的に拒否されない限り、リクエスタにオブジェクトに対する適切なアクセス許可があれば、オブジェクトは Athena からアクセス可能であることが必要です。

• 非表示として扱われるファイル – Athena は、アンダースコア (_) またはドット (.) で始まるソースファイルを非表示として扱います。この制限を回避するには、ファイルの名前を変更します。

クロスリージョンクエリAthenaは、以下のリージョンでのみクエリをサポートしています。他のリージョンにまたがるクエリでエラーメッセージを生成する可能性がある InvalidToken: The provided token is malformed or otherwiseinvalid.

リージョン名 リージョンコード

アジアパシフィック (東京) ap-northeast-1

アジアパシフィック (ソウル) ap-northeast-2

アジアパシフィック (ムンバイ) ap-south-1

アジアパシフィック (シンガポール) ap-southeast-1

アジアパシフィック (シドニー) ap-southeast-2

カナダ (中部) ca-central-1

欧州 (フランクフルト) eu-central-1

欧州 (ストックホルム) eu-north-1

欧州 (アイルランド) eu-west-1

欧州 (ロンドン) eu-west-2

欧州 (パリ) eu-west-3

南米 (サンパウロ) sa-east-1

米国東部(バージニア北部) us-east-1

436

Page 446: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクロスリージョンクエリ

リージョン名 リージョンコード

米国東部 (オハイオ) us-east-2

米国西部 (北カリフォルニア) us-west-1

米国西部 (オレゴン) us-west-2

437

Page 447: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドコードサンプル

コードのサンプル、サービスのクォータ、以前のバージョンのJDBC ドライバー

コードサンプルを使用して、AWS SDK for Java に基づいて Athena アプリケーションを作成します。

以前のバージョンの JDBC ドライバーを使用するには、このセクションのリンクを使用します。

サービスのクォータについて説明します。

トピック• コードサンプル (p. 438)• 以前のバージョンの JDBC ドライバーの使用 (p. 447)• サービスクォータ (p. 452)

コードサンプルSDK for Java 2.x で Athena アプリケーションを作成する開始点として、このトピックの例を使用できます。Javaコード例の実行の詳細については、 Amazon Athena Java Readme (Java Readme) 上の AWSコード例リポジトリ GitHubで

• Java コードの例• 定数 (p. 438)• Athena にアクセスするためのクライアントの作成 (p. 439)• クエリ実行の使用

• クエリ実行の開始 (p. 439)• クエリ実行の停止 (p. 441)• クエリ実行の表示 (p. 443)

• 名前付きクエリの使用• 名前付きクエリの作成 (p. 444)• 名前付きクエリの削除 (p. 444)• クエリ実行の表示 (p. 443)

Note

これらのサンプルで使用する定数 (ATHENA_SAMPLE_QUERY など)は、ExampleConstants.java クラス宣言に定義されている文字列用です。これらの定数は、独自の文字列または定義済み定数を置き換えてください。

ConstantsExampleConstants.java クラスは、Athena の開始方法 (p. 8)チュートリアルで作成されたテーブルに対してクエリを実行する方法を示します。

package aws.example.athena;

438

Page 448: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAthena にアクセスするためのクライアントの作成

public class ExampleConstants {

public static final int CLIENT_EXECUTION_TIMEOUT = 100000; public static final String ATHENA_OUTPUT_BUCKET = "s3://bucketscott2"; // change the Amazon S3 bucket name to match your environment // Demonstrates how to query a table with a comma-separated value (CSV) table. For information, see //https://docs.aws.amazon.com/athena/latest/ug/work-with-data.html public static final String ATHENA_SAMPLE_QUERY = "SELECT * FROM scott2;"; // change the Query statement to match your environment public static final long SLEEP_AMOUNT_IN_MS = 1000; public static final String ATHENA_DEFAULT_DATABASE = "mydatabase"; // change the database to match your database

}

Athena にアクセスするためのクライアントの作成AthenaClientFactory.java クラスは、Amazon Athena クライアントを作成して設定する方法を示します。

package aws.example.athena;

import software.amazon.awssdk.auth.credentials.InstanceProfileCredentialsProvider;import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.athena.AthenaClient;import software.amazon.awssdk.services.athena.AthenaClientBuilder;

public class AthenaClientFactory {

private final AthenaClientBuilder builder = AthenaClient.builder() .region(Region.US_WEST_2) .credentialsProvider(InstanceProfileCredentialsProvider.create());

public AthenaClient createClient() { return builder.build(); }}

クエリ実行の開始は、 StartQueryExample に、クエリをに送信する方法を示します。 Athena、結果が利用可能になるまで待ってから、結果を処理してください。

package aws.example.athena;

import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.athena.AthenaClient;import software.amazon.awssdk.services.athena.model.QueryExecutionContext;import software.amazon.awssdk.services.athena.model.ResultConfiguration;import software.amazon.awssdk.services.athena.model.StartQueryExecutionRequest;import software.amazon.awssdk.services.athena.model.StartQueryExecutionResponse;import software.amazon.awssdk.services.athena.model.AthenaException;import software.amazon.awssdk.services.athena.model.GetQueryExecutionRequest;import software.amazon.awssdk.services.athena.model.GetQueryExecutionResponse;import software.amazon.awssdk.services.athena.model.QueryExecutionState;import software.amazon.awssdk.services.athena.model.GetQueryResultsRequest;import software.amazon.awssdk.services.athena.model.GetQueryResultsResponse;import software.amazon.awssdk.services.athena.model.ColumnInfo;import software.amazon.awssdk.services.athena.model.Row;import software.amazon.awssdk.services.athena.model.Datum;

439

Page 449: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ実行の開始

import software.amazon.awssdk.services.athena.paginators.GetQueryResultsIterable;import java.util.List;

public class StartQueryExample { public static void main(String[] args) throws InterruptedException {

AthenaClient athenaClient = AthenaClient.builder() .region(Region.US_WEST_2) .build();

String queryExecutionId = submitAthenaQuery(athenaClient); waitForQueryToComplete(athenaClient, queryExecutionId); processResultRows(athenaClient, queryExecutionId); athenaClient.close(); }

// Submits a sample query to Amazon Athena and returns the execution ID of the query public static String submitAthenaQuery(AthenaClient athenaClient) {

try {

// The QueryExecutionContext allows us to set the database QueryExecutionContext queryExecutionContext = QueryExecutionContext.builder() .database(ExampleConstants.ATHENA_DEFAULT_DATABASE).build();

// The result configuration specifies where the results of the query should go ResultConfiguration resultConfiguration = ResultConfiguration.builder() .outputLocation(ExampleConstants.ATHENA_OUTPUT_BUCKET) .build();

StartQueryExecutionRequest startQueryExecutionRequest = StartQueryExecutionRequest.builder() .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY) .queryExecutionContext(queryExecutionContext) . resultConfiguration(resultConfiguration) .build();

StartQueryExecutionResponse startQueryExecutionResponse = athenaClient.startQueryExecution(startQueryExecutionRequest); return startQueryExecutionResponse.queryExecutionId();

} catch (AthenaException e) { e.printStackTrace(); System.exit(1); } return ""; }

// Wait for an Amazon Athena query to complete, fail or to be cancelled public static void waitForQueryToComplete(AthenaClient athenaClient, String queryExecutionId) throws InterruptedException { GetQueryExecutionRequest getQueryExecutionRequest = GetQueryExecutionRequest.builder() .queryExecutionId(queryExecutionId).build();

GetQueryExecutionResponse getQueryExecutionResponse; boolean isQueryStillRunning = true; while (isQueryStillRunning) { getQueryExecutionResponse = athenaClient.getQueryExecution(getQueryExecutionRequest); String queryState = getQueryExecutionResponse.queryExecution().status().state().toString(); if (queryState.equals(QueryExecutionState.FAILED.toString())) { throw new RuntimeException("The Amazon Athena query failed to run with error message: " + getQueryExecutionResponse .queryExecution().status().stateChangeReason());

440

Page 450: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ実行の停止

} else if (queryState.equals(QueryExecutionState.CANCELLED.toString())) { throw new RuntimeException("The Amazon Athena query was cancelled."); } else if (queryState.equals(QueryExecutionState.SUCCEEDED.toString())) { isQueryStillRunning = false; } else { // Sleep an amount of time before retrying again Thread.sleep(ExampleConstants.SLEEP_AMOUNT_IN_MS); } System.out.println("The current status is: " + queryState); } }

// This code retrieves the results of a query public static void processResultRows(AthenaClient athenaClient, String queryExecutionId) {

try {

// Max Results can be set but if its not set, // it will choose the maximum page size GetQueryResultsRequest getQueryResultsRequest = GetQueryResultsRequest.builder() .queryExecutionId(queryExecutionId) .build();

GetQueryResultsIterable getQueryResultsResults = athenaClient.getQueryResultsPaginator(getQueryResultsRequest);

for (GetQueryResultsResponse result : getQueryResultsResults) { List<ColumnInfo> columnInfoList = result.resultSet().resultSetMetadata().columnInfo(); List<Row> results = result.resultSet().rows(); processRow(results, columnInfoList); }

} catch (AthenaException e) { e.printStackTrace(); System.exit(1); } }

private static void processRow(List<Row> row, List<ColumnInfo> columnInfoList) {

for (Row myRow : row) { List<Datum> allData = myRow.data(); for (Datum data : allData) { System.out.println("The value of the column is "+data.varCharValue()); } } }}

クエリ実行の停止StopQueryExecutionExample はサンプルクエリを実行し、すぐにクエリを停止してから、クエリのステータスをチェックしてクエリがキャンセルされたことを確認します。

package aws.example.athena;

import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.athena.AthenaClient;import software.amazon.awssdk.services.athena.model.StopQueryExecutionRequest;

441

Page 451: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ実行の停止

import software.amazon.awssdk.services.athena.model.GetQueryExecutionRequest;import software.amazon.awssdk.services.athena.model.GetQueryExecutionResponse;import software.amazon.awssdk.services.athena.model.QueryExecutionState;import software.amazon.awssdk.services.athena.model.AthenaException;import software.amazon.awssdk.services.athena.model.QueryExecutionContext;import software.amazon.awssdk.services.athena.model.ResultConfiguration;import software.amazon.awssdk.services.athena.model.StartQueryExecutionRequest;import software.amazon.awssdk.services.athena.model.StartQueryExecutionResponse;

public class StopQueryExecutionExample { public static void main(String[] args) throws Exception {

AthenaClient athenaClient = AthenaClient.builder() .region(Region.US_WEST_2) .build();

String sampleQueryExecutionId = submitAthenaQuery(athenaClient); stopAthenaQuery(athenaClient, sampleQueryExecutionId); athenaClient.close(); }

public static void stopAthenaQuery(AthenaClient athenaClient, String sampleQueryExecutionId){

try { StopQueryExecutionRequest stopQueryExecutionRequest = StopQueryExecutionRequest.builder() .queryExecutionId(sampleQueryExecutionId) .build();

athenaClient.stopQueryExecution(stopQueryExecutionRequest);

// Ensure that the query was stopped GetQueryExecutionRequest getQueryExecutionRequest = GetQueryExecutionRequest.builder() .queryExecutionId(sampleQueryExecutionId) .build();

GetQueryExecutionResponse getQueryExecutionResponse = athenaClient.getQueryExecution(getQueryExecutionRequest); if (getQueryExecutionResponse.queryExecution() .status() .state() .equals(QueryExecutionState.CANCELLED)) {

System.out.println("The Amazon Athena query has been cancelled!"); }

} catch (AthenaException e) { e.printStackTrace(); System.exit(1); } }

// Submits an example query and returns a query execution Id value public static String submitAthenaQuery(AthenaClient athenaClient) {

try { QueryExecutionContext queryExecutionContext = QueryExecutionContext.builder() .database(ExampleConstants.ATHENA_DEFAULT_DATABASE).build();

ResultConfiguration resultConfiguration = ResultConfiguration.builder() .outputLocation(ExampleConstants.ATHENA_OUTPUT_BUCKET).build();

StartQueryExecutionRequest startQueryExecutionRequest = StartQueryExecutionRequest.builder()

442

Page 452: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドクエリ実行の表示

.queryExecutionContext(queryExecutionContext) .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY) .resultConfiguration(resultConfiguration).build();

StartQueryExecutionResponse startQueryExecutionResponse = athenaClient.startQueryExecution(startQueryExecutionRequest); return startQueryExecutionResponse.queryExecutionId();

} catch (AthenaException e) { e.printStackTrace(); System.exit(1); } return null;

}}

クエリ実行の表示ListQueryExecutionsExample は、クエリ実行 ID のリストを取得する方法を示します。

package aws.example.athena;

import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.athena.AthenaClient;import software.amazon.awssdk.services.athena.model.AthenaException;import software.amazon.awssdk.services.athena.model.ListQueryExecutionsRequest;import software.amazon.awssdk.services.athena.model.ListQueryExecutionsResponse;import software.amazon.awssdk.services.athena.paginators.ListQueryExecutionsIterable;import java.util.List;

public class ListQueryExecutionsExample {

public static void main(String[] args) throws Exception {

AthenaClient athenaClient = AthenaClient.builder() .region(Region.US_WEST_2) .build();

listQueryIds(athenaClient); athenaClient.close(); }

public static void listQueryIds(AthenaClient athenaClient) {

try { ListQueryExecutionsRequest listQueryExecutionsRequest = ListQueryExecutionsRequest.builder().build(); ListQueryExecutionsIterable listQueryExecutionResponses = athenaClient.listQueryExecutionsPaginator(listQueryExecutionsRequest);

for (ListQueryExecutionsResponse listQueryExecutionResponse : listQueryExecutionResponses) { List<String> queryExecutionIds = listQueryExecutionResponse.queryExecutionIds(); System.out.println("\n" +queryExecutionIds); } } catch (AthenaException e) { e.printStackTrace(); System.exit(1); } }

443

Page 453: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド名前付きクエリの作成

}

名前付きクエリの作成CreateNamedQueryExample は、名前付きクエリの作成方法を示します。

package aws.example.athena;

import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.athena.AthenaClient;import software.amazon.awssdk.services.athena.model.AthenaException;import software.amazon.awssdk.services.athena.model.CreateNamedQueryRequest;

public class CreateNamedQueryExample { public static void main(String[] args) throws Exception {

final String USAGE = "\n" + "Usage:\n" + " CreateNamedQueryExample <name>\n\n" + "Where:\n" + " name - the name of the Amazon Athena query. \n\n" ;

if (args.length != 1) { System.out.println(USAGE); System.exit(1); }

String name = args[0]; AthenaClient athenaClient = AthenaClient.builder() .region(Region.US_WEST_2) .build();

createNamedQuery(athenaClient, name); athenaClient.close(); }

public static void createNamedQuery(AthenaClient athenaClient, String name) {

try { // Create the named query request. CreateNamedQueryRequest createNamedQueryRequest = CreateNamedQueryRequest.builder() .database(ExampleConstants.ATHENA_DEFAULT_DATABASE) .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY) .description("Sample Description") .name(name) .build();

athenaClient.createNamedQuery(createNamedQueryRequest); System.out.println("Done"); } catch (AthenaException e) { e.printStackTrace(); System.exit(1); } }}

名前付きクエリの削除DeleteNamedQueryExample は、名前付きクエリ ID を使用して名前付きクエリを削除する方法を示します。

444

Page 454: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド名前付きクエリの削除

package aws.example.athena;

import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.athena.AthenaClient;import software.amazon.awssdk.services.athena.model.DeleteNamedQueryRequest;import software.amazon.awssdk.services.athena.model.AthenaException;import software.amazon.awssdk.services.athena.model.CreateNamedQueryRequest;import software.amazon.awssdk.services.athena.model.CreateNamedQueryResponse;

public class DeleteNamedQueryExample {

public static void main(String[] args) {

final String USAGE = "\n" + "Usage:\n" + " DeleteNamedQueryExample <name>\n\n" + "Where:\n" + " name - the name of the Amazon Athena query. \n\n" ;

if (args.length != 1) { System.out.println(USAGE); System.exit(1); }

String name = args[0]; AthenaClient athenaClient = AthenaClient.builder() .region(Region.US_WEST_2) .build();

String sampleNamedQueryId = getNamedQueryId(athenaClient, name); deleteQueryName(athenaClient, sampleNamedQueryId); athenaClient.close(); }

public static void deleteQueryName(AthenaClient athenaClient, String sampleNamedQueryId) {

try { DeleteNamedQueryRequest deleteNamedQueryRequest = DeleteNamedQueryRequest.builder() .namedQueryId(sampleNamedQueryId) .build();

athenaClient.deleteNamedQuery(deleteNamedQueryRequest);

} catch (AthenaException e) { e.printStackTrace(); System.exit(1); } }

public static String getNamedQueryId(AthenaClient athenaClient, String name) { try { CreateNamedQueryRequest createNamedQueryRequest = CreateNamedQueryRequest.builder() .database(ExampleConstants.ATHENA_DEFAULT_DATABASE) .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY) .name(name) .description("Sample description") .build();

CreateNamedQueryResponse createNamedQueryResponse = athenaClient.createNamedQuery(createNamedQueryRequest); return createNamedQueryResponse.namedQueryId();

445

Page 455: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド名前付きクエリの表示

} catch (AthenaException e) { e.printStackTrace(); System.exit(1); } return null; }}

名前付きクエリの表示ListNamedQueryExample は、名前付きクエリ ID のリストを取得する方法を示します。

package aws.example.athena;

import software.amazon.awssdk.regions.Region;import software.amazon.awssdk.services.athena.AthenaClient;import software.amazon.awssdk.services.athena.model.AthenaException;import software.amazon.awssdk.services.athena.model.ListNamedQueriesRequest;import software.amazon.awssdk.services.athena.model.ListNamedQueriesResponse;import software.amazon.awssdk.services.athena.paginators.ListNamedQueriesIterable;

import java.util.List;

public class ListNamedQueryExample {

public static void main(String[] args) throws Exception {

AthenaClient athenaClient = AthenaClient.builder() .region(Region.US_WEST_2) .build();

listNamedQueries(athenaClient) ; athenaClient.close(); }

public static void listNamedQueries(AthenaClient athenaClient) {

try{ ListNamedQueriesRequest listNamedQueriesRequest = ListNamedQueriesRequest.builder() .build();

ListNamedQueriesIterable listNamedQueriesResponses = athenaClient.listNamedQueriesPaginator(listNamedQueriesRequest); for (ListNamedQueriesResponse listNamedQueriesResponse : listNamedQueriesResponses) { List<String> namedQueryIds = listNamedQueriesResponse.namedQueryIds(); System.out.println(namedQueryIds); }

} catch (AthenaException e) { e.printStackTrace(); System.exit(1); } }}

446

Page 456: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド以前のバージョンの JDBC ドライバー

以前のバージョンの JDBC ドライバーの使用最新バージョンの JDBC ドライバーを使用することをお勧めします。詳細については、「JDBC ドライバーを介した Athena の使用 (p. 72)」を参照してください。以前のバージョン 2.x ドライバーおよびサポート資料がアプリケーションで必要な場合のリンクです。

以前のバージョンの JDBC ドライバー

JDBC ドライバーのバージョン

ダウンロード

JDBC 4.2および JDK8.0 互換 –AthenaJDBC42-2.0.8.jar

2.0.8JDBC 4.1および JDK7.0 互換 –AthenaJDBC41-2.0.8.jar

リリースノート

ライセンス契約 通知

インストールおよび設定ガイド(PDF)

移行ガイド(PDF)

JDBC 4.2および JDK8.0 互換 –AthenaJDBC42-2.0.7.jar

2.0.7JDBC 4.1および JDK7.0 互換 –AthenaJDBC41-2.0.7.jar

リリースノート

ライセンス契約 通知

インストールおよび設定ガイド(PDF)

移行ガイド(PDF)

JDBC 4.2および JDK8.0 互換 –AthenaJDBC42-2.0.6.jar

2.0.6JDBC 4.1および JDK7.0 互換 –AthenaJDBC41-2.0.6.jar

リリースノート

ライセンス契約 通知

インストールおよび設定ガイド(PDF)

移行ガイド(PDF)

JDBC 4.2および JDK8.0 互換 –AthenaJDBC42-2.0.5.jar

2.0.5JDBC 4.1および JDK7.0 互換 –AthenaJDBC41-2.0.5.jar

リリースノート

ライセンス契約 通知

インストールおよび設定ガイド(PDF)

移行ガイド(PDF)

JDBC 4.2および JDK8.0 互換 –AthenaJDBC42-2.0.2.jar2.0.2

JDBC 4.1および JDK

リリースノート

ライセンス契約 通知

インストールおよび設定ガイド(PDF)

移行ガイド(PDF)

447

Page 457: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJDBC ドライバーバージョン 1.1.0 用手順

JDBC ドライバーのバージョン

ダウンロード

7.0 互換 –AthenaJDBC41-2.0.2.jar

JDBC ドライバーバージョン 1.1.0 用手順このセクションには、JDBC ドライバーのバージョン 1.1.0 をダウンロードするためのリンクが含まれています。最新バージョンのドライバーに移行することを強くお勧めします。詳細については、JDBC ドライバー移行ガイドを参照してください。

JDBC ドライバーバージョン 1.0.1 以前のバージョンは廃止されました。

JDBC ドライバーのバージョン 1.1.0 は、JDBC 4.1 および JDK 7.0 と互換性があります。ドライバーをダウンロードするには、AthenaJDBC41-1.1.0.jar リンクを使用します。また、ドライバーのドライバーライセンスとサードパーティーライセンスもダウンロードします。AWS CLI で次のコマンドを使用します。aws s3 cp s3://path_to_the_driver [local_directory]。次に、このセクションの残りの手順を使用します。

Note

以下の手順は、JDBC バージョン 1.1.0 以前のバージョンに固有のものです。

JDBC ドライバーバージョン 1.1.0: 接続文字列の指定カスタムアプリケーションで JDBC ドライバーの接続 URL を指定するには、次の形式で文字列を使用します。

jdbc:awsathena://athena.{REGION}.amazonaws.com:443

{REGION} は、us-west-2 などのリージョン識別子です。Athena のリージョンの詳細については、「リージョン」を参照してください。

JDBC ドライバーバージョン 1.1.0: JDBC ドライバーのクラス名の指定カスタムアプリケーションでドライバーを使用するには、Java クラスパスを Amazon S3 の https://s3.amazonaws.com/athena-downloads/drivers/JDBC/AthenaJDBC_1.1.0/AthenaJDBC41-1.1.0.jar からダウンロードした JAR ファイルの場所に設定します。これにより、JAR 内のクラスが使用可能になります。JDBC ドライバーのメインクラスは com.amazonaws.athena.jdbc.AthenaDriver です。

JDBC ドライバーバージョン 1.1.0: JDBC ドライバーの認証情報の提供Athena や Amazon S3 バケットなど、AWS のサービスやリソースへのアクセスを取得するには、JDBC ドライバーの認証情報をアプリケーションに提供します。

アプリケーションに Java コードで認証情報を提供するには

1. AWSCredentialsProvider を実装するクラスを使用します。2. JDBC プロパティの aws_credentials_provider_class をクラス名と同じに設定し、それをクラス

パスに含めます。

448

Page 458: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJDBC ドライバーバージョン 1.1.0 用手順

3. コンストラクターパラメータを含めるには、JDBC プロパティのaws_credentials_provider_arguments を、設定オプションに関する次のセクションで指定しているとおりに設定します。

BI ツール (SQL Workbench など) に認証情報を提供する別の方法としては、JDBC で JDBC プロパティのAWS アクセスキーと AWS シークレットキーとしてそれぞれユーザーとパスワードに使用している認証情報を提供します。

JDBC ドライバーを介して接続するユーザーが、ユーザープロファイルにカスタムアクセスポリシーがアタッチされている場合は、Amazon Athena API リファレンス に示すアクションに加えて、ポリシーアクションへのアクセス許可も必要です。

バージョン 1.1.0 の JDBC ドライバーのポリシーJDBC ユーザーに対して、ポリシー専用のアクションセットの実行を許可する必要があります。以下のアクションを許可しないと、ユーザーはデータベースとテーブルを表示できません。

• athena:GetCatalogs

• athena:GetExecutionEngine

• athena:GetExecutionEngines

• athena:GetNamespace

• athena:GetNamespaces

• athena:GetTable

• athena:GetTables

JDBC ドライバーバージョン 1.1.0: JDBC ドライバーオプションの設定以下のオプションは、バージョン 1.1.0 の JDBC ドライバーで設定できます。次のバージョンのドライバーでは、標準の JDBC URL 構文を使用してパラメータを渡すこともできます (例 :jdbc:awsathena://athena.us-west-1.amazonaws.com:443?max_error_retries=20&connection_timeout=20000)。

JDBC ドライバーバージョン 1.0.1 のオプション

プロパティ名 説明 デフォルト値

必須

s3_staging_dir クエリの出力を書き込む先の S3 の場所 (例: s3://query-results-bucket/folder/)。Athena コンソール (https://console.aws.amazon.com/athena/)の [設定] で設定します。次に、JDBC ドライバーは、結果を読み取ってデータの行をユーザーに返すように Athena に要求します。

該当なし はい

query_results_encryption_options3_staging_dir で指定したディレクトリに使用する暗号化方法。指定しないと、場所は暗号化されません。有効な値は、SSE_S3、SSE_KMS、CSE_KMS です。

該当なし いいえ

query_results_aws_kms_keyquery_results_encryption_option でSSE-KMS または CSE-KMS を指定した場合に使用する AWS マスターキー (CMK) のキー ID。

該当なし いいえ

449

Page 459: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJDBC ドライバーバージョン 1.1.0 用手順

プロパティ名 説明 デフォルト値

必須

("123abcde-4e56-56f7-g890-1234h5678i9j"など)。

aws_credentials_provider_class認証情報プロバイダークラス名。AWSCredentialsProvider インターフェイスを実装します。

該当なし いいえ

aws_credentials_provider_arguments認証情報プロバイダーコンストラクターの引数。カンマ区切り値です。

該当なし いいえ

max_error_retries JDBC クライアントから Athena に対するリクエストの最大再試行回数。

10 いいえ

connection_timeout Athena への正常な接続の試行を開始してから試行を終了するまでの最大時間 (ミリ秒)。

10,000 いいえ

socket_timeout Athena にデータを送信するためにソケットを待機する最大時間 (ミリ秒)。

10,000 いいえ

retry_base_delay Athena に接続する再試行間の最小遅延間隔 (ミリ秒)。

100 いいえ

retry_max_backoff_timeAthena に接続する再試行間の最大遅延間隔 (ミリ秒)。

1,000 いいえ

log_path Athena JDBC ドライバーのログのローカルパス。ログのパスを指定しないと、ログファイルは作成されません。

該当なし いいえ

log_level Athena JDBC ドライバーのログのログレベル。有効な値: INFO, DEBUG, WARN, ERROR, ALL, OFF,FATAL, TRACE.

該当なし いいえ

例: JDK で 1.1.0 バージョンの JDBC ドライバーを使用する次のコード例では、Java アプリケーションで 1.1.0 のバージョンの JDBC ドライバーを使用する方法を示しています。これらの例は、AWS JAVA SDK (特に aws-java-sdk-core モジュール) がクラスパスに含まれていることを前提としています。このクラスパスには、例で参照される認証パッケージ(com.amazonaws.auth.*) が含まれています。

Example 例: バージョン 1.0.1 ドライバーの作成

Properties info = new Properties(); info.put("user", "AWSAccessKey"); info.put("password", "AWSSecretAccessKey"); info.put("s3_staging_dir", "s3://S3 Bucket Location/"); info.put("aws_credentials_provider_class","com.amazonaws.auth.DefaultAWSCredentialsProviderChain"); Class.forName("com.amazonaws.athena.jdbc.AthenaDriver"); Connection connection = DriverManager.getConnection("jdbc:awsathena://athena.us-east-1.amazonaws.com:443/", info);

450

Page 460: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドJDBC ドライバーバージョン 1.1.0 用手順

次の例は、以前のバージョンの JDBC ドライバーを使用して AWSCredentialsProvider インターフェイスを実装する認証情報プロバイダーを使用するさまざまな方法を示しています。

Example 例: JDBC ドライバー 1.0.1 の認証情報プロバイダーの使用

Properties myProps = new Properties(); myProps.put("aws_credentials_provider_class","com.amazonaws.auth.PropertiesFileCredentialsProvider"); myProps.put("aws_credentials_provider_arguments","/Users/myUser/.athenaCredentials");

この場合、ファイル /Users/myUser/.athenaCredentials には以下のものが含まれます。

accessKey = ACCESSKEYsecretKey = SECRETKEY

右側の割り当て部分をアカウントの AWS アクセスキーおよびシークレットキーに置き換えます。

Example 例: 複数の引数で認証情報プロバイダーを使用する

この例は、セッショントークンに加えてアクセスキーとシークレットキーを使用する認証情報プロバイダー CustomSessionsCredentialsProvider を示します。CustomSessionsCredentialsProvider は例としてのみ表示され、ドライバーには含まれていません。このクラスの署名は以下のようになります。

public CustomSessionsCredentialsProvider(String accessId, String secretKey, String token) { //... }

プロパティを次のように設定します。

Properties myProps = new Properties(); myProps.put("aws_credentials_provider_class","com.amazonaws.athena.jdbc.CustomSessionsCredentialsProvider"); String providerArgs = "My_Access_Key," + "My_Secret_Key," + "My_Token"; myProps.put("aws_credentials_provider_arguments",providerArgs);

Note

InstanceProfileCredentialsProvider を使用する場合、認証情報プロバイダー引数を指定する必要はありません。これらの引数は、アプリケーションを実行するインスタンスの Amazon EC2 インスタンスプロファイルを通じて提供されます。ただし、aws_credentials_provider_class プロパティはこのクラス名に設定します。

バージョン 1.1.0 以前の JDBC ドライバーのポリシーこれらの廃止されたアクションは、バージョン 1.1.0 以前の JDBC ドライバーのポリシーでのみ使用します。JDBC ドライバーをアップグレードする場合は、廃止されたアクションを許可または拒否するポリシーステートメントを、以下に示す適切な API アクションに置き換えてください。置き換えないと、エラーが発生します。

廃止されたポリシー固有のアクション 対応する Athena API アクション

athena:RunQuery athena:StartQueryExecution

451

Page 461: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドサービスクォータ

廃止されたポリシー固有のアクション 対応する Athena API アクション

athena:CancelQueryExecution athena:StopQueryExecution

athena:GetQueryExecutions athena:ListQueryExecutions

サービスクォータNote

サービスクォータコンソールには、Amazon Athena のクォータに関する情報が表示されます。デフォルトのクォータの表示に加えて、サービスクォータコンソールを使用して、調整可能なクォータについてクォータの引き上げをリクエストできます。

Queriesアカウントには、Amazon Athena の AWS リージョンの次のクエリ関連のクォータがデフォルトで設定されています。

• DDL クエリのクォータ– 20 個の DDL アクティブクエリ。DDL クエリには、CREATE TABLE クエリとCREATE TABLE ADD PARTITION クエリが含まれます。

• DDL クエリのタイムアウト – DDL クエリのタイムアウトは 600 分です。• DML クエリのクォータ– 20 個の DML アクティブクエリ。DML クエリには、SELECT と CREATETABLE AS (CTAS) クエリが含まれます。

• DML クエリのタイムアウト – DML クエリのタイムアウトは 30 分です。

これらはソフトクォータです。Athena サービスクォータ コンソールを使用してクォータの引き上げをリクエストできます。

Athena は、全体的なサービス負荷と受信リクエストの数に基づいてリソースを割り当てて、クエリを処理します。クエリは実行前に一時的にキューに入れられることがあります。非同期プロセスは、キューからクエリを取得し、リソースが利用可能になるとすぐに、アカウント設定で許可される限り、物理リソースでクエリを実行します。

DML または DDL クエリのクォータには、実行中のクエリとキューに入っているクエリの両方が含まれます。たとえば、デフォルトのクォータを使用しており、実行中およびキューに入っているクエリの合計が20 を超えた場合、クエリ 21 を超えると「クエリが多すぎます」というエラーが発生します。

クエリ文字列の長さ許容される最大クエリ文字列の長さは、262144 バイトです。文字列は UTF-8 でエンコードされます。これは調整可能なクォータではありません。Athena での列、テーブル、およびデーターベースの命名については、これらのヒント (p. 85)を使用してください。

Note

クエリ文字列の長さを長くする必要がある場合は、[email protected] にユースケースの詳細をフィードバックするか、AWS サポートにお問い合わせください。

WorkgroupsAthena ワークグループを使用する場合は、次の点に注意してください。

452

Page 462: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS Glue

• Athena サービスクォータは、アカウント内のすべてのワークグループで共有されます。• アカウントでリージョンごとに作成できるワークグループの最大数は 1000 です。• ワークグループあたりのタグの最大数は 50 です。詳細については、タグの制限 (p. 360) を参照してく

ださい。

AWS Glue• Athena で AWS Glue データカタログ を使用している場合、テーブル、データベース、およびパーティ

ションのサービスクォータについては、「AWS Glue のエンドポイントとクォータ」を参照してください。

• AWS Glue データカタログ を使用しない場合、テーブルあたりのパーティション数は 20,000 です。クォータの引き上げをリクエストできます。

Note

まだ AWS Glue データカタログ に移行していない場合、移行手順については、「AWS Glue データカタログへのステップバイステップのアップグレード (p. 30)」を参照してください。

Amazon S3 バケットAmazon S3 バケットを操作するときは、次の点に注意してください。

• Amazon S3 には、アカウントあたり 100 バケットのデフォルトのサービスクォータがあります。• Athena では結果のログを記録するために別のバケットが必要です。• AWS アカウントごとに最大 1,000 まで Amazon S3 バケットのクォータ引き上げをリクエストできま

す。

アカウントあたりの API コールのクォータAthenaAPIsには、アカウントごと (クエリごとではありません) の API の呼び出し数に次のデフォルトのクォータがあります。

API 名 1 秒あたりのデフォルトの呼び出し数

バーストキャパシティー

BatchGetNamedQuery, ListNamedQueries,ListQueryExecutions

5 最大 10

CreateNamedQuery, DeleteNamedQuery,GetNamedQuery

5 最大 20

BatchGetQueryExecution 20 最大 40

StartQueryExecution, StopQueryExecution 20 最大 80

GetQueryExecution, GetQueryResults 100 最大 200

たとえば、StartQueryExecution の場合は、1 秒あたり最大 20 回呼び出すことができます。さらに、API が 4 秒間呼び出しを行わなかった場合、アカウントのバーストキャパシティーが最大 80 回まで累積されます。この場合、アプリケーションはバーストモードでこの API を最大 80 回呼び出すことができます。

453

Page 463: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドアカウントあたりの API コールのクォータ

これらのいずれかを使用し、1 秒あたりの呼び出し数のデフォルトクォータ、またはアカウントのバーストキャパシティーを超えた場合、APIsAPI は次のようなエラーを発行します。Athena"ClientError: An erroroccurred (ThrottlingException) when calling the <API_name> operation: Rate exceeded." 1 秒あたりの呼び出し数、またはこのアカウントの API のバーストキャパシティーを減らしてください。クォータの引き上げをリクエストするには、AWS サポートにお問い合わせください。AWS サポートセンターのページを開き、必要に応じてサインインし、[Create case] を選択します。[Service Limit increase] を選択します。フォームに入力して送信します。

Note

このクォータは、Athena サービスクォータコンソールでは変更できません。

454

Page 464: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

リリースノートAmazon Athena の特徴、改良点、およびバグ修正についてリリース日順に説明します。

リリース日• 2020 年 10 月 22 日 (p. 456)• 2020 年 7 月 29 日 (p. 456)• 2020年7月9日 (p. 456)• 2020 年 6 月 1 日 (p. 457)• 2020 年 5 月 21 日 (p. 457)• 2020 年 4 月 1 日 (p. 457)• 2020 年 3 月 11 日 (p. 457)• 2020 年 3 月 6 日 (p. 458)• 2019 年 11 月 26 日 (p. 458)• 2019 年 11 月 12 日 (p. 461)• 2019 年 11 月 8 日 (p. 461)• 2019 年 10 月 8 日 (p. 461)• 2019 年 9 月 19 日 (p. 461)• 2019 年 9 月 12 日 (p. 462)• 2019 年 8 月 16 日 (p. 462)• 2013 年 8 月 9 日 (p. 462)• 2019 年 6 月 26 日 (p. 463)• 2019 年 5 月 24 日 (p. 463)• 2019 年 3 月 5 日 (p. 463)• 2019 年 2 月 22 日 (p. 464)• 2019 年 2 月 18 日 (p. 464)• 2018 年 11 月 20 日 (p. 465)• 2018 年 10 月 15 日 (p. 466)• 2018 年 10 月 10 日 (p. 466)• 2018 年 9 月 6 日 (p. 467)• 2018 年 8 月 23 日 (p. 467)• 2018 年 8 月 16 日 (p. 468)• 2018 年 8 月 7 日 (p. 468)• 2018 年 5 月 6 日 (p. 468)• 2018 年 5 月 17 日 (p. 469)• 2018 年 4 月 19 日 (p. 470)• 2018 年 4 月 6 日 (p. 470)• 2018 年 3 月 15 日 (p. 470)• 2018 年 2 月 2 日 (p. 470)• 2018 年 1 月 19 日 (p. 470)• 2017 年 11 月 13 日 (p. 471)• 2017 年 11 月 1 日 (p. 471)• 2017 年 10 月 19 日 (p. 471)• 2017 年 10 月 3 日 (p. 472)

455

Page 465: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2020 年 10 月 22 日

• 2017 年 9 月 25 日 (p. 472)• 2017 年 8 月 14 日 (p. 472)• 2017 年 8 月 4 日 (p. 472)• 2017 年 6 月 22 日 (p. 472)• 2017 年 6 月 8 日 (p. 472)• 2017 年 5 月 19 日 (p. 473)• 2017 年 4 月 4 日 (p. 474)• 2017 年 3 月 24 日 (p. 475)• 2017 年 2 月 20 日 (p. 475)

2020 年 10 月 22 日公開日: 2020-10-22

Athenaを使用して を呼び出すことができるようになりましたAWS Step Functions。 AWS Step Functionsは を使用して特定のAWSサービスを直接制御Amazon ステートメント言語します。で を使用して、クエリの実行の開始と停止、クエリ結果の取得、アドホックまたはスケジュールされたデータクエリの実行、のデータレイクからの結果の取得Step Functionsを行うことができます。AthenaAmazon S3

詳細については、次のAthenaStep Functionsガイドの「 を使用した呼び出し」を参照してくださいAWSStep Functions 開発者ガイド。

2020 年 7 月 29 日公開日: 2020-07-29

JDBC ドライバーのバージョン 2.0.13 がリリースされました。このリリースでは、 Athena に登録されている複数の (p. 56)データカタログ、認証のための Okta サービス、VPC エンドポイントへの接続の使用がサポートされています。

新しいバージョンのドライバーをダウンロードして使用するには、「」を参照してくださいJDBC ドライバーを介した Athena の使用 (p. 72)。

2020年7月9日公開日: 2020-07-09

Amazon Athenaは圧縮された Hudi データセットのクエリのサポートを追加し、 AWS CloudFormation に登録するデータカタログを作成、更新、または削除するためのAWS::Athena::DataCatalogAthenaリソースを追加します。

Apache Hudi データセットのクエリApache Hudi は、増分データ処理を簡素化するオープンソースのデータ管理フレームワークです。Amazon Athena は、Amazon S3 ベースのデータレイク内の Apache Hudi データセットの読み取り最適化ビューのクエリをサポートするようになりました。

詳細については、Athena による Apache Hudi データセットに対するクエリ (p. 181) を参照してください。

456

Page 466: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドAWS CloudFormationデータカタログリソース

AWS CloudFormationデータカタログリソースのAmazon Athenaフェデレーテッドクエリ機能を使用してデータソースをクエリするには、最初にデータカタログを に登録する必要があります。AthenaAWS CloudFormationAWS::Athena::DataCatalogリソースを使用して、 に登録するデータカタログを作成、更新、または削除できるようになりましたAthena。

詳細については、 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-datacatalog.htmlユーザーガイドの「AWS CloudFormationAWS::Athena::DataCatalog」を参照してください。

2020 年 6 月 1 日公開日: 2020 年 6 月 1 日

Amazon Athena で Apache Hive メタストアをメタカタログとして使用するAthena での AWS Glue データカタログ に加えて、Athena を 1 つ以上の Apache Hive メタストアに接続できるようになりました。

セルフホストの Hive メタストアに接続するには、Athena Hive メタストアコネクタが必要です。Athenaには、ユーザーが使用できるリファレンス (p. 54)実装コネクタが用意されています。コネクタは、ユーザーのアカウントで AWS Lambda 関数として動作します。

詳細については、Athena Data Connector for External Hive Metastore (Preview) を使用する (p. 34) を参照してください。

2020 年 5 月 21 日公開日: 2020-05-21

Amazon Athenaにパーティション射影のサポートが追加されました。パーティション射影を使用して、高度にパーティション化されたテーブルのクエリ処理を高速化し、パーティション管理を自動化します。詳細については、Amazon Athena を使用したパーティション射影 (p. 98) を参照してください。

2020 年 4 月 1 日公開日: 2020 年 4 月 1 日

米国東部 (バージニア北部) リージョン に加えて、Amazon Athena フェデレーテッドクエリ (p. 55)、ユーザー定義関数 (UDF) (p. 193)、機械学習推論 (p. 191)、外部 Hive メタストア (p. 34)機能は、アジアパシフィック (ムンバイ)、欧州 (アイルランド)、米国西部 (オレゴン) リージョンでプレビューの使用ができるようになりました。

2020 年 3 月 11 日公開日: 2020 年 3 月 11 日

457

Page 467: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2020 年 3 月 6 日

Amazon Athena で、クエリ状態移行に対して Amazon CloudWatch Events が発行されるようになりました。クエリが状態間で移行すると (実行中から成功またはキャンセルなどの最終状態に移行するなど)、Athena はクエリ状態変更イベントを CloudWatch イベント に発行します。イベントには、クエリ状態移行に関する情報が含まれます。詳細については、CloudWatch イベントを使用した Athena クエリのモニタリング (p. 353) を参照してください。

2020 年 3 月 6 日公開日: 2020 年 3 月 6 日

AWS CloudFormation AWS::Athena::WorkGroup リソースを使用して Amazon Athena ワークグループを作成および更新できるようになりました。詳細については、 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-workgroup.htmlユーザーガイドの「AWSCloudFormationAWS::Athena::WorkGroup」を参照してください。

2019 年 11 月 26 日公開日: 2019 年 12 月 17 日

Amazon Athena は、リレーショナル、非リレーショナル、オブジェクト、カスタムの各データソース間における SQL クエリの実行、SQL クエリにおける機械学習モデルの呼び出し、ユーザー定義関数 (UDF)(プレビュー)、Amazon Athena におけるメタデータカタログとしての Apache Hive Metastore の使用 (プレビュー)、および 4 つの追加のクエリ関連メトリクスに対するサポートを追加します。

フェデレーティッド SQL クエリフェデレーティッド SQL クエリを使用して、リレーショナル、非リレーショナル、オブジェクト、カスタムの各データソース間で SQL クエリを実行します。

Athenaの横串検索を使用して、リレーショナル、非リレーショナル、オブジェクト、カスタムの各データソースに保存されているデータをスキャンできるようになりました。横串検索を使用すると、ユーザーは単一の SQL クエリを送信することで、オンプレミスで実行されているか、クラウド内でホストされている複数のソースのデータをスキャンできます。

複数のアプリケーションに分散されたデータに対する分析の実行は、以下の理由により、複雑で時間がかかる場合があります。

• 分析に必要なデータは、通常、リレーショナル、キーバリュー、ドキュメント、インメモリ、検索、グラフ、オブジェクト、時系列、および台帳の各データストアに分散されています。

• これらのソース間のデータを分析するために、分析では複雑なパイプラインを構築してデータを抽出、変換し、データウェアハウスにロードすることで、データにクエリを実行できるようにします。

• さまざまなソースのデータにアクセスするには、新しいプログラミング言語とデータアクセスコンストラクトを学習する必要があります。

Athena のフェデレーティッド SQL クエリでは、データの存在場所を問わず、インプレースでデータにクエリを実行できるため、このような複雑性が排除されます。使い慣れた SQL コンストラクトを使用して複数のデータソース間のデータを JOIN してすばやく分析し、結果を Amazon S3 に保存して後で使用できます。

データソースコネクタAthenaは、 で実行されるAthenaデータソースコネクタを使用してフェデレーティッドクエリを処理しますAWS Lambda。このようなオープンソースのデータソースコネクタを使用して、 Athena など

458

Page 468: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドSQL クエリでの機械学習モデルの呼び出し

の Amazon 、Apache 、Amazon ドキュメント DB、DynamoDBAmazon Redshift、 、HBaseメトリクス、JDBC 準拠のリレーショナルデータベース間、および Apache 2.0 ライセンスで のフェデレーティッド SQL クエリを実行します。Amazon CloudWatchAmazon CloudWatchhttps://console.aws.amazon.com/lambda/home?region=us-east-1#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:292517598671:applications/AthenaJdbcConnectorMySQLPostgreSQL

カスタムデータソースコネクタ

Athenaクエリフェデレーション SDK を使用して、開発者は任意のデータソースへのコネクタを構築して、 がそのデータソースに対して SQL クエリを実行できます。AthenaAthenaQuery FederationConnector は、AWS提供されるコネクタよりも幅広いフェデレーションクエリの利点を提供します。コネクタは AWS Lambda で実行されるため、インフラストラクチャを管理したり、ピーク需要に合わせてスケーリングを計画したりする必要はありません。

プレビューの可用性Athena の横串検索は、米国東部 (バージニア北部) リージョン においてプレビューで使用できます。

次のステップ• プレビューを開始するには、「Athena プレビュー版の機能に関するよくある質問」の指示に従ってくだ

さい。• 横串検索機能の詳細については、「Amazon Athena 横串検索の使用 (プレビュー)」を参照してくださ

い。• 既存のコネクタの使用を開始するには、「コネクタのデプロイとデータソースへの接続」を参照してく

ださい。• Athenaクエリフェデレーション SDK を使用して独自のデータソースコネクタを構築する方法について

は、 のAthenaコネクタ例を参照してくださいGitHub。

SQL クエリでの機械学習モデルの呼び出し推論用の機械学習モデルを Athena クエリから直接呼び出せるようになりました。SQL クエリで機械学習モデルを使用できる場合、異常検知、カスタマーコーホート分析、売上予測などの複雑なタスクが、SQLクエリで機能を呼び出すのと同じくらいシンプルになります。

ML モデルAmazon が提供する多数の組み込み機械学習アルゴリズムを使用して、独自のモデルをトレーニングしたり、SageMakerAWS Marketplace からモデルパッケージを見つけてサブスクライブして、Amazon ホスティングサービスにデプロイしたりできます。SageMaker追加の設定は不要です。これらの ML モデルは、 Athena SQL クエリで コンソール、 Athena APIs 、および Athena のプレビュー JDBC ドライバーを通じて呼び出すことができます。

プレビューの可用性Athenaの ML 機能は、米国東部 (バージニア北部) リージョン においてプレビューで今すぐ利用できます。

次のステップ• プレビューを開始するには、「Athena プレビュー版の機能に関するよくある質問」の指示に従ってくだ

さい。• 機械学習機能の詳細については、「Amazon Athena での機械学習 (ML) の使用 (プレビュー)」を参照し

てください。

459

Page 469: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドユーザー定義関数 (UDF) (プレビュー)

ユーザー定義関数 (UDF) (プレビュー)カスタム Scalar 関数を記述し、これらを Athena クエリで呼び出せるようになりました。UDFsクエリフェデレーション SDK を使用して、Java Athenaで を記述できます。に送信された SQL クエリで UDFAthena を使用すると、UDF は で呼び出されて実行されますAWS Lambda。はUDFs、SQL クエリのSELECT FILTERと の両方の句で使用できます。同じクエリUDFsで複数の を呼び出すことができます。

プレビューの可用性Athena UDF 機能は、米国東部 (バージニア北部) リージョン においてプレビューモードで使用できます。

次のステップ• プレビューを開始するには、「Athena プレビュー版の機能に関するよくある質問」の指示に従ってくだ

さい。• 詳細については、「ユーザー定義関数を使用したクエリ (プレビュー)」を参照してください。• UDF 実装の例については、 の Athena Amazon UDF Connector を参照してくださいGitHub。• Athena Query Federation SDK を使用して独自の関数を記述する方法については、「Lambda を使用し

た UDF の作成とデプロイ」を参照してください。

Amazon Athena で Apache Hive メタストアをメタカタログとして使用する (プレビュー)Athena での AWS Glue データカタログ に加えて、Athena を 1 つ以上の Apache Hive メタストアに接続できるようになりました。

メタストアコネクタセルフホストの Hive メタストアに接続するには、Athena Hive メタストアコネクタが必要です。Athenaには、ユーザーが使用できるリファレンス実装コネクタが用意されています。コネクタは、ユーザーのアカウントで AWS Lambda 機能として動作します。詳細については、「外部 Hive メタストア用の Athenaデータコネクタの使用 (プレビュー)」を参照してください。

プレビューの可用性Hive メタストア機能は、米国東部 (バージニア北部) リージョン においてプレビューモードで使用できます。

次のステップ• プレビューを開始するには、「Athena プレビュー版の機能に関するよくある質問」の指示に従ってくだ

さい。• この機能の詳細については、「外部 Hive メタストア用の Athena データコネクタの使用 (プレビュー)」

を参照してください。

新しいクエリ関連メトリクスAthena は、Amazon Athena のパフォーマンスの理解に役立つ追加のクエリメトリクスを公開するようになりました。Athena は、クエリ関連メトリクスを Amazon CloudWatch に公開します。このリリースのAthena では、以下の追加のクエリメトリクスを公開します。

460

Page 470: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2019 年 11 月 12 日

• Query Planning Time – クエリを計画するための所要時間です。データソースからテーブルパーティションを取得するのにかかる時間も含みます。

• Query Queuing Time – クエリがキュー内でリソースを待機していた時間です。• サービス処理時間 – クエリエンジンが処理を終了した後、結果を書き込むの所要時間。• Total Execution Time – Athena がクエリを実行するために費やした時間です。

これらの新しいクエリメトリクスを使用するには、カスタムダッシュボードを作成するか、CloudWatchのメトリクスにアラームとトリガーを設定するか、Athena コンソールから事前設定済みのダッシュボードを直接使用します。

次のステップ詳細については、「CloudWatch メトリクスによるAthena クエリのモニタリング」を参照してください。

2019 年 11 月 12 日公開日: 2019 年 12 月 17 日

Amazon Athena が 中東 (バーレーン) リージョン で利用可能になりました。

2019 年 11 月 8 日公開日: 2019 年 12 月 17 日

Amazon Athena が、米国西部 (北カリフォルニア) リージョン と 欧州 (パリ) リージョン で利用可能になりました。

2019 年 10 月 8 日公開日: 2019 年 12 月 17 日

Amazon Athena で、Virtual Private Cloud (VPC) のインターフェイス VPC エンドポイントを介してAthena に直接接続できるようになりました。この機能を使用すると、VPC にインターネットゲートウェイがなくても、クエリを安全に Athena に送信できます。

Athena に接続するためのインターフェイス VPC エンドポイントを作成するには、AWS コンソールまたはAWS Command Line Interface (AWS CLI) を使用します。インターフェイスエンドポイントの作成については、「インターフェイスエンドポイントの作成」を参照してください。

インターフェイス VPC エンドポイントを使用すると、VPC と 間の通信AthenaAPIsはセキュアであり、AWS ネットワーク内に留まります。この機能を使用するための Athena の追加料金は発生しません。インターフェイス VPC エンドポイントの料金が適用されます。

この機能の詳細については、「インターフェイス VPC エンドポイントを使用した Amazon Athena への接続」を参照してください。

2019 年 9 月 19 日公開日: 2019 年 12 月 17 日

461

Page 471: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2019 年 9 月 12 日

Amazon Athena は、INSERT INTO ステートメントを使用して既存のテーブルに新しいデータを挿入するためのサポートを追加します。ソーステーブルで実行される SELECT クエリステートメント、またはクエリステートメントの一部として提供される値のセットに基づいて、ターゲットテーブルに新しい行を挿入できます。データ形式として Avro、JSON、ORC、Parquet、テキストファイルなどがサポートされています。

INSERT INTO ステートメントを使用して ETL プロセスを簡素化することもできます。たとえば、単一のクエリで INSERT INTO を使用することで、JSON 形式のソーステーブルからデータを選択して Parquet形式のターゲットテーブルに書き込むことができます。

INSERT INTO ステートメントは、SELECT フェーズでスキャンされたバイト数に基づいて課金されます。これは Athena での SELECT クエリに対する課金方法と同じです。詳細については、「AmazonAthena の料金」を参照してください。

INSERT INTOサポートされている形式、例など、 SerDes の使用の詳細については、 ユーザーガイドの「INSERT INTO」を参照してください。Athena

2019 年 9 月 12 日公開日: 2019 年 12 月 17 日

Amazon Athena が アジアパシフィック (香港) リージョン で利用可能になりました。

2019 年 8 月 16 日公開日: 2019 年 12 月 17 日

Amazon Athena は、Amazon S3 リクエスタ支払いバケット内のデータのクエリに対するサポートを追加します。

Amazon S3 バケットがリクエスタ支払いとして設定されている場合、リクエスタ (バケット所有者ではなく) は Amazon S3 リクエストとデータ転送の費用を支払います。Athena では、ワークグループ管理者がワークグループ設定を構成して、ワークグループのメンバーが S3 リクエスタ支払いバケットにクエリを実行できるようになりました。

ワークグループのリクエスタ支払い設定を構成する方法については、Amazon Athena ユーザーガイドの「ワークグループの作成」を参照してください。リクエスタ支払いバケットの詳細については、AmazonSimple Storage Service 開発者ガイドの「リクエスタ支払いバケット」を参照してください。

2013 年 8 月 9 日公開日: 2019 年 12 月 17 日

Amazon Athena では、AWS Lake Formation ポリシーを適用して、きめ細かなアクセスコントロールができるようになりました。このポリシーは、Amazon S3 に保存されたデータに対して、AWS Glue データカタログ で定義した新規/既存のデータベース、テーブル、列レベルで適用できます。

この機能は以下の AWS リージョンで使用できます。米国東部 (オハイオ)、 米国東部(バージニア北部) 、 米国西部 (オレゴン) 、 アジアパシフィック (東京) 、および 欧州 (アイルランド) 。この機能の使用に追加料金は発生しません。

この機能の使用方法については、「Athena を使用して AWS Lake Formation に登録されたデータをクエリする (p. 281)」を参照してください。AWS Lake Formation の詳細については、「AWS Lake Formation」を参照してください。

462

Page 472: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2019 年 6 月 26 日

2019 年 6 月 26 日Amazon Athena は 欧州 (ストックホルム) リージョンで利用可能になりました。サポートされるリージョンの一覧については、「AWS のリージョンとエンドポイント」を参照してください。

2019 年 5 月 24 日公開日: 2019 年 05 月 24 日

Amazon Athena が、AWS GovCloud (米国東部)、および AWS GovCloud (US-West) の各リージョンで利用できるようになりました。サポートされるリージョンの一覧については、「AWS のリージョンとエンドポイント」を参照してください。

2019 年 3 月 5 日公開日: 2019 年 03 月 05 日

Amazon Athena は カナダ (中部) リージョンで利用可能になりました。サポートされるリージョンの一覧については、「AWS のリージョンとエンドポイント」を参照してください。Athena ワークグループをサポートする新しいバージョンの ODBC ドライバーをリリースしました。詳細については、「ODBC ドライバーリリースノート」を参照してください。

ODBC ドライバーのバージョン 1.0.5 とそのドキュメントをダウンロードするには、「ODBC でのAmazon Athena との接続 (p. 73)」を参照してください。このバージョンの詳細については、「ODBC ドライバーリリースノート」を参照してください。

ODBC ドライバーでワークグループを使用するには、次の例に示すように、接続文字列に新しい接続プロパティ Workgroup を設定します。

Driver=Simba Athena ODBC Driver;AwsRegion=[Region];S3OutputLocation=[S3Path];AuthenticationType=IAM Credentials;UID=[YourAccessKey];PWD=[YourSecretKey];Workgroup=[WorkgroupName]

詳細については、「ODBC ドライバーのインストールおよび設定ガイドバージョン 1.0.5」で「workgroup」を検索してください。ワークグループでタグを使用しても、ODBC ドライバーの接続文字列は変更されません。タグを使用するには、最新バージョンの ODBC ドライバー (この最新バージョン)にアップグレードしてください。

このドライバーバージョンでは、Athena API ワークグループアクション (p. 346)を使用してワークグループを作成および管理し、Athena API タグアクション (p. 361)を使用してワークグループのタグを追加、一覧表示、または削除できます。開始する前に、ワークグループとタグに対するアクションに対して IAM にリソースレベルの権限があることを確認してください。

詳細については、以下を参照してください。

• クエリを実行するためのワークグループの使用 (p. 331) および ワークグループのポリシーの例 (p. 335).• リソースのタグ付け (p. 359) および タグベースの IAM アクセスコントロールポリシー (p. 365).

JDBC ドライバーまたは AWS SDK を使用している場合は、最新バージョンのドライバーと SDK にアップグレードしてください。どちらも Athena のワークグループとタグのサポートを既に含んでいます。詳細については、JDBC ドライバーを介した Athena の使用 (p. 72) を参照してください。

463

Page 473: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2019 年 2 月 22 日

2019 年 2 月 22 日公開日: 2019 年 02 月 22 日

Amazon Athena のワークグループ用のタグサポートを追加しました。タグは、1 つのキーと 1 つの値で構成されており、どちらもお客様側が定義します。ワークグループにタグを付けるときは、カスタムメタデータを割り当てます。AWS タグ付けのベストプラクティスを使用して、ワークグループにタグを追加してそれらを分類することができます。タグを使用してワークグループへのアクセスを制限し、コストを追跡することができます。たとえば、コストセンターごとにワークグループを作成します。その後、これらのワークグループにタグを追加することで、各コストセンターの Athena 支出を追跡できます。詳細については、 https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.htmlユーザーガイドの「請求用のタグAWS Billing and Cost Managementの使用」を参照してください。

タグは、Athena コンソール、または API オペレーションを使用することで操作できます。詳細については、「ワークグループのタグ付け (p. 359)」を参照してください。

Athena コンソールでは、各ワークグループに 1 つ以上のタグを追加したり、タグで検索したりできます。ワークグループは Athena の IAM 管理のリソースです。IAM では、作成したワークグループのタグを追加、削除、または一覧表示できるユーザーを制限できます。ワークグループに 1 つ以上のタグを追加するためのオプションのタグパラメータを持つ CreateWorkGroup API オペレーションを使用することもできます。タグを追加、削除、または一覧表示するには、 TagResource 、 UntagResource 、および を使用しますListTagsForResource。 詳細については、「API アクションを使用したタグの操作」を参照してください (p. 359)。

ワークグループの作成時にユーザーがタグを追加できるようにするには、各ユーザーに TagResource とCreateWorkGroup API アクションの両方に対する IAM アクセス許可を付与します。詳細な説明と例については、「タグベースの IAM アクセスコントロールポリシー (p. 365)」を参照してください。

ワークグループでタグを使用しても、JDBC ドライバーは変更されません。新しいワークグループを作成して JDBC ドライバーまたは AWS SDK を使用する場合は、最新バージョンのドライバーと SDK に更新してください。詳細については、「JDBC ドライバーを介した Athena の使用 (p. 72)」 を参照してください。

2019 年 2 月 18 日公開日: 2019 年 02 月 18 日

ワークグループでクエリを実行することによってクエリコストを制御する機能が追加されました。詳細については、「ワークグループを使用してクエリのアクセスとコストを制御する (p. 331)」を参照してください。で使用される OpenX JSON が改善され、 SerDe がストレージクラスに移行されたオブジェクトを無視しない問題を修正し、Athenaログのクエリ例を追加しました。AthenaGLACIERNetwork LoadBalancer

以下の変更を加えました。

• ワークグループ用のサポートを追加しました。ワークグループを使用して、ユーザー、チーム、アプリケーション、またはワークロードを分離し、各クエリまたはワークグループ全体で処理できるデータ量に制限を設定します。ワークグループは IAM リソースとして機能するため、リソースレベルのアクセス許可を使用して特定のワークグループへのアクセスを制御できます。Amazon CloudWatch でのクエリ関連のメトリクスの表示、スキャンされたデータ量の制限設定によるクエリコストの管理、しきい値の作成のほか、これらのしきい値に違反したときに Amazon SNS アラームなどのアクションをトリガーすることができます。詳細については、「クエリを実行するためのワークグループの使用 (p. 331)」および「CloudWatch メトリクスとイベントによるコスト管理とクエリのモニタリング (p. 348)」を参照してください。

ワークグループは、IAM リソースです。のワークグループ関連のアクション、リソース、および条件の完全なリストについては、 の「Amazon Athena IAM のアクション、リソース、および条件キー」を

464

Page 474: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2018 年 11 月 20 日

参照してくださいIAM ユーザーガイド。新しいワークグループを作成する前に、ワークグループIAMのポリシーと (p. 334) AmazonAthenaFullAccess 管理ポリシーを使用していることを確認してください。 (p. 245)

コンソール、ワークグループ API オペレーション (p. 346)、または JDBC ドライバーを使用して、ワークグループの使用を開始できます。大まかな手順については、「ワークグループの設定 (p. 333)」を参照してください。ワークグループサポート付きの JDBC ドライバーをダウンロードするには、「JDBCドライバーを介した Athena の使用 (p. 72)」を参照してください。

JDBC ドライバーでワークグループを使用する場合は、次の例のように Workgroup 設定パラメータを使用して接続文字列にワークグループ名を設定する必要があります。

jdbc:awsathena://AwsRegion=<AWSREGION>;UID=<ACCESSKEY>;PWD=<SECRETKEY>;S3OutputLocation=s3://<athena-output>-<AWSREGION>/;Workgroup=<WORKGROUPNAME>;

SQL ステートメントの実行方法やドライバーへの JDBC API 呼び出しの方法に変更はありません。ドライバーはワークグループ名を Athena に渡します。

ワークグループで導入された相違点については、「AthenaワークグループAPIs (p. 346)」および「ワークグループのトラブルシューティング」を参照してください (p. 347)。

• OpenXSerDeで使用される JSON が改善されましたAthena。改善点は次のとおりです。• ConvertDotsInJsonKeysToUnderscores プロパティをサポートします。に設定すると、 はキー

名のドットTRUEをアンダースコアに置き換えることができます。SerDeたとえば、JSON データセットに "a.b" という名前のキーが含まれている場合は、このプロパティを使用して列名を Athena の"a_b" に定義できます。デフォルトは ですFALSE。 デフォルトでは、 Athenaは列名にドットを許可しません。

• case.insensitive プロパティをサポートします。デフォルトでは、Athena は JSON データセットのすべてのキーで小文字を使用する必要があります。WITH SERDE PROPERTIES("case.insensitive"= FALSE;) を使用すると、データ内で大文字と小文字を区別してキー名を使用できます。デフォルトは ですTRUE。 TRUEに設定すると、 SerDeはすべての大文字の列を小文字に変換します。

詳細については、OpenX JSON SerDe (p. 388) を参照してください。• Amazon S3 ライフサイクルポリシーによって Glacier にアーカイブされた Amazon S3 オブジェクトを

処理したときに Athena が "access denied" エラーメッセージを返す問題を修正しました。この問題を解決した結果、Athena は GLACIER ストレージクラスに移行したオブジェクトを無視します。Athenaは GLACIER ストレージクラスからのデータのクエリをサポートしていません。

詳細については、 の「the section called “Athena のテーブルと Amazon S3 のデータに関する要件” (p. 79)GLACIER ストレージクラスへの移行 (オブジェクトのアーカイブ)」を参照してくださいAmazon Simple Storage Service 開発者ガイド。

• Transport Layer Security (TLS) リクエストに関する情報を受け取る Network Load Balancer アクセスログのクエリ例を追加しました。詳細については、the section called “Network Load Balancer ログのクエリ” (p. 217) を参照してください。

2018 年 11 月 20 日公開日: 2018 年 11 月 20 日

AD FS および SAML 2.0 (Security Assertion Markup Language 2.0) を使用した Athena API へのフェデレーションアクセスのサポートを備えた、新しいバージョンの JDBC および ODBC ドライバーをリリースしました。詳細については、JDBC ドライバーリリースノートおよび ODBC ドライバーリリースノートを参照してください。

465

Page 475: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2018 年 10 月 15 日

このリリースでは、フェデレーションアクセス Athena は Active Directory Federation Service(AD FS 3.0)に対してサポートされます。アクセスは、SAML 2.0 をサポートするバージョンの JDBC や ODBC ドライバーを通じて確立されます。Athena API へのフェデレーションアクセスの詳しい設定方法については、「the section called “Athena API へのフェデレーションアクセスの有効化” (p. 274)」を参照してください。

JDBC ドライバーのバージョン 2.0.6 とそのドキュメントをダウンロードするには、「JDBC ドライバーを介した Athena の使用 (p. 72)」を参照してください。このバージョンの詳細については、「JDBC ドライバーリリースノート」を参照してください。

ODBC ドライバーのバージョン 1.0.4 とそのドキュメントをダウンロードするには、「ODBC でのAmazon Athena との接続 (p. 73)」を参照してください。このバージョンの詳細については、「ODBC ドライバーリリースノート」を参照してください。

での SAML 2.0 AWS のサポートの詳細については、の「SAML 2.0 フェデレーションについて」を参照してくださいIAM ユーザーガイド。

2018 年 10 月 15 日公開日: 2018 年 10 月 15 日

AWS Glue データカタログ にアップグレードしている場合は、以下のサポートを提供する 2 つの新機能があります。

• Data Catalog メタデータの暗号化。Data Catalog でメタデータを暗号化することを選択した場合、Athena に特定のポリシーを追加する必要があります。詳細については、「AWS Glue データカタログ の暗号化されたメタデータへのアクセス (p. 255)」を参照してください。

• AWS Glue データカタログ のリソースへのアクセスに対するきめ細かなアクセス許可。Athena で使用される Data Catalog の特定のデータベースとテーブルへのアクセスを制限または許可する、アイデンティティベース (IAM) ポリシーを定義できるようになりました。詳細については、「AWS Glue データカタログ のデータベースとテーブルへのきめ細かなアクセス (p. 249)」を参照してください。

Note

データが Amazon S3 バケットに存在すると、それに対するアクセスは Amazon S3 アクセス許可 (p. 249)によって管理されます。データベースやテーブルのデータにアクセスするには、データを保存する Amazon S3 バケットへのアクセスコントロールポリシーを引き続き使用します。

2018 年 10 月 10 日公開日: 2018 年 10 月 10 日

Athena では、SELECT クエリステートメントの結果からテーブルを作成する CREATE TABLE ASSELECT がサポートされています。詳細については、「クエリ結果からのテーブルの作成 (CTAS)」を参照してください。

CTAS クエリを作成する前に、Athena ドキュメントでその動作について学習しておくことが重要です。ドキュメントには、クエリ結果の Amazon S3 での保存場所、CTAS クエリ結果の保存でサポートされている形式の一覧、作成できるパーティションの数、およびサポートされている圧縮形式に関する情報が含まれています。詳細については、「CTAS クエリに関する考慮事項と制約事項 (p. 126)」を参照してください。

以下の目的で CTAS クエリを使用します。

• 1 つのステップでクエリ結果からテーブルを作成します (p. 126)。

466

Page 476: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2018 年 9 月 6 日

• サンプルを使用して (p. 128)、Athena コンソールで CTAS クエリを作成します (p. 132)。構文については「CREATE TABLE AS (p. 423)」を参照してください。

• クエリ結果を他のストレージ形式 (例: PARQUET、ORC、AVRO、JSON、TEXTFILE) に変換します。詳細については、「CTAS クエリに関する考慮事項と制約事項 (p. 126)」および「列指向ストレージ形式 (p. 89)」を参照してください。

2018 年 9 月 6 日公開日: 2018 年 09 月 06 日

ODBC ドライバーの新しいバージョン (バージョン 1.0.3) がリリースされました。新しいバージョンのODBC ドライバーは、ページングではなく、デフォルトで結果をストリーミングします。これによりビジネスインテリジェンスツールで大規模なデータセットを迅速に取得できます。このバージョンには改善点、バグ修正、および更新された「プロキシサーバーで SSL を使用する」ドキュメントが含まれています。詳細については、ドライバーの「リリースノート」を参照してください。

ODBC ドライバーのバージョン 1.0.3 とそのドキュメントのダウンロードについては、「ODBC でのAmazon Athena との接続 (p. 73)」を参照してください。

結果のストリーミング機能は、新しいバージョンの ODBC ドライバーでのみ使用できます。JDBC ドライバーでも使用できます。結果のストリーミングの詳細については、「ODBC ドライバーのインストールおよび設定ガイド」を参照し、 UseResultsetStreaming を検索してください。

ODBC ドライバーのバージョン 1.0.3 は、以前のバージョンのドライバーのドロップインリプレースです。最新のドライバーに移行することをお勧めします。

Important

ODBC ドライバーバージョン 1.0.3 を使用するには、次の要件に従ってください。

• アウトバウンドトラフィックに対してポート 444 を開いたままにする。• Athena のポリシーのリストに athena:GetQueryResultsStream ポリシーアクションを追

加する。このポリシーアクションは、API で直接公開されていません。結果のストリーミングサポートの一部として ODBC ドライバーおよび JDBC ドライバーとともに使用するだけです。ポリシーの例については、「AWSQuicksightAthenaAccess管理ポリシー」を参照してください (p. 247)。

2018 年 8 月 23 日公開日: 2018 年 08 月 23 日

次に示すとおり DDL に関連する機能のサポートが追加され、バグがいくつか修正されました。

• Parquet のデータの BINARY と DATE データ型、Avro のデータの DATE と TIMESTAMP データ型のサポートが追加されました。

• DDL クエリに INTと DOUBLE のサポートを追加しました。INTEGERは のエイリアスで、 INT DOUBLEPRECISIONのエイリアスですDOUBLE。

• DROP TABLE と DROP DATABASE のクエリのパフォーマンスが改善されました。• データバケットが空であるとき、Amazon S3 に _$folder$ オブジェクトが作成されなくなりました。• パーティション値が指定されなかった場合、ALTER TABLE ADD PARTITION がエラーをスローする問

題を修正しました。• ステートメントに修飾名が指定された後に、パーティションをチェックするときに、DROP TABLE が

データベース名を無視する問題を修正しました。

467

Page 477: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2018 年 8 月 16 日

Athena でサポートされているデータ型の詳細については、「データ型 (p. 402)」を参照してください。

Athena でサポートされているデータ型マッピング、JDBC ドライバー、Java データ型については、『JDBC ドライバーのインストールおよび設定ガイド』の「データ型」セクションを参照してください。

2018 年 8 月 16 日公開日: 2018 年 08 月 16 日

JDBC ドライバーのバージョン 2.0.5 がリリースされました。新しいバージョンの JDBC ドライバーは、ページングではなく、デフォルトで結果をストリーミングします。これによりビジネスインテリジェンスツールで大規模なデータセットを迅速に取得できます。JDBC ドライバーの以前のバージョンと比較して、次のパフォーマンスが向上しています。

• 10,000 行未満を取得するときに、パフォーマンスが約 2 倍向上します。• 10,000 行以上を取得するときに、パフォーマンスが 5 ~ 6 倍向上します。

結果のストリーミング機能は、JDBC ドライバーでのみ使用できます。ODBC ドライバーでは使用できません。Athena API で使用することはできません。結果のストリーミングの詳細については、JDBC ドライバーのインストールおよび設定ガイドの「」を参照し、 UseResultsetStreaming を検索してください。

JDBC ドライバーのバージョン 2.0.5 とそのドキュメントのダウンロードについては、「JDBC ドライバーを介した Athena の使用 (p. 72)」を参照してください。

JDBC ドライバーのバージョン 2.0.5 は、以前のバージョンのドライバー (2.0.2) のドロップインリプレースです。JDBC ドライバーバージョン 2.0.5 を使用できるようにするには、athena:GetQueryResultsStream ポリシーアクションを Athena のポリシーのリストに追加します。このポリシーアクションは、API で直接公開されていません。結果のストリーミングサポートの一部として JDBC ドライバーとともに使用するだけです。ポリシーの例については、「AWSQuicksightAthenaAccess管理ポリシー」を参照してください (p. 247)。バージョン 2.0.2 からバージョン 2.0.5 への移行の詳細については、「JDBC ドライバー移行ガイド」を参照してください。

ドライバーをバージョン 1.x から 2.x に移行する場合は、既存の設定を新しい設定に移行する必要があります。最新バージョンのドライバーに移行することを強くお勧めします。詳細については、「以前のバージョンの JDBC ドライバーの使用 (p. 447)」および JDBC ドライバー移行ガイドを参照してください。

2018 年 8 月 7 日公開日: 2018 年 08 月 07 日

Amazon Virtual Private Cloud フローログを直接 Amazon S3 に GZIP 形式で保存できるようになりました。Athena でログのクエリを実行できます。詳細については、「Amazon VPC フローログのクエリ (p. 219)」および「Amazon VPC フローログが S3 で使用可能に」を参照してください。

2018 年 5 月 6 日公開日: 2018 年 06 月 05 日

トピック• ビューのサポート (p. 469)• エラーメッセージの改善と更新 (p. 469)• バグ修正 (p. 469)

468

Page 478: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドビューのサポート

ビューのサポートビューのサポートが追加されました。Athena で CREATE VIEW (p. 426)、DESCRIBEVIEW (p. 427)、DROP VIEW (p. 429)、SHOW CREATE VIEW (p. 432)、および SHOW VIEWS (p. 434) が使用できるようになりました。ビューを定義するクエリは、クエリでビューを参照するたびに実行されます。詳細については、ビューの使用 (p. 120) を参照してください。

エラーメッセージの改善と更新• GSON 2.8.0 ライブラリを CloudTrail SerDe に追加CloudTrailSerDeして、 の問題を解決し、JSON 文字

列の解析を有効にしました。• Parquet と一部のケースでは ORC で Athena におけるパーティションスキーマの検証が拡張され、列の

再順序変更が可能になりました。これにより、Athena で徐々に進化するスキーマの変化と AWS Glueクローラから追加されるテーブルにより適切に対応できるようになりました。詳細については、「スキーマの更新を処理する (p. 144)」を参照してください。

• SHOW VIEWS に解析サポートが追加されました。• 最も一般的なエラーメッセージに次の改善が加えられました。

• が置き換えられました Internal Error が SerDe クエリの列を解析Athenaできない場合に、説明的なエラーメッセージを含む メッセージ。以前は、Athena は解析エラーの場合に内部エラーを発行していました。新しいエラーメッセージは次のようになります。"HIVE_BAD_DATA: Error parsing field valuefor field 0: java.lang.String cannot be cast to org.openx.data.jsonserde.json.JSONObject".

• アクセス許可不足のエラーメッセージが改善されて、詳細が追加されました。

バグ修正以下のバグを修正しました。

• REAL から FLOAT データ型への内部変換を有効にする問題が修正されました。これにより、AWS Glueデータ型を返すFLOATクローラとの統合が改善されます。

• Athena が AVRO DECIMAL (論理的な型) を DECIMAL 型に変換しない問題が修正されました。• Athena が TIMESTAMP データ型の値を参照する WHERE 句の Parquet データによるクエリの結果を返さ

ない問題が修正されました。

2018 年 5 月 17 日公開日: 2018 年 05 月 17 日

Athena のクエリ同時実行クォータが 5 件から 20 件に増加されました。これによって、20 件までのDDL クエリおよび 20 件までの SELECT クエリを同時に送信して実行できます。同時実行数のクォータは、DDL および SELECT クエリで別であることに注意してください。

Athena における同時実行数のクォータは、サービス同時実行に送信できるクエリの数で定義されます。同じタイプ (DDL あるいは SELECT) のクエリを同時に 20 件まで送信できます。同時実行クエリクォータを超えるクエリを送信すると、Athena API によってエラーメッセージが表示されます。

Athena にクエリを送信すると、全体的なサービス負荷および着信リクエストの量に基づいてリソースが割り当てられ、クエリが処理されます。当社では継続的にサービスをモニタリングして調整を行うため、お客様のクエリはできるだけ短期間で処理されます。

詳細については、「サービスクォータ (p. 452)」 を参照してください。これは調整可能なクォータです。サービスクォータコンソールを使用して、同時実行クエリのクォータの引き上げをリクエストできます。

469

Page 479: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2018 年 4 月 19 日

2018 年 4 月 19 日公開日: 2018 年 04 月 19 日

配列データ型として ResultSet を返すサポート、改良点、およびバグ修正を反映した、新しいバージョンの JDBC ドライバー (バージョン 2.0.2) をリリースしました。詳細については、ドライバーの「リリースノート」を参照してください。

JDBC ドライバーの新しいバージョン 2.0.2 とそのドキュメントのダウンロードについては、「JDBC ドライバーを介した Athena の使用 (p. 72)」を参照してください。

JDBC ドライバーの最新バージョンは 2.0.2 です。ドライバーをバージョン 1.x から 2.x に移行する場合は、既存の設定を新しい設定に移行する必要があります。最新のドライバーに移行することを強くお勧めします。

新しいバージョンのドライバーの変更点、バージョンの相違点、例については、「JDBC ドライバー移行ガイド」を参照してください。

以前のバージョンの JDBC ドライバーについては、「以前のバージョンの JDBC ドライバーで Athena を使用する (p. 447)」を参照してください。

2018 年 4 月 6 日公開日: 2018 年 04 月 06 日

自動入力を使用して Athena コンソールでクエリを入力します。

2018 年 3 月 15 日公開日: 2018 年 03 月 15 日

CloudTrail コンソールから直接 CloudTrail ログファイルの Athena テーブルを自動作成する機能を追加しました。詳細については、「CloudTrail コンソールを使用した CloudTrail ログの Athena テーブルの作成 (p. 207)」 を参照してください。

2018 年 2 月 2 日公開日: 2018 年 02 月 12 日

GROUP BY 句を使用するメモリに大きな負担をかけるクエリのディスクに中間データを安全にオフロードする機能が追加されました。これにより、そのようなクエリの信頼性が向上し、"Query resourceexhausted" エラー。

2018 年 1 月 19 日公開日: 2018 年 01 月 19 日

Athena では、オープンソースの分散型クエリエンジンである Presto を使用してクエリを実行します。

Athena ではバージョンの管理は不要です。Athena の基盤となるエンジンを Presto 0.172 に基づくバージョンに透過的にアップグレードしました。ユーザーが操作する必要はありません。

470

Page 480: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2017 年 11 月 13 日

このアップグレードにより、Athena で Presto 0.172 の関数と演算子を使用できます。これには、Presto0.172 Lambda 式も含まれます。

このリリースの主な更新 (コミュニティ提供の修正を含む) は以下のとおりです。

• ヘッダーを無視するサポート。テーブルの定義時に skip.header.line.count プロパティを使用することで、Athena でヘッダーを無視できます。これは、Grok または Regex LazySimpleSerDe (p. 391)ではなく、 OpenCSVSerDe (p. 381)および を使用するクエリでサポートされますSerDes。

• STRING 関数での CHAR(n) データ型のサポート。CHAR(n) の範囲は [1.255] です。VARCHAR(n) の範囲は [1,65535] です。

• 相関サブクエリのサポート。• Presto Lambda 式および関数のサポート。• DECIMAL 型と演算子のパフォーマンスが向上しました。• フィルタ処理された集計のサポート (SELECT sum(col_name) FILTER である id > 0 など)。• DECIMAL、TINYINT、SMALLINT、および REAL の各データ型のプッシュダウン述語。• 限定比較述語のサポート: ALL、 ANY 、および SOME。• 関数の追加: arrays_overlap()、 array_except() 、 levenshtein_distance() 、 codepoint() 、 skewness() 、 kurtosis() 、および typeof()。

• タイムゾーン引数を使用する from_unixtime() 関数のバリアントを追加しました。• bitwise_and_agg() 集計関数と bitwise_or_agg() 集計関数を追加しました。• xxhash64() 関数と to_big_endian_64() 関数を追加しました。• JSON パスの添字でバックスラッシュを使用して二重引用符やバックスラッシュをエスケープするため

のサポートを json_extract() 関数と json_extract_scalar() 関数に追加しました。これまでバックスラッシュは標準の文字として扱われていたために、これによってバックスラッシュを使用した呼び出しのセマンティクスが変わります。

関数と演算子の詳細なリストについては、このガイドの「SQL クエリ、関数、および演算子 (p. 403)」と、Presto 0.172 の関数を参照してください。

Athena では、Presto の機能の一部だけがサポートされます。詳細については、「制限 (p. 435)」を参照してください。

2017 年 11 月 13 日公開日: 2017 年 11 月 13 日

Athena を ODBC ドライバーに接続するためのサポートを追加しました。詳細については、「ODBC でのAmazon Athena との接続 (p. 73)」 を参照してください。

2017 年 11 月 1 日公開日: 2017 年 11 月 01 日

地理空間データのクエリのサポートをアジアパシフィック (ソウル)、アジアパシフィック (ムンバイ)、および欧州 (ロンドン) の各リージョンに追加しました。詳細については、「地理空間データのクエリ (p. 170)」と「AWS のリージョンとエンドポイント」を参照してください。

2017 年 10 月 19 日公開日: 2017 年 10 月 19 日

471

Page 481: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2017 年 10 月 3 日

欧州 (フランクフルト) のサポートを追加しました。サポートされるリージョンのリストについては、「AWS のリージョンとエンドポイント」を参照してください。

2017 年 10 月 3 日公開日: 2017 年 10 月 03 日

で名前付き Athena クエリを作成しますCloudFormation。 詳細については、AWS ユーザーガイドの「AWS::Athena::NamedQuery」を参照してくださいCloudFormation。

2017 年 9 月 25 日公開日: 2017 年 09 月 25 日

アジアパシフィック (シドニー) のサポートが追加されました。サポートされるリージョンのリストについては、「AWS のリージョンとエンドポイント」を参照してください。

2017 年 8 月 14 日公開日: 2017 年 08 月 14 日

AWS Glue データカタログの統合と、Athena で管理されるデータカタログから AWS Glue データカタログに更新するための移行ウィザードを追加しました。詳細については、AWS Glue との統合 (p. 17) を参照してください。

2017 年 8 月 4 日公開日: 2017 年 08 月 04 日

Grok SerDe のサポートを追加しました。これにより、ログなどの構造化されていないテキストファイルのレコードのパターンマッチングが容易になります。詳細については、Grok SerDe (p. 384) を参照してください。コンソールを使用してクエリ履歴をスクロールするためのキーボードショートカットを追加しました (Windows での CTRL +⇧/⇩、Mac での CMD + ⇧/⇩)。

2017 年 6 月 22 日公開日: 2017 年 06 月 22 日

[アジアパシフィック (東京)] と [アジアパシフィック (シンガポール)] のサポートが追加されました。サポートされるリージョンのリストについては、「AWS のリージョンとエンドポイント」を参照してください。

2017 年 6 月 8 日公開日: 2017 年 06 月 08 日

欧州 (アイルランド) のサポートが追加されました。詳細については、「AWS のリージョンとエンドポイント」を参照してください。

472

Page 482: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2017 年 5 月 19 日

2017 年 5 月 19 日公開日: 2017 年 05 月 19 日

Amazon Athena API および Athena 用の AWS CLI サポートを追加しました。JDBC ドライバーをバージョン 1.1.0 に更新しました。さまざまな問題を修正しました。

• Amazon Athena では、Athena のアプリケーションプログラミングを行うことができます。詳細については、Amazon Athena API リファレンス を参照してください。最新の AWS SDKsには、Athena API のサポートが含まれています。ドキュメントとダウンロードへのリンクについては、「アマゾン ウェブサービスのツール」SDKsのセクションを参照してください。

• AWS CLI には、Athena の新しいコマンドが含まれています。詳細については、Amazon Athena API リファレンス を参照してください。

• 新しい JDBC ドライバー 1.1.0 が利用可能になりました。最新バージョンでは、新しい Athena API のサポート、最新の特徴、バグ修正が追加されています。ドライバーを https://s3.amazonaws.com/athena-downloads/drivers/AthenaJDBC41-1.1.0.jar からダウンロードしてください。 最新の Athena JDBC ドライバーにアップグレードすることをお勧めします。ただし、以前のドライバーバージョンもまだ使用できます。以前のドライバーバージョンでは Athena API をサポートしていません。詳細については、JDBC ドライバーを介した Athena の使用 (p. 72) を参照してください。

• Athena の以前のバージョンでポリシーステートメント固有であったアクションは廃止されました。JDBC ドライバーバージョン 1.1.0 にアップグレードして、カスタマー管理またはインラインのIAM ポリシーを JDBC ユーザーにアタッチする場合は、IAM ポリシーを更新する必要があります。一方、以前のバージョンの JDBC ドライバーは Athena API をサポートしていないため、廃止されたアクションは以前のバージョンの JDBC ユーザーにアタッチされているポリシーでのみ指定できます。このため、カスタマー管理またはインラインの IAM ポリシーを更新する必要はありません。

• これらのポリシー固有のアクションは、Athena API のリリース前に Athena で使用されていたものです。これらの廃止されたアクションは、バージョン 1.1.0 より前の JDBC ドライバーのポリシーでのみ使用します。JDBC ドライバーをアップグレードする場合は、廃止されたアクションを許可または拒否するポリシーステートメントを、以下に示す適切な API アクションに置き換えてください。置き換えないと、エラーが発生します。

Deprecated Policy-Specific Action Corresponding Athena API Action

athena:RunQuery athena:StartQueryExecution

athena:CancelQueryExecution athena:StopQueryExecution

athena:GetQueryExecutions athena:ListQueryExecutions

Improvements• クエリ文字列の長さの上限を 256 KB に増やしました。

バグ修正• コンソールでクエリ結果をスクロールしたときに正常に表示されない問題を修正しました。• Amazon S3 データファイルの \u0000 文字列のせいでエラーが発生するという問題を修正しました。

473

Page 483: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2017 年 4 月 4 日

• JDBC ドライバーを通じて行ったクエリキャンセルのリクエストが失敗するという問題を修正しました。

• のデータで が失敗するという問題を修正しましたAWS CloudTrail。SerDeAmazon S3米国東部 (オハイオ)

• パーティション分割されたテーブルで DROP TABLE が失敗するという問題を修正しました。

2017 年 4 月 4 日公開日: 2017 年 04 月 04 日

Amazon S3 のデータ暗号化のサポートを追加しました。また、暗号化のサポート、改良点、およびバグ修正を反映した JDBC ドライバーのアップデート (バージョン 1.0.1) をリリースしました。

Features• 以下の暗号化機能を追加しました。

• Amazon S3 の暗号化されたデータのクエリのサポート。• Athena クエリ結果の暗号化のサポート。

• 新しいバージョンのドライバーは新しい暗号化機能をサポートし、改良点とバグ修正を追加しました。• を使用して列を追加、置換、変更する機能を追加しましたALTER TABLE。 詳細については、Hive ド

キュメントの「変更列」を参照してください。• LZO 圧縮データのクエリのサポートを追加しました。

詳細については、保管時の暗号化 (p. 238) を参照してください。

Improvements• JDBC のクエリパフォーマンスが向上しました。ページサイズの改善により、100 行ではなく 1,000 行

が返されます。• JDBC ドライバーインターフェイスを使用してクエリをキャンセルする機能を追加しました。• JDBC 接続 URL で JDBC オプションを指定する機能を追加しました。詳細については、「以前のバー

ジョンの JDBC ドライバーで Athena を使用する (p. 447)」 (以前のバージョンのドライバーの場合) および「JDBC を使用して接続する (p. 72)」 (最新のドライバーの場合) を参照してください。

• ドライバーに PROXY 設定を追加しました。この設定は、AWS SDK for Java ClientConfigurationを使用して行うことができます。

バグ修正以下のバグを修正しました。

• JDBC ドライバーを使用して複数のクエリを実行すると、スロットリングエラーが発生する場合がある。

• 小数データ型を射影すると、JDBC ドライバーが停止する場合がある。• テーブルでのデータ型の定義に関係なく、JDBC ドライバーはすべてのデータ型を文字列として返す。

たとえば、INT データ型として定義されている列を resultSet.GetObject() を使用して選択すると、INT データ型が返されずに STRING データ型が返される。

• JDBC ドライバーでの認証情報の検証が、クエリの実行時に行われずに接続時に行われる。• スキーマを URL と共に指定すると、JDBC ドライバーを介したクエリが失敗する。

474

Page 484: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド2017 年 3 月 24 日

2017 年 3 月 24 日公開日: 2017 年 03 月 24 日

AWS の追加、パフォーマンスの向上、およびパーティション問題の修正を行いました。CloudTrailSerDe

Features• が追加されましたAWS CloudTrailSerDe。 詳細については、「」を参照してくださいCloudTrail

SerDe (p. 379)。詳細な使用例については、AWS Big Data Blog の記事「AWS と Amazon を使用してセキュリティ、コンプライアンス、運用上のアクティビティを分析する方法」を参照してくださいCloudTrailAthena。

Improvements• 多数のパーティションをスキャンするときのパフォーマンスを改善しました。• MSCK Repair Table オペレーションのパフォーマンスを改善しました。• プライマリリージョン以外のリージョンに保存されている Amazon S3 データをクエリする機能を追加

しました。Athena の標準料金に加えて、Amazon S3 の標準のリージョン間データ転送料金が適用されます。

バグ修正• パーティションがロードされないときに「テーブルが見つかりません」エラーが発生するバグを修正し

ました。• ALTER TABLE ADD PARTITION IF NOT EXISTS クエリで例外がスローされないようにバグを修正

しました。• DROP PARTITIONS のバグを修正しました。

2017 年 2 月 20 日公開日: 2017 年 02 月 20 日

コンソールウィザードで、 AvroSerDe OpenCSVSerDeおよび 、 米国東部 (オハイオ)リージョン、および列の一括編集のサポートが追加されました。大規模な Parquet テーブルのパフォーマンスを改善しました。

Features• 新しい のサポートを導入しましたSerDes。

• Avro SerDe (p. 376)• CSV を処理するための OpenCSVSerDe (p. 381)

• 米国東部 (オハイオ) リージョン (us-east-2) でのサポート。このリージョンでクエリを実行できるようになりました。

• [Add Table] ウィザードを使用してテーブルスキーマを一括して定義できるようになりました。[CatalogManager]、[Add table]、[Bulk add columns] の順に選択し、手順に従ってテーブルを定義できます。

475

Page 485: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドFeatures

テキストボックスに名前と値のペアを入力し、[Add] を選択します。

476

Page 486: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイドImprovements

Improvements• 大規模な Parquet テーブルのパフォーマンスを改善しました。

477

Page 487: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

ドキュメント履歴ドキュメント最新更新日: 2020 年 11 月 5 日

お客様からのフィードバックに対応するために、ドキュメントを頻繁に更新しています。次の表は、Amazon Athena ドキュメントへの重要な追加項目をまとめたものです。すべての更新を示しているわけではありません。

変更  説明 リリース日

へのフェデレーションアクセスLakeFormationのためにで JDBC ドライバーを使用するためのドキュメントを追加しましたAthena。

詳細については、「使用 Lake Formation そして AthenaJDBC および ODBC ドライバー、フェデレーション アクセス用 Athena (p. 288)」および「チュートリアル: Okta ユーザー向けに Athena Lake Formationおよび JDBC を使用するためのフェデレーティッドアクセスの設定 (p. 289)」を参照してください。

2020 年 9 月 25日

AmazonAthenaElasticsearchデータコネクタのドキュメントを追加しました。

詳細については、Amazon Athena Elasticsearch コネクタ (p. 60) を参照してください。

2020 年 7 月 21日

Hudi データセットのクエリに関するドキュメントを追加しました。

詳細については、Athena による Apache Hudi データセットに対するクエリ (p. 181) を参照してください。

2020年7月9日

に保存されたApache ウェブサーバーログと IIS ウェブサーバーログのクエリに関するドキュメントを追加しましたAmazon S3。

詳細については、「保存されたApacheログのクエリAmazon S3 (p. 228)」および「インターネット情報サーバー(IIS) ログのクエリが Amazon S3 (p. 230)」を参照してください。

2020 年 7 月 8 日

Amazon Athena ユーザーガイド が Kindle形式で利用できるようになりました。

Kindle eBook は無料です。詳細については、AmazonAthena を参照してください。ユーザーガイド Kindle 版。または、 のオンラインバージョンで、任意のページの上部にある Kindle リンクを選択しますAmazon Athena ユーザーガイド。

2020 年 6 月 18日

Athena DataConnector forExternal HiveMetastore (Preview)の一般リリースのドキュメントを追加しました。

詳細については、Athena Data Connector for External HiveMetastore (Preview) を使用する (p. 34) を参照してください。

2020 年 6 月 1 日

データカタログリソースのタグ付けに関するドキュメントが追加されました。

詳細については、リソースのタグ付け (p. 359) を参照してください。

2020 年 6 月 1 日

478

Page 488: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

パーティション射影に関するドキュメントを追加しました。

詳細については、Amazon Athena を使用したパーティション射影 (p. 98) を参照してください。

2020 年 5 月 21日

Athena の Java コード例を更新しました。

詳細については、コードサンプル (p. 438) を参照してください。

2020 年 5 月 11日

Amazon GuardDuty検索結果のクエリに関するトピックを追加しました。

詳細については、Amazon GuardDuty 結果のクエリの実行 (p. 216) を参照してください。

2020 年 3 月 19日

CloudWatch イベント を使用したAthena クエリ状態移行のモニタリングに関するトピックを追加しました。

詳細については、CloudWatch イベントを使用した Athenaクエリのモニタリング (p. 353) を参照してください。

2020 年 3 月 11日

Athena を使用した AWS GlobalAccelerator フローログのクエリに関するトピックを追加しました。

詳細については、AWS Global Accelerator フローログのクエリ (p. 214) を参照してください。

2020 年 2 月 6 日

• INSERT INTO でCTAS を使用して、パーティション化されていないソースからパーティション化された宛先にデータを追加する方法に関するドキュメントが追加されました。

• Athena 用 ODBCドライバーの 1.1.0プレビューバージョンのダウンロードリンクを追加しました。

• SHOW DATABASESLIKE 正規表現の説明を修正しました。

• CTA トピックのpartitioned_by構文を修正しました。

• その他のマイナーな修正。

ドキュメントの更新には次のトピックが含まれますが、これらに限定されません。

• ETL およびデータ分析での CTAS および INSERT INTO の使用 (p. 135)

• ODBC での Amazon Athena との接続 (p. 73)(1.1.0 プレビュー機能が 1.1.2 ODBC ドライバーに含まれるようになりました)。

• SHOW DATABASES (p. 432)• CREATE TABLE AS (p. 423)

2020 年 2 月 4 日

479

Page 489: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

INSERT INTO でCTAS を使用して、パーティション化されていないソースからパーティション分割された宛先にデータを追加する方法に関するドキュメントが追加されました。

詳細については、CTAS および INSERT INTO を使用した、100 個を超えるパーティションを持つテーブルの作成 (p. 141) を参照してください。

2020 年 1 月 22日

クエリ結果の場所情報が更新されました。

Athena は「デフォルト」のクエリ結果の場所を作成しなくなりました。詳細については、クエリ結果の場所の指定 (p. 116) を参照してください。

2020 年 1 月 20日

AWS Glue データカタログ のクエリに関するトピックを追加しました。Athenaのサービスクォータ(旧称「サービスの制限」) に関する情報を更新しました。

詳細については、以下のトピックを参照してください。

• AWS Glue データカタログ のクエリ (p. 224)• サービスクォータ (p. 452)

2020 年 1 月 17日

OpenCSVSerDeタイプTIMESTAMPをUNIX 数値形式で指定する必要があることに注意するように、 のトピックを修正しました。

詳細については、CSV を処理するためのOpenCSVSerDe (p. 381) を参照してください。

2020 年 1 月 15日

暗号化に関するセキュリティトピックを更新し、Athena が非対称キーをサポートしないことに示しました。

Athena は、データの読み書き用の対称キーのみをサポートします。詳細については、サポートされている Amazon S3 暗号化オプション (p. 238) を参照してください。

2020 年 1 月 8 日

カスタム AWS KMSキーで暗号化されたAmazon S3 バケットへのクロスアカウントアクセスに関する情報を追加しました。

詳細については、カスタム AWS KMS キーで暗号化されたバケットへのクロスアカウントアクセス (p. 256) を参照してください。

2019 年 12 月 13日

480

Page 490: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

フェデレーティッドクエリ、外部 Hiveメタストア、機械学習、およびユーザー定義関数のドキュメントを追加しました。新しいCloudWatch メトリクスが追加されました。

詳細については、以下のトピックを参照してください。

• Amazon Athena Federated Query (Preview) を使用する (p. 55)

• Athena データソースコネクタの使用 (p. 58)• Athena Data Connector for External Hive Metastore

(Preview) を使用する (p. 34)• Machine Learning (ML) with Amazon Athena (Preview) を

使用する (p. 191)• ユーザー定義関数を使用したクエリ(プレ

ビュー) (p. 193)• CloudWatch メトリクスと Athena のディメンションの一

覧表示 (p. 352)

2019 年 11 月 26日

新しい INSERTINTO コマンドと、データマニフェストファイルをサポートするための更新されたクエリ結果の場所情報のセクションを追加しました。

詳細については、「INSERT INTO (p. 408)」および「クエリ結果、出力ファイル、クエリ履歴の使用 (p. 111)」を参照してください。

2019 年 9 月 18日

インターフェイスVPC エンドポイント (PrivateLink) のサポートに関するセクションを追加しました。JDBC ドライバーを更新しました。強化された VPCフローログに関する情報を更新しました。

詳細については、「インターフェイス VPC エンドポイントを使用して Amazon Athena に接続する (p. 279)」、「Amazon VPC フローログのクエリ (p. 219)」、および「JDBC ドライバーを介した Athena の使用 (p. 72)」を参照してください。

2019 年 9 月 11日

AWS Lake Formationとの統合に関するセクションを追加しました。

詳細については、Athena を使用して AWS Lake Formationに登録されたデータをクエリする (p. 281) を参照してください。

2019 年 6 月 26日

他の AWS のサービスとの整合性のためにセキュリティセクションを更新しました。

詳細については、Amazon Athena セキュリティ (p. 236) を参照してください。

2019 年 6 月 26日

AWS WAF ログのクエリに関するセクションを追加しました。

詳細については、AWS WAF ログのクエリ (p. 221) を参照してください。

2019 年 5 月 31日

481

Page 491: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

Athena ワークグループをサポートする新しいバージョンのODBC ドライバーをリリースしました。

ODBC ドライバーのバージョン 1.0.5 とそのドキュメントをダウンロードするには、「ODBC での Amazon Athena との接続 (p. 73)」を参照してください。ワークグループでタグを使用しても、ODBC ドライバーの接続文字列は変更されません。タグを使用するには、最新バージョンの ODBC ドライバー (この最新バージョン) にアップグレードしてください。

このドライバーバージョンでは、Athena API ワークグループアクション (p. 346)を使用してワークグループを作成および管理し、Athena API タグアクション (p. 361)を使用してワークグループのタグを追加、一覧表示、または削除できます。開始する前に、ワークグループとタグに対するアクションに対して IAM にリソースレベルの権限があることを確認してください。

2019 年 3 月 5 日

Amazon Athena のワークグループ用のタグサポートを追加しました。

タグは、1 つのキーと 1 つの値で構成されており、どちらもお客様側が定義します。ワークグループにタグを付けるときは、カスタムメタデータを割り当てます。たとえば、コストセンターごとにワークグループを作成します。その後、これらのワークグループにタグを追加することで、各コストセンターの Athena 支出を追跡できます。詳細については、 https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.htmlユーザーガイドの「請求用のタグAWS Billing and Cost Managementの使用」を参照してください。

2019 年 2 月 22日

OpenXSerDeで使用される JSON が改善されましたAthena。

改善点は次のとおりです。

• ConvertDotsInJsonKeysToUnderscores プロパティをサポートします。に設定すると、 はキー名のドットTRUEをアンダースコアに置き換えることができます。SerDeたとえば、JSON データセットに "a.b" という名前のキーが含まれている場合は、このプロパティを使用して列名を Athena の "a_b" に定義できます。デフォルトは ですFALSE。 デフォルトでは、 Athenaは列名にドットを許可しません。

• case.insensitive プロパティをサポートします。デフォルトでは、Athena は JSON データセットのすべてのキーで小文字を使用する必要があります。WITH SERDEPROPERTIES ("case.insensitive"= FALSE;) を使用すると、データ内で大文字と小文字を区別してキー名を使用できます。デフォルトは ですTRUE。 TRUEに設定すると、 SerDeはすべての大文字の列を小文字に変換します。

詳細については、OpenX JSON SerDe (p. 388) を参照してください。

2019 年 2 月 18日

482

Page 492: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

ワークグループ用のサポートを追加しました。

ワークグループを使用して、ユーザー、チーム、アプリケーション、またはワークロードを分離し、各クエリまたはワークグループ全体で処理できるデータ量に制限を設定します。ワークグループは IAM リソースとして機能するため、リソースレベルのアクセス許可を使用して特定のワークグループへのアクセスを制御できます。Amazon CloudWatch でのクエリ関連のメトリクスの表示、スキャンされたデータ量の制限設定によるクエリコストの管理、しきい値の作成のほか、これらのしきい値に違反したときに Amazon SNS アラームなどのアクションをトリガーすることができます。詳細については、「クエリを実行するためのワークグループの使用 (p. 331)」および「CloudWatch メトリクスとイベントによるコスト管理とクエリのモニタリング (p. 348)」を参照してください。

2019 年 2 月 18日

Network LoadBalancer からのログを分析するためのサポートが追加されました。

Network Load Balancer からのログを分析するための Athenaクエリの例が追加されました。これらのログは、NetworkLoad Balancer に送信された Transport Layer Security (TLS)リクエストに関する詳細情報を受け取ります。これらのアクセスログを使用して、トラフィックパターンの分析や、問題のトラブルシューティングを行うことができます。詳細については、「the section called “Network Load Balancer ログのクエリ” (p. 217)」 を参照してください。

2019 年 1 月 24日

AD FS およびSAML 2.0 (SecurityAssertion MarkupLanguage 2.0) を使用した Athena APIへのフェデレーションアクセスのサポートを備えた、新しいバージョンの JDBCおよび ODBC ドライバーをリリースしました。

このリリースのドライバーでは、Athena へのフェデレーションアクセスが Active Directory Federation Service (ADFS 3.0) に対してサポートされます。アクセスは、SAML2.0 をサポートするバージョンの JDBC や ODBC ドライバーを通じて確立されます。Athena API へのフェデレーションアクセスの詳しい設定方法については、「the sectioncalled “Athena API へのフェデレーションアクセスの有効化” (p. 274)」を参照してください。

2018 年 11 月 10日

Athena でデータベースとテーブルに対するきめ細かなアクセスコントロールのサポートを追加しました。さらに、DataCatalog のデータベースとテーブルメタデータを暗号化できるようにするポリシーを Athena で追加しました。

アイデンティティベース (IAM) ポリシーを作成するためのサポートを追加しました。これにより Athena で使用されるデータベースやテーブルなど、AWS Glue データカタログ のリソースに対するきめ細かなアクセスコントロールが可能になります。

さらに、特定のポリシーを Athena に追加することにより、Data Catalog のデータベースとテーブルメタデータを暗号化できます。

詳細については、「AWS Glue データカタログ のデータベースとテーブルへのきめ細かなアクセス (p. 249)」を参照してください。

2018 年 10 月 15日

483

Page 493: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

CREATE TABLE ASSELECT ステートメントのサポートを追加しました。

ドキュメントでいくつか記述を修正しました。

CREATE TABLE AS SELECT ステートメントのサポートを追加しました。「クエリ結果からのテーブルの作成 (p. 126)」、「考慮事項と制限事項 (p. 126)」、および「例 (p. 132)」を参照してください。

2018 年 10 月 10日

ODBC ドライバーバージョン 1.0.3 をリリースしました。このバージョンでは、ページ単位での結果の取得ではなく、結果のストリーミングがサポートされています。

ドキュメントでいくつか記述を修正しました。

ODBC ドライバーバージョン 1.0.3 では、結果のストリーミングがサポートされ、改善、バグ修正、および「プロキシサーバーでの SSL の使用」でのドキュメントの更新も含まれています。

ODBC ドライバーのバージョン 1.0.3 とそのドキュメントのダウンロードについては、「ODBC での Amazon Athena との接続 (p. 73)」を参照してください。

2018 年 9 月 6 日

JDBC ドライバーのバージョン 2.0.5 がリリースされました。これにより結果のページ単位での取得ではなく、ストリーミングがデフォルトでサポートされます。

ドキュメントでいくつか記述を修正しました。

JDBC ドライバーのバージョン 2.0.5 がリリースされました。これにより結果のページ単位での取得ではなく、ストリーミングがデフォルトでサポートされます。詳細については、「JDBC ドライバーを介した Athena の使用 (p. 72)」 を参照してください。

2018 年 8 月 16日

Amazon VirtualPrivate Cloud フローログのクエリに関するドキュメントの記述が更新されました。ログを GZIP 形式で Amazon S3 に直接保存できます。

ALB ログのクエリ例を更新しました。

Amazon Virtual Private Cloud フローログのクエリに関するドキュメントの記述が更新されました。ログを GZIP 形式で Amazon S3 に直接保存できます。詳細については、「Amazon VPC フローログのクエリ (p. 219)」 を参照してください。

ALB ログのクエリ例を更新しました。詳細については、「Application Load Balancer ログのクエリ (p. 201)」 を参照してください。

2018 年 8 月 7 日

ビューのサポートが追加されました。さまざまなデータストレージ形式でスキーマを操作するためのガイドラインが追加されました。

ビューのサポートが追加されました。詳細については、「ビューの使用 (p. 120)」 を参照してください。

さまざまなデータストレージ形式におけるスキーマの更新を処理するガイダンスでこのガイドが更新されました。詳細については、「スキーマの更新を処理する (p. 144)」 を参照してください。

2018 年 5 月 6 日

484

Page 494: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

デフォルトのクエリ同時実行制限が 5 件から 20 件に増加されました。

20 件までの DDL クエリおよび 20 件までの SELECT クエリを同時に送信して実行できます。詳細については、「サービスクォータ (p. 452)」 を参照してください。

2018 年 5 月 17日

クエリタブと、クエリエディタで自動入力を設定する機能を追加しました。

クエリタブと、クエリエディタで自動入力を設定する機能を追加しました。詳細については、「コンソールを使用する (p. 15)」 を参照してください。

2018 年 5 月 8 日

JDBC ドライバーのバージョン 2.0.2 がリリースされました。

JDBC ドライバーの新しいバージョン (バージョン 2.0.2) がリリースされました。詳細については、「JDBC ドライバーを介した Athena の使用 (p. 72)」 を参照してください。

2018 年 4 月 19日

Athena コンソールでクエリを入力する自動入力を追加しました。

Athena コンソールでクエリを入力する自動入力を追加しました。

2018 年 4 月 6 日

CloudTrail コンソールから直接CloudTrail ログファイルの Athena テーブルを作成する機能を追加しました。

CloudTrail コンソールから直接 CloudTrail ログファイルのAthena テーブルを自動作成する機能を追加しました。詳細については、「CloudTrail コンソールを使用した CloudTrailログの Athena テーブルの作成 (p. 207)」 を参照してください。

2018 年 3 月 15日

GROUP BY を使用したクエリ用に中間データを安全にディスクにオフロードできるようになりました。

GROUP BY 句を使用するメモリに大きな負担をかけるクエリのディスクに中間データを安全にオフロードする機能が追加されました。これにより、そのようなクエリの信頼性が向上し、"Query resource exhausted" エラー。詳細については、「2018 年 2 月 2 日 (p. 470)」のリリースノートを参照してください。

2018 年 2 月 2 日

Presto バージョン0.172 のサポートが追加されました。

Amazon Athena の基盤となるエンジンを Presto 0.172 に基づくバージョンにアップグレードしました。詳細については、「2018 年 1 月 19 日 (p. 470)」のリリースノートを参照してください。

2018 年 1 月 19日

ODBC ドライバーのサポートを追加しました。

Athena を ODBC ドライバーに接続するためのサポートを追加しました。詳細については、「ODBC を使用した AmazonAthena への接続」を参照してください。

2017 年 11 月 13日

アジアパシフィック(ソウル)、アジアパシフィック (ムンバイ) および 欧州 (ロンドン) リージョンのサポートが追加されました。地理空間データのクエリのサポートを追加しました。

地理空間データのクエリ、および アジアパシフィック (ソウル)、アジアパシフィック (ムンバイ)、欧州 (ロンドン) リージョンのサポートを追加しました。詳細については、「地理空間データのクエリ」と「AWS のリージョンとエンドポイント」を参照してください。

2017 年 11 月 1日

485

Page 495: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

欧州 (フランクフルト) のサポートが追加されました。

欧州 (フランクフルト) のサポートが追加されました。サポートされるリージョンのリストについては、「AWS のリージョンとエンドポイント」を参照してください。

2017 年 10 月 19日

AWSCloudFormation を使用した名前付きAthena クエリのサポートを追加しました。

AWS CloudFormation を使用した名前付き Athenaクエリの作成のサポートを追加しました。詳細については、https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-athena-named-query.html ユーザーガイドの「AWSCloudFormationAWS::Athena::NamedQuery」を参照してください。

2017 年 10 月 3日

アジアパシフィック(シドニー) のサポートが追加されました。

アジアパシフィック (シドニー) のサポートが追加されました。サポートされるリージョンのリストについては、「AWS のリージョンとエンドポイント」を参照してください。

2017 年 9 月 25日

本ガイドに、AWSサービスのログや、マップ、配列、ネストされたデータ、JSON を含むデータなどのさまざまなタイプのデータのクエリについてのセクションを追加しました。

「AWS サービスログをクエリする (p. 200)」および各種データの Athena でのクエリの例を追加しました。詳細については、「Amazon Athena を使用した SQL クエリの実行 (p. 111)」 を参照してください。

2017 年 9 月 5 日

AWS Glue データカタログ のサポートが追加されました。

AWS Glue データカタログ との統合と、Athena で管理されるデータカタログから AWS Glue データカタログ に更新するための移行ウィザードを追加しました。詳細については、「AWS Glue との統合」および「AWS Glue」を参照してください。

2017 年 8 月 14日

Grok のサポートを追加しましたSerDe。

Grok SerDe のサポートを追加しました。これにより、ログなどの構造化されていないテキストファイルのレコードのパターンマッチングが容易になります。詳細については、Grokを参照してくださいSerDe。 コンソールを使用してクエリ履歴をスクロールするためのキーボードショートカットを追加しました (Windows での CTRL + ???/???、Mac での CMD+ ???/???)。

2017 年 8 月 4 日

アジアパシフィック(東京) のサポートが追加されました。

[アジアパシフィック (東京)] と [アジアパシフィック (シンガポール)] のサポートが追加されました。サポートされるリージョンのリストについては、「AWS のリージョンとエンドポイント」を参照してください。

2017 年 6 月 22日

欧州 (アイルランド)のサポートが追加されました。

欧州 (アイルランド) のサポートが追加されました。詳細については、「AWS のリージョンとエンドポイント」を参照してください。

2017 年 6 月 8 日

Amazon Athena APIおよび AWS CLI のサポートを追加しました。

Athena での Amazon Athena API および AWS CLI のサポートを追加しました。JDBC ドライバーがバージョン 1.1.0 に更新されました。

2017 年 5 月 19日

486

Page 496: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

変更  説明 リリース日

Amazon S3 データ暗号化のサポートを追加しました。

Amazon S3 のデータ暗号化のサポートを追加しました。また、暗号化のサポート、改良点、およびバグ修正を反映した JDBC ドライバーのアップデート (バージョン 1.0.1) をリリースしました。詳細については、保管時の暗号化 (p. 238)を参照してください。

2017 年 4 月 4 日

が追加されましたAWSCloudTrailSerDe。

AWS CloudTrailSerDeの追加、パフォーマンスの向上、およびパーティション問題の修正を行いました。詳細については、CloudTrail SerDe (p. 379) を参照してください。

• 多数のパーティションをスキャンするときのパフォーマンスを改善しました。

• MSCK Repair Table オペレーションのパフォーマンスを改善しました。

• プライマリリージョン以外のリージョンに保存されている Amazon S3 データをクエリする機能を追加しました。Athena の標準料金に加えて、Amazon S3 の標準のリージョン間データ転送料金が適用されます。

2017 年 3 月 24日

米国東部 (オハイオ)のサポートが追加されました。

Avro SerDe (p. 376) と CSV を処理するためのOpenCSVSerDe (p. 381)、米国東部 (オハイオ)、およびコンソールウィザードでの列の一括編集のサポートを追加しました。大規模な Parquet テーブルのパフォーマンスを改善しました。

2017 年 2 月 20日

  Amazon Athena ユーザーガイドの初回リリース。 2016 年 11 月

487

Page 497: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

AWS の用語集最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してください。

488

Page 498: Amazon Athena - ユーザーガイド...Amazon Athena ユーザーガイド Amazon's trademarks and trade dress may not be used in connection with any product or service that is not

Amazon Athena ユーザーガイド

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

cdlxxxix