本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
运行联合查询
配置一个或多个数据连接器并将其部署到您的账户之后,您可以在 Athena 查询中进行使用。
查询单个数据源
本节中的示例假设您已经配置并部署了亚马逊雅典娜CloudWatch连接器到你的账户。使用其他连接器时,使用相同的方法进行查询。
要创建使用的 Athena 查询CloudWatch连接器
从 https://console.aws.amazon.com/athena/
打开 Athena 控制台。 -
在 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'
查询多个数据源
举一个更复杂的例子,假设一家电子商务公司使用以下数据源来存储与客户购买相关的数据:
-
适用于MySQL的亚马逊
存储产品目录数据 -
亚马逊文档数据库
存储客户账户数据,例如电子邮件和送货地址 -
亚马逊 DynamoDB
存储订单发货和追踪数据
想象一下,这个电子商务应用程序的数据分析师得知某些地区的运输时间受到了当地天气条件的影响。分析师想知道有多少订单被延迟,受影响的客户在哪里,哪些产品受到的影响最大。分析师没有单独调查信息来源,而是使用 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 中创建的联合源中,视图使用person
和profile
桌子。在 Amazon S3 中,视图使用purchase
和payment
桌子。为了提及 Amazon S3,该声明使用了关键字awsdatacatalog
。请注意,联合数据源使用完全限定名称语法联邦来源名称
。联邦源数据库
。联邦来源表
。
CREATE VIEW default.order_summary AS SELECT * FROM
federated_source_name
.federated_source_database
."person" p JOINfederated_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
另请参阅
-
有关与原始源解耦且可在多用户模型中进行按需分析的联合视图的示例,请参见使用亚马逊 Athena 和联合视图扩展您的数据网格
在Amazon大数据博客。 -
有关在 Athena 中使用视图的更多信息,请参见使用视图。