こんにちは、川田です。今回は、Denodo より Amazon Athena のテーブルを参照するビューを作成してみます。
公式ドキュメントに記載されている手順を参考に、必要な作業を確認します。
HOW TO CONNECT TO AMAZON ATHENA FROM DENODO
環境
- Denodo Platform 8.0 (Denodo Express)
- Athena engine version 3
利用する Denodo 環境は、無償版にあたる Denodo Express を利用しています。
事前準備
Denodo 側で設定をする前に、AWS 側で必要な作業を実施します。
Glue Data Catalog テーブルを用意
下記のようなテーブルを作成しています。demo
というデータベースに sample
という名前のテーブルを作成しています。dt
というカラムがパーティション・キーとして登録されています。
データレイク全体のファイルサイズは 618 MiB となっています。
$ aws s3 ls --recursive --summarize --human-readable \
s3://analytics-ap-northeast-1-zunda-test/sample | tail -n 3
Total Objects: 1446
Total Size: 618.5 MiB
Denodo 用の IAM ユーザーを用意
Denodo 側で利用する IAM ユーザーを作成します。
今回は user-denodo という名前で作成します。
$ aws iam create-user --user-name user-denodo
作成した IAM ユーザーへ、下記ドキュメントを参考に AWSQuicksightAthenaAccess
ポリシーを付与します。
$ aws iam attach-user-policy --user-name user-denodo \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSQuicksightAthenaAccess
上記とは別に、データレイクの S3 パスにアクセスできるインラインポリシーを付与します。
$ policy=$(cat <<-EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::analytics-ap-northeast-1-zunda-test",
"arn:aws:s3:::analytics-ap-northeast-1-zunda-test/*"
]
}
]
}
EOF
)
$ aws iam put-user-policy --user-name user-denodo --policy-name policy-access-data-lake \
--policy-document "${policy}"
アクセス・キーとシークレット・キーを発行します。
$ aws iam create-access-key --user-name user-denodo
Denodo 側での作業
Web Design Studio より操作を行います。
Athena 向けのデータソースを作成
File
-> New
-> Data Source
-> JDBC
を選択し、Athena 向けのデータソースを以下の通り追加します。
パラメーター | 値 |
---|---|
Name | ※任意の名前 |
Database adapter | Amazon Athena |
Database URL | jdbc:awsathena://AwsRegion=ap-northeast-1;S3OutputLocation=s3://aws-athena-query-results-ap-northeast-1-xxx/;Schema=demo; |
Transaction isolation | Database Default |
Authentication | Use login and password |
AWS access key id | ******** |
AWS secret access key | ******** |
Database URL の値は、以下の形式で入力します。
jdbc:awsathena://AwsRegion={region};S3OutputLocation={athena result 結果格納の s3 bucket path};Schema={Glue database name};
ベースビューを作成
続いて CREATE BASE VIEW
タブを選択します。事前作業で用意したテーブルが参照できていることを確認し、Create selected
をクリックしベースビューを作成します。
確認
作成したベースビューに対して、VQL Shell での検索を行えるか試してみます。
Retrieve all rows
のチェックボックスを有効にして、パーティションとして利用されているカラム dt
を WHERE 句で指定して SELECT しています。
検索できていますね。
続いて、実行されたクエリの情報を get-query-execution コマンドをより取得してみます。
$ aws athena get-query-execution --query-execution-id aafa19c8-d255-4320-a759-0f854169949c \
--region ap-northeast-1
{
"QueryExecution": {
"QueryExecutionId": "aafa19c8-d255-4320-a759-0f854169949c",
"Query": "SELECT t0.processid AS processid FROM demo.sample t0 WHERE t0.dt = '2009-04-13-06-15'",
"StatementType": "DML",
"ResultConfiguration": {
"OutputLocation": "s3://aws-athena-query-results-ap-northeast-1-xxx/aafa19c8-d255-4320-a759-0f854169949c.csv"
},
"ResultReuseConfiguration": {
"ResultReuseByAgeConfiguration": {
"Enabled": false
}
},
"QueryExecutionContext": {
"Database": "demo"
},
"Status": {
"State": "SUCCEEDED",
"SubmissionDateTime": "2024-04-04T21:57:55.919000+09:00",
"CompletionDateTime": "2024-04-04T21:57:56.933000+09:00"
},
"Statistics": {
"EngineExecutionTimeInMillis": 793,
"DataScannedInBytes": 2803966,
"TotalExecutionTimeInMillis": 1014,
"QueryQueueTimeInMillis": 115,
"ServicePreProcessingTimeInMillis": 71,
"QueryPlanningTimeInMillis": 242,
"ServiceProcessingTimeInMillis": 35,
"ResultReuseInformation": {
"ReusedPreviousResult": false
}
},
"WorkGroup": "primary",
"EngineVersion": {
"SelectedEngineVersion": "AUTO",
"EffectiveEngineVersion": "Athena engine version 3"
},
"SubstatementType": "SELECT"
}
}
DataScannedInBytes の値が 2803966 (約2.8MB)となっています。以下、パーティションの値が 2009-04-13-06-15
にあたる S3 パスのサイズは 2.7MiB なので、パーティションが有効に働いていることが分かります。
$ aws s3 ls --recursive --summarize --human-readable \
s3://analytics-ap-northeast-1-zunda-test/sample/dt=2009-04-13-06-15/ | tail -n 3
Total Objects: 6
Total Size: 2.7 MiB