執行聯合查詢 - Amazon Athena

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

執行聯合查詢

設定一或多個資料連接器並部署到您的帳戶之後,您就可以在 Athena 查詢中使用這些資料連接器。

查詢單一資料來源

本節中的範例假設您已設定 Amazon Athena CloudWatch 連 並將其部署到您的帳戶。使用其他連接器時,請使用相同的方法進行查詢。

若要建立使用 CloudWatch 連接器的 Athena 查詢
  1. 前往 https://console.aws.amazon.com/athena/ 開啟 Athena 主控台。

  2. 在 Athena 查詢編輯器中,建立在 FROM 子句中使用下列語法的 SQL 查詢。

    MyCloudwatchCatalog.database_name.table_name

範例

下列範例使用 Athena 連 CloudWatch 接器來連線至記/var/ecommerce-engine/order-processor CloudWatch 錄日誌群組中的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'

查詢多個資料來源

舉一個更複雜的範例,假設一家電子商務公司使用以下資料來源來儲存與客戶購買相關的資料:

假設此電子商務應用程式的資料分析師了解到,某些區域的運送時間受到當地天氣狀況的影響。分析師想知道有多少訂單已延誤,受影響客戶所在的位置,以及哪些產品受影響最大。分析師使用 Athena 在單一聯合查詢中將資料聯結起來,而不是個別調查資訊來源。

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

查詢聯合檢視

查詢聯合來源時,您可以使用檢視來混淆基礎資料來源,或隱藏來自其他查詢資料分析師的複雜聯結。

考量與限制

  • 聯合檢視需要 Athena 引擎版本 3。

  • 聯合檢視會儲存在中 AWS Glue,而非與基礎資料來源一起儲存。

  • 使用聯合目錄建立的檢視必須使用完全合格的名稱語法,如下列範例所示:

    "ddbcatalog"."default"."customers"
  • 在聯合來源上執行查詢的使用者,必須擁有查詢聯合來源的許可。

  • 聯合檢視需要 athena:GetDataCatalog 許可。如需詳細資訊,請參閱 允許 Athena 聯合查詢的 IAM 許可政策範例

範例

以下範例為儲存在聯合資料來源中的資料建立一個名為 customers 的檢視。

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

以下範例顯示一個查詢,其參考了 customers 檢視而非基礎聯合資料來源。

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

以下範例建立一個名為 order_summary 的檢視,該檢視結合了來自聯合資料來源和 Amazon S3 資料來源的資料。從已在 Athena 建立的聯合來源中,檢視會使用 personprofile 資料表。從 Amazon S3,檢視使用 purchasepayment 資料表。要參閱 Amazon S3,陳述式需使用關鍵字 awsdatacatalog。請注意,聯合資料來源會使用完整名稱語法 federated_source_name.federated_source_database.federated_source_table

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

其他資源