

# 运行联合查询
<a name="running-federated-queries"></a>

配置一个或多个数据连接器并将其部署到您的账户之后，您可以在 Athena 查询中进行使用。

## 查询单个数据来源
<a name="running-federated-queries-single-data-source"></a>

本节中的示例假定您已配置 [Amazon Athena CloudWatch 连接器](connectors-cloudwatch.md) 并将其部署到您的账户。使用其他连接器时，使用相同的方法进行查询。

**创建使用 CloudWatch 连接器的 Athena 查询**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 在 Athena 查询编辑器中，创建在 `FROM` 子句中使用以下语法的 SQL 查询。

   ```
   MyCloudwatchCatalog.database_name.table_name       
   ```

### 示例
<a name="running-federated-queries-single-data-source-examples"></a>

以下示例使用 Athena CloudWatch 连接器连接到 `/var/ecommerce-engine/order-processor` CloudWatch Logs [日志组](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)中的 `all_log_streams` 视图。`all_log_streams` 视图是日志组中所有日志流的视图。示例查询将返回的行数限制为 100。

```
SELECT * 
FROM "MyCloudwatchCatalog"."/var/ecommerce-engine/order-processor".all_log_streams 
LIMIT 100;
```

以下示例解析与上一示例相同的视图中的信息。该示例提取顺序 ID 和日志级别，并筛选出所有 `INFO` 级别的消息。

```
SELECT 
    log_stream as ec2_instance, 
    Regexp_extract(message '.*orderId=(\d+) .*', 1) AS orderId, 
    message AS order_processor_log, 
    Regexp_extract(message, '(.*):.*', 1) AS log_level 
FROM MyCloudwatchCatalog."/var/ecommerce-engine/order-processor".all_log_streams 
WHERE Regexp_extract(message, '(.*):.*', 1) != 'INFO'
```

## 查询多个数据来源
<a name="running-federated-queries-multiple-sources"></a>

举一个更复杂的例子，假设一家电子商务公司使用以下数据来源存储与客户购买相关的数据：
+ [Amazon RDS for MySQL](https://aws.amazon.com/rds/mysql/)，用于存储产品目录数据
+ [Amazon DocumentDB](https://aws.amazon.com/documentdb/)，用于存储客户账户数据，例如电子邮件和配送地址
+ [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)，用于存储订单发货和追踪数据

假设该电子商务应用程序的数据分析师了解到，某些地区的送货时间受到当地天气状况的影响。分析师希望了解延迟送货的订单数量、受影响客户所在位置以及受影响最大的产品。分析师没有单独调查信息来源，而是使用 Athena 将数据联接到单个联合查询中。

**Example**  

```
SELECT 
     t2.product_name AS product, 
     t2.product_category AS category, 
     t3.customer_region AS region, 
     count(t1.order_id) AS impacted_orders 
FROM my_dynamodb.default.orders t1 
JOIN my_mysql.products.catalog t2 ON t1.product_id = t2.product_id 
JOIN my_documentdb.default.customers t3 ON t1.customer_id = t3.customer_id 
WHERE 
     t1.order_status = 'PENDING'
     AND t1.order_date between '2022-01-01' AND '2022-01-05' 
GROUP BY 1, 2, 3 
ORDER BY 4 DESC
```

## 查询联合视图
<a name="running-federated-queries-federated-views"></a>

查询联合源时，可以使用视图对底层数据来源进行模糊处理，或者隐藏来自查询数据的其他分析师的复杂联接。

### 注意事项和限制
<a name="running-federated-queries-federated-views-considerations"></a>
+ 联合视图需要 Athena 引擎版本 3。
+ 联合视图存储在 AWS Glue 中，而不是底层数据来源中。
+ [注册为 Glue 数据目录](register-connection-as-gdc.md)的数据来源不支持联合视图。
+ 使用联合目录创建的视图必须使用完全限定名称语法，如以下示例所示：

  ```
  "ddbcatalog"."default"."customers"
  ```
+ 在联合源上运行查询的用户必须有权查询联合源。
+ 联合视图需要 `athena:GetDataCatalog` 权限。有关更多信息，请参阅 [允许访问 Athena 联合查询：示例策略](federated-query-iam-access.md)。

### 示例
<a name="running-federated-queries-federated-views-examples"></a>

以下示例针对存储在联合数据来源中的数据创建了一个名为 `customers` 的视图。

**Example**  

```
CREATE VIEW customers AS
SELECT *
FROM my_federated_source.default.table
```

以下示例查询显示了一个引用 `customers` 视图而不是底层联合数据来源的查询。

**Example**  

```
SELECT id, SUM(order_amount)
FROM customers
GROUP by 1
ORDER by 2 DESC
LIMIT 50
```

以下示例创建了一个名为 `order_summary` 的视图，该视图合并了来自联合数据来源和 Amazon S3 数据来源的数据。在已在 Athena 中创建的联合源中，视图使用 `person` 和 `profile` 表。在 Amazon S3 中，视图使用 `purchase` 和 `payment` 表。为了引用 Amazon S3，语句使用了关键字 `awsdatacatalog`。请注意，联合数据来源使用完全限定名称语法 *federated\$1source\$1name*.*federated\$1source\$1database*.*federated\$1source\$1table*。

**Example**  

```
CREATE VIEW default.order_summary AS
SELECT *
FROM federated_source_name.federated_source_database."person" p
    JOIN federated_source_name.federated_source_database."profile" pr ON pr.id = p.id
    JOIN awsdatacatalog.default.purchase i ON p.id = i.id
    JOIN awsdatacatalog.default.payment pay ON pay.id = p.id
```

### 其他资源
<a name="running-federated-queries-federated-views-additional-resources"></a>
+ 有关与其原始源分离且适用于多用户模型中的按需分析的联合视图示例，请参阅 *AWS 大数据博客*中的[使用 Amazon Athena 和联合视图扩展数据网格](https://aws.amazon.com/blogs/big-data/extend-your-data-mesh-with-amazon-athena-and-federated-views/)。
+ 有关在 Athena 中使用视图的更多信息，请参阅 [使用视图](views.md)。