def createDataset()

in visualizeConnectData/scripts/quicksight/deploy.py [0:0]


def createDataset(
    accountId, 
    qsUserArn, 
    dataSourceArn, 
    tableInfo, 
    athenaCatalog,
    athenaDatabaseName,
    athenaTableName,
    name):
        
    deleteDataset(accountId, name)
        
    inputColumns = []
    dataTransforms = []
    for item in tableInfo:
        column = {
            'Name': item['name'],
            'Type': item['quickSightDataType'] 
        } 
        inputColumns.append(column)
        
        if 'latitude' in item['name']:
            dataTransforms.append(
                {
                    'TagColumnOperation': {
                        'ColumnName': item['name'],
                        'Tags': [{'ColumnGeographicRole': 'LATITUDE'}]
                    }
                }
            )
        elif 'longitude' in item['name']:
            dataTransforms.append(
                {
                    'TagColumnOperation': {
                        'ColumnName': item['name'],
                        'Tags': [{'ColumnGeographicRole': 'LONGITUDE'}]
                    }
                }
            )
        elif 'state' in item['name']:
            dataTransforms.append(
                {
                    'TagColumnOperation': {
                        'ColumnName': item['name'],
                        'Tags': [{'ColumnGeographicRole': 'STATE'}]
                    }
                }
            )
        elif 'city' in item['name'] :   #need to be last because the other two contain city
            dataTransforms.append(
                {
                    'TagColumnOperation': {
                        'ColumnName': item['name'],
                        'Tags': [{'ColumnGeographicRole': 'CITY'}]
                    }
                }
            )
    
    #Calcuated Field
    dataTransforms.append(
        {
            'CreateColumnsOperation': { 
                'Columns': [
                    {
                        'ColumnName': 'QueueSLA',
                        'ColumnId': 'QueueSLA-ID',
                        'Expression': "ifelse(queue_duration < 60, 'Goal', queue_duration >= 60 and queue_duration <= 90, 'Met', 'Exceeded')"
                    }
                ]
            }
        }
    )

    cdsResp = qsClient.create_data_set(
        AwsAccountId = accountId,
        DataSetId = name,
        Name = name,
        ImportMode = 'DIRECT_QUERY',
        PhysicalTableMap = {
            'ctrModifiedPhysicalTable': {
                'RelationalTable': {
                    'DataSourceArn': dataSourceArn, 
                    'Catalog': athenaCatalog,
                    'Name': athenaTableName, 
                    'Schema': athenaDatabaseName,
                    'InputColumns': inputColumns
                }
            }
        },
        LogicalTableMap={
            'ctrModifiedLogicalTable' : {
                'Alias': 'ctrModifiedLogicalTable',
                'Source': {
                    'PhysicalTableId': 'ctrModifiedPhysicalTable'
                },
                'DataTransforms': dataTransforms
            }
        }
    )
    
    logger.info(cdsResp)
    dsId = cdsResp['DataSetId']
    dsArn = cdsResp['Arn']
    
    udspResp = qsClient.update_data_set_permissions(
        AwsAccountId=accountId,
        DataSetId=dsId,
        GrantPermissions=[
            {
                'Principal': qsUserArn,
                'Actions': [
                    'quicksight:UpdateDataSetPermissions',
                    'quicksight:DescribeDataSet',
                    'quicksight:DescribeDataSetPermissions',
                    'quicksight:PassDataSet',
                    'quicksight:DescribeIngestion',
                    'quicksight:ListIngestions',
                    'quicksight:UpdateDataSet',
                    'quicksight:DeleteDataSet',
                    'quicksight:CreateIngestion',
                    'quicksight:CancelIngestion'
                ]
            }
        ]
    )
    logger.info(udspResp)
    
    return dsArn