问题描述
如AWS athena文档中所提供。
https://docs.aws.amazon.com/athena/latest/ug/create-database.html
在创建Athena数据库时,我们可以指定DBPROPERTIES,S3Location和注释
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);
}
}
此外,用户需要具有以下权限
- AWSGlueServiceRole
- AmazonS3FullAccess