我的 Athena
数据库位于 ap-south-1 区域,而 AWS QuickSight
不存在于该区域。
在这种情况下,如何将 QuickSight
与 Athena
连接?
最佳答案
您需要做的就是将表定义从一个区域复制到另一个区域。有几种方法可以做到这一点
使用 AWS 控制台
这种方法是最简单的方法,不需要额外的设置,因为一切都基于 Athena DDL statements .
- 获取表定义
这应该输出如下内容:SHOW CREATE TABLE `database`.`table`;
CREATE EXTERNAL TABLE `database`.`table`( `col_1` string, `col_2` bigint, ... `col_n` string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://some/location/on/s3' TBLPROPERTIES ( 'classification'='parquet', ... 'compressionType'='gzip')
- 更改到所需区域
- 在要存储表定义的位置创建
数据库
,或使用默认数据库。 - 执行
SHOW CREATE TABLE
生成的语句。请注意,您可能需要根据上一步更改数据库名称 如果您的表是分区的,那么您需要加载所有分区。 如果 S3 上的数据遵循 HIVE 分区样式,即
s3://some/location/on/s3 | ├── day=01 | ├── hour=00 | └── hour=01 ...
然后你就可以使用了
MSCK REPAIR TABLE `database`.`table`
或者,您可以一个一个地加载分区
ALTER TABLE `database`.`table` ADD PARTITION (day='01', hour='00') LOCATION 's3://some/location/on/s3/01/00'; ALTER TABLE `database`.`table` ADD PARTITION (day='01', hour='01') LOCATION 's3://some/location/on/s3/01/01'; ...
使用 AWS API
您可以使用 AWS SDK,例如boto3
对于 python,它提供了一个易于使用的、面向对象的 API。这里有两个选择:
使用 Athena 客户端。与之前的方法一样,您需要从 AWS 控制台获取表定义语句。但是所有其他步骤都可以使用 Athena 客户端的
start_query_execution
方法以脚本方式完成。网上有很多资源,例如this one使用 AWS Glue 客户端。此方法完全基于 AWS Glue 数据目录中的操作,Athena 在查询执行期间使用该目录。主要思想是创建两个粘合客户端,一个用于源,一个用于目标目录。例如
import boto3 KEY_ID = "__KEY_ID__" SECRET = "__SECRET__" glue_source = boto3.client( 'glue', region_name="ap-south-1", aws_access_key_id=KEY_ID, aws_secret_access_key=SECRET ) glue_destination = boto3.client( 'glue', region_name="us-east-1", aws_access_key_id=KEY_ID, aws_secret_access_key=SECRET ) # Or you can do it with creating sessions glue_source = boto3.session.Session(profile_name="profile_for_ap_south_1").client("glue") glue_destination = boto3.session.Session(profile_name="profile_for_us_east_1").client("glue")
然后您需要使用 get 和 create 类型方法。这还需要解析从粘附客户端获得的响应。
使用 AWS Glue 爬虫
尽管您可以使用 AWS Glue 爬虫来“重新发现”S3 上的数据,但我不推荐这种方法,因为您已经知道数据的结构。
关于amazon-web-services - AWS Quicksight 在另一个区域看不到 Athena DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58318915/