Denodo から Amazon Athena を参照する

2024.04.05

こんにちは、川田です。今回は、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 ポリシーを付与します。

JDBC および ODBC 接続を介したアクセス

$ 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