运行联合查询 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

运行联合查询

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

查询单个数据源

本节中的示例假设您已经配置并部署了亚马逊雅典娜CloudWatch连接器到你的账户。使用其他连接器时,使用相同的方法进行查询。

要创建使用的 Athena 查询CloudWatch连接器
  1. https://console.aws.amazon.com/athena/ 打开 Athena 控制台。

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

    MyCloudwatchCatalog.database_name.table_name

示例

以下示例使用 AthenaCloudWatch要连接的连接器all_log_streams在里面查看/var/ecommerce-engine/order-processor CloudWatch日志日志组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。

  • 联合视图存储在Amazon 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。请注意,联合数据源使用完全限定名称语法联邦来源名称联邦源数据库联邦来源表

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

另请参阅