

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 執行聯合查詢
<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 Data Catalog](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)。