protected GetTableResponse doGetTable()

in athena-federation-sdk/src/main/java/com/amazonaws/athena/connector/lambda/handlers/GlueMetadataHandler.java [316:360]


    protected GetTableResponse doGetTable(BlockAllocator blockAllocator, GetTableRequest request, TableFilter filter)
            throws Exception
    {
        TableName tableName = request.getTableName();
        com.amazonaws.services.glue.model.GetTableRequest getTableRequest = new com.amazonaws.services.glue.model.GetTableRequest();
        getTableRequest.setCatalogId(getCatalog(request));
        getTableRequest.setDatabaseName(tableName.getSchemaName());
        getTableRequest.setName(tableName.getTableName());

        GetTableResult result = awsGlue.getTable(getTableRequest);
        Table table = result.getTable();

        if (filter != null && !filter.filter(table)) {
            throw new RuntimeException("No matching table found " + request.getTableName());
        }

        SchemaBuilder schemaBuilder = SchemaBuilder.newBuilder();
        if (table.getParameters() != null) {
            table.getParameters().entrySet().forEach(next -> schemaBuilder.addMetadata(next.getKey(), next.getValue()));
        }

        //A column name mapping can be provided to get around restrictive Glue naming rules
        Map<String, String> columnNameMapping = getColumnNameMapping(table);

        Set<String> partitionCols = new HashSet<>();
        if (table.getPartitionKeys() != null) {
            partitionCols = table.getPartitionKeys()
                    .stream().map(next -> columnNameMapping.getOrDefault(next.getName(), next.getName())).collect(Collectors.toSet());
        }

        for (Column next : table.getStorageDescriptor().getColumns()) {
            String mappedColumnName = columnNameMapping.getOrDefault(next.getName(), next.getName());
            schemaBuilder.addField(convertField(mappedColumnName, next.getType()));
            if (next.getComment() != null) {
                schemaBuilder.addMetadata(mappedColumnName, next.getComment());
            }
        }

        populateSourceTableNameIfAvailable(table, schemaBuilder);

        return new GetTableResponse(request.getCatalogName(),
                request.getTableName(),
                schemaBuilder.build(),
                partitionCols);
    }