

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在亚马逊 Athena 或亚马逊的 Amazon Redshift 中查询数据 DataZone
<a name="query-athena-with-deep-link-in-project"></a>

在亚马逊中 DataZone，一旦订阅者可以访问目录中的资产，他们就可以使用 Amazon Athena 或 Amazon Redshift 查询编辑器 v2 使用该资产（查询和分析）。您必须是项目所有者或贡献者才能完成此任务。根据项目中启用的蓝图，亚马逊在数据门户项目页面的右侧窗格中 DataZone 提供指向 and/or 亚马逊 Athena Amazon Redshift 查询编辑器 v2 的链接。

1. 导航至 Amazon DataZone 数据门户 URL，然后使用单点登录 (SSO) 或凭证登录 AWS 。如果您是亚马逊 DataZone 管理员，则可以通过 [https://console.aws.amazon.com/datazon](https://console.aws.amazon.com/datazone) e 导航到亚马逊 DataZone 控制台，使用域名创建 AWS 账户 地登录，然后选择**打开**数据门户。

1. 在 Amazon DataZone 数据门户中，选择 “**浏览项目列表**”，然后找到并选择要分析的数据所在的项目。

1. 如果在此项目上启用了数据湖蓝图，则项目主页的右侧面板中将显示指向 Amazon Athena 的链接。

   如果在此项目上启用了数据仓库蓝图，则项目主页的右侧面板中将显示指向查询编辑器的链接。
**注意**  
蓝图是在用于创建项目的环境配置文件中定义的。

**Topics**
+ [使用 Amazon Athena 查询数据](#query-athena-with-deep-link)
+ [使用 Amazon Redshift 查询数据](#query-redshift-with-deep-link)

## 使用 Amazon Athena 查询数据
<a name="query-athena-with-deep-link"></a>

选择 Amazon Athena 链接，使用项目的身份验证凭证在浏览器的新标签页中打开 Amazon Athena 查询编辑器。在查询编辑器中，系统会自动选择您正在处理的 Amazon DataZone 项目作为当前工作组。

在 Amazon Athena 查询编辑器中，编写并运行您的查询。一些常见任务包括：
+ [查询和分析订阅的资产](#query-analyze-subscribed-data)
+ [创建新表](#create-new-tables)
+ [从外部 S3 存储桶中的查询结果（CTAS）创建表](#create-tables-external-s3-bucket)

### 查询和分析订阅的资产
<a name="query-analyze-subscribed-data"></a>

如果 Amazon 未自动授予您项目订阅的资产的访问权限 DataZone，则必须授权您访问基础数据。有关如何授予对这些资产的访问权限的更多信息，请参阅[向经批准的亚马逊非托管资产的订阅授予访问权限 DataZone](grant-access-to-unmanaged-asset.md)。

如果亚马逊[自动授予您项目订阅的资产的访问权限 DataZone，则可以对表运行 SQL 查询并在 Ama](grant-access-to-glue-asset.md) zon Athena 中查看结果。有关在 Amazon Athena 中使用 SQL 的更多信息，请参阅 [SQL reference for Athena](grant-access-to-glue-asset)。

如果在项目主页的右侧面板中选择 Amazon Athena 链接后导航到 Amazon Athena 查询编辑器，则 Amazon Athena 查询编辑器的右上角会显示**项目**下拉列表，并且会自动选择您的项目上下文。

您会在**数据库**下拉列表中看到以下数据库：
+ 发布数据库（`{environmentname}_pub_db`）。该数据库的目的是为您提供一个环境，让您可以在项目背景下生成新数据，然后将这些数据发布到 Amazon DataZone 目录中。项目所有者和贡献者具有此数据库的读写访问权限。项目查看者仅具有此数据库的读访问权限。
+ 订阅数据库（`{environmentname}_sub_db`）。该数据库的目的是与您共享您作为项目成员在 Amazon DataZone 目录中订阅的数据，并使您能够查询这些数据。

### 创建新表
<a name="create-new-tables"></a>

如果您已连接到一个外部 Amazon S3 存储桶，则可以使用 Amazon Athena 查询和分析该存储桶中的资产。在这种情况下，亚马逊 DataZone 无权直接授予对外部 Amazon S3 存储桶中基础数据的访问权限，并且在项目外部创建的外部 Amazon S3 数据不会在 Lake Formation 中自动管理，也无法由亚马逊管理 DataZone。另一种方法是使用 Amazon Athena 中的 `CREATE TABLE` 语句将数据从外部 Amazon S3 存储桶复制到项目的 Amazon S3 存储桶中的新表中。在 Amazon Athena 中运行 `CREATE TABLE` 查询时，会将表注册到 AWS Glue Data Catalog。

要在 Amazon S3 中指定数据的路径，请使用 `LOCATION` 属性，如以下示例中所示：

```
CREATE EXTERNAL TABLE 'test_table'(
...
)
ROW FORMAT ...
STORED AS INPUTFORMAT ...
OUTPUTFORMAT ...
LOCATION 's3://bucketname/folder/'
```

有关更多信息，请参阅 [Amazon S3 中的表位置](https://docs.aws.amazon.com/athena/latest/ug/tables-location-format.html)。

### 从外部 S3 存储桶中的查询结果（CTAS）创建表
<a name="create-tables-external-s3-bucket"></a>

在订阅资产时，只能对底层数据进行只读访问。您可以使用 Amazon Athena 创建表的副本。在 Amazon Athena 中，`A CREATE TABLE AS SELECT (CTAS)` 查询根据另一个查询中的 `SELECT` 语句的结果创建新表。有关 CTAS 语法的信息，请参阅 [CREATE TABLE AS](https://docs.aws.amazon.com/athena/latest/ug/create-table-as.html)。

以下示例通过复制表的所有列来创建表：

```
CREATE TABLE new_table AS
SELECT *
FROM old_table;
```

在同一个示例的下列变化中，您的 `SELECT` 语句还包括 `WHERE` 子句。在这种情况下，查询将只从表中选择满足 `WHERE` 子句的行：

```
CREATE TABLE new_table AS
SELECT *
FROM old_table WHERE condition;
```

以下示例创建运行在其他表的一组列上的新查询：

```
CREATE TABLE new_table AS
SELECT column_1, column_2, ... column_n
FROM old_table;
```

同一个示例的此变化从多个表的特定列创建新表：

```
CREATE TABLE new_table AS
SELECT column_1, column_2, ... column_n
FROM old_table_1, old_table_2, ... old_table_n;
```

这些新创建的表现在已成为您项目 AWS Glue 数据库的一部分，通过将数据作为资产发布到亚马逊目录中，可以让其他人发现并与其他亚马逊 DataZone DataZone 项目共享。

## 使用 Amazon Redshift 查询数据
<a name="query-redshift-with-deep-link"></a>

在 Amazon DataZone 数据门户中，打开使用数据仓库蓝图的环境。在环境页面上的右侧面板中，选择 **Amazon Redshift** 链接。这将打开一个确认对话框，其中包含必要的详细信息，可帮助您在 Amazon Redshift 查询编辑器 v2.0 中与环境的 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组建立连接。在确定建立连接所需的详细信息后，选择**打开 Amazon Redshift** 按钮。这将使用亚马逊环境的临时凭证在浏览器的新选项卡中打开 Amazon Redshift 查询编辑器 v2.0。 DataZone 

在查询编辑器中，根据您的环境使用的是 Amazon Redshift Serverless 工作组还是 Amazon Redshift 集群，执行以下步骤。

对于 Amazon Redshift Serverless 工作组

1. **在查询编辑器中，识别您的亚马逊 DataZone 环境的 Amazon Redshift Serverless 工作组，右键单击该工作组，然后选择创建连接。**

1. 选择**联合用户**以进行身份验证。

1. 提供 Amazon DataZone 环境数据库的名称。

1. 选择**创建连接**。

对于 Amazon Redshift 集群：

1. 在查询编辑器中，识别您的亚马逊 DataZone 环境的 Amazon Redshift 集群，右键单击它并选择**创建连接**。

1. 选择**使用您的 IAM 身份的临时凭证**以进行身份验证。

1. 如果上述身份验证方法不可用，请通过选择左下角的齿轮按钮打开**账户设置**，然后选择**使用 IAM 凭证进行身份验证**并保存。这是一个 one-time-only设置。

1. 提供用于创建连接的 Amazon DataZone 环境数据库的名称。

1. 选择**创建连接**。

现在，您可以开始查询为亚马逊环境配置的 Amazon Redshift 集群或 Amazon Redshift 无服务器工作组中的表和视图。 DataZone

您已订阅的任何 Amazon Redshift 表或视图都会链接到为该环境配置的 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组。您可以订阅表和视图，也可以发布您在环境的集群或数据库中创建的任何新表和视图。

例如，我们来看看以下场景：一个环境链接到一个名为 `redshift-cluster-1` 的 Amazon Redshift 集群以及该集群中名为 `dev` 的数据库。使用 Amazon DataZone 数据门户，您可以查询已添加到您的环境中的表和视图。在数据门户的右侧窗格中的`Analytics tools`部分下，您可以选择此环境的 Amazon Redshift 链接，这将打开查询编辑器。之后，您可以右键单击 `redshift-cluster-1` 集群，并使用**使用您的 IAM 身份的临时凭证**创建连接。建立连接后，您可以在 **dev** 数据库下看到您的环境有权访问的所有表和视图。