gpt4 book ai didi

amazon-web-services - AWS Quicksight 在另一个区域看不到 Athena DB

转载 作者:行者123 更新时间:2023-12-05 03:57:55 25 4
gpt4 key购买 nike

我的 Athena 数据库位于 ap-south-1 区域,而 AWS QuickSight 不存在于该区域。

在这种情况下,如何将 QuickSightAthena 连接?

最佳答案

您需要做的就是将表定义从一个区域复制到另一个区域。有几种方法可以做到这一点

使用 AWS 控制台

这种方法是最简单的方法,不需要额外的设置,因为一切都基于 Athena DDL statements .

  1. 获取表定义
    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')
  2. 更改到所需区域
  3. 在要存储表定义的位置创建数据库,或使用默认数据库。
  4. 执行 SHOW CREATE TABLE 生成的语句。请注意,您可能需要根据上一步更改数据库名称
  5. 如果您的表是分区的,那么您需要加载所有分区。如果 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。这里有两个选择:

  1. 使用 Athena 客户端。与之前的方法一样,您需要从 AWS 控制台获取表定义语句。但是所有其他步骤都可以使用 Athena 客户端的 start_query_execution 方法以脚本方式完成。网上有很多资源,例如this one

  2. 使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com