在AWS Athena中创建数据库时如何获取DBPROPERTIES,S3Loc​​ation和注释集?

问题描述

如AWS athena文档中所提供。
https://docs.aws.amazon.com/athena/latest/ug/create-database.html

在创建Athena数据库时,我们可以指定DBPROPERTIES,S3Loc​​ation和注释

  CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  [COMMENT 'database_comment']
  [LOCATION 'S3_loc']
  [WITH DBPROPERTIES ('property_name' = 'property_value') [,...]]

例如:

  CREATE DATABASE IF NOT EXISTS clickstreams
  COMMENT 'Site Foo clickstream data aggregates'
  LOCATION 's3://myS3location/clickstreams/'
  WITH DBPROPERTIES ('creator'='Jane D.','Dept.'='Marketing analytics');

但是一旦设置了属性。如何使用查询取回属性

可以说,我想从上面的示例中获取创建者的姓名。

解决方法

您可以使用Glue数据目录GetDatabase API call获取这些信息。

Athena中的数据库和表存储在Glue数据目录中。当您在Athena中运行DDL语句时,它将这些语句转换为Glue API调用。由于历史原因,并不是您可以在Glue中进行的所有操作都可以在Athena中使用。

,

我可以使用以下Glue数据目录代码以Json格式获取AWS Athena数据库属性。

package com.amazonaws.samples;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.glue.AWSGlue;
import com.amazonaws.services.glue.AWSGlueClient;
import com.amazonaws.services.glue.model.GetDatabaseRequest;
import com.amazonaws.services.glue.model.GetDatabaseResult;

public class Glue {
    public static void main(String[] args) {
        BasicAWSCredentials awsCreds = new BasicAWSCredentials("*api*","*key*");
        AWSGlue glue = AWSGlueClient.builder().withRegion("*bucket_region*")
                .withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
        GetDatabaseRequest req = new GetDatabaseRequest();
        req.setName("*database_name*");
        GetDatabaseResult result = glue.getDatabase(req);
        System.out.println(result);
    }
}

此外,用户需要具有以下权限

  1. AWSGlueServiceRole
  2. AmazonS3FullAccess