# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 import datetime from constructs import Construct from aws_cdk import ( Aws, custom_resources as cr ) class QuickSightAthenaDataset(Construct): @property def dataset_arn(self): return self.__dataset_arn def __init__( self, scope: Construct, id: str, iam_policy: cr.AwsCustomResourcePolicy, quicksight_group_arn: str, athena_datasource_arn: str, athena_dataset_name: str, dataset_actions: list, athena_custom_sql: str, athena_columns: list, athena_data_transformations: list, **kwargs): super().__init__(scope, id, **kwargs) aws_account_id = Aws.ACCOUNT_ID quicksight_athena_dataset = cr.AwsCustomResource(self, 'AthenaDataSet', on_create={ "service": "QuickSight", "action": "createDataSet", "parameters": { "AwsAccountId": aws_account_id, "DataSetId": athena_dataset_name, "Name": athena_dataset_name, "ImportMode": "DIRECT_QUERY", "PhysicalTableMap": { "PhysicalAthenaTable": { "CustomSql": { "DataSourceArn": athena_datasource_arn, "Name": athena_dataset_name, "SqlQuery": athena_custom_sql, "Columns": athena_columns } } }, "LogicalTableMap": { "LogicalAthenaTable": { "Alias": athena_dataset_name, "DataTransforms": athena_data_transformations, "Source": { "PhysicalTableId": "PhysicalAthenaTable" } } }, "Permissions": [ { "Principal": quicksight_group_arn, "Actions": dataset_actions } ], }, "physical_resource_id": cr.PhysicalResourceId.of( athena_dataset_name)}, on_delete={ "service": "QuickSight", "action": "deleteDataSet", "parameters": { "AwsAccountId": aws_account_id, "DataSetId": athena_dataset_name }, "physical_resource_id": cr.PhysicalResourceId.of( athena_dataset_name)}, policy=iam_policy ) self.__dataset_arn = quicksight_athena_dataset.get_response_field("Arn")