项目展示

  • 首页 项目展示 多云数据湖分析与亚马逊 Athena 大数据博客

多云数据湖分析与亚马逊 Athena 大数据博客

2026-01-27 13:45:31

使用 Amazon Athena 进行多云数据湖分析

重点内容

许多组织在多个云存储中运营数据湖,可能是由于业务扩展、并购或不同业务单位对特定云提供商的偏好。因此,需要一个集成查询层以无缝运行跨这些多样化云存储的分析查询,简化数据分析过程。凭借统一的查询接口,可以避免管理多个查询工具的复杂性,实现对数据资产的整体视图。

很多组织在多个云数据存储中运营数据湖,原因多种多样,例如业务扩展、合并或出于特定云服务商的需求。这种情况下,您可能需要一个集成查询层,以无缝地在这些多样化的云存储上运行分析查询,从而简化数据分析过程。通过统一的查询接口,您可以避免管理多个查询工具的复杂性,无论数据资产存放于何处,都能获得全面的数据视图。将分析工作流程整合在一起,减少对大量工具和基础设施管理的需求。

这种整合不仅节省时间和资源,还使团队能够专注于从数据中提取洞察,而不是在不同的查询工具和界面之间反复切换。统一的查询接口通过打破信息孤岛,促进对存储于不同云数据存储中的数据的无缝访问,从而提升决策能力,让利益相关者能够以统一的方式分析来自多个来源的数据,做出更明智的战略决策。

在本篇文章中,我们将深入探讨如何利用 Amazon Athena 连接器来有效查询存储在 Azure Data Lake StorageADLSGen2、Google Cloud StorageGCS和 Amazon 简易存储服务Amazon S3中的数据文件。此外,我们还将探讨如何使用 Athena 工作组和成本分配标签来有效分类和分析与运行分析查询相关的成本。

解决方案概述

假设有一家虚构的公司叫 Oktank,它在 Amazon S3、ADLS 和 GCS 中管理其数据湖。Oktank 希望能够查询任何云数据存储,并在不需要将数据传输到 S3 数据湖的情况下,运行联接和汇总等分析查询。同时,Oktank 还希望能够识别和分析与运行分析查询相关的成本。为此,Oktank 憧憬着一个通过 Athena 实现的统一数据查询层。

以下图示展示了高层次的解决方案架构。

用户通过连接特定的 Athena 工作组 来运行他们的查询。Athena 使用连接器在多种数据源之间进行查询联邦化。在这种情况下,我们使用 Amazon Athena Azure Synapse 连接器 从 Synapse 查询 ADLS Gen2 数据,使用 Amazon Athena GCS 连接器 查询 GCS 数据。当在使用连接器的联邦数据源上运行查询时,Athena 会调用多个 AWS Lambda 函数并行读取数据源以优化性能。有关更多详细信息,请参阅 使用 Amazon Athena 联邦查询。 AWS Glue 数据目录持有 Amazon S3 和 GCS 数据的元数据。

接下来的章节将展示如何构建此架构。

前提条件

在配置 AWS 上的资源之前,您需要在 Azure 和 GCP 设置必要的基础设施。为了本篇文章的详细步骤和指南超出了范围,请参考各自的文档。在本节中,我们提供一些创建所需资源的基本步骤。

您可以下载示例数据文件 custfeedbackv0csv。

一元机场com软件

配置 Azure 数据集

要在 Azure 上设置示例数据集,登录 Azure 门户,并将文件上传到 ADLS Gen2。下面的截屏显示了在 ADLS Gen2 的特定存储帐户中的容器 blogcontainer 下的文件。

在 Azure 中设置一个 Synapse 工作区,并在 Synapse 中创建一个外部表,指向相关位置。以下命令为在 Synapse 工作区运行所需操作的基础指南。有关附加详细信息,请参考对应的 Synapse 文档。

创建数据库

CREATE DATABASE azureathenablogdb

创建文件格式

CREATE EXTERNAL FILE FORMAT [SynapseDelimitedTextFormat]WITH ( FORMATTYPE = DELIMITEDTEXT FORMATOPTIONS (FIELDTERMINATOR = USETYPEDEFAULT = FALSEFIRSTROW = 2))

创建密钥

CREATE MASTER KEY ENCRYPTION BY PASSWORD =

创建数据库凭证

CREATE DATABASE SCOPED CREDENTIAL dbscopedCredsWITH IDENTITY = Managed Identity

创建数据源

CREATE EXTERNAL DATA SOURCE athenablogdatasourceWITH ( LOCATION = abfss//blogcontainer@xxxxxxud1dfscorewindowsnet/CREDENTIAL = dbscopedCreds)

创建外部表

CREATE EXTERNAL TABLE dbocustomerfeedbacksazure ([datakey] nvarchar(4000)[dataloaddate] nvarchar(4000)[datalocation] nvarchar(4000)[productid] nvarchar(4000)[customeremail] nvarchar(4000)[customername] nvarchar(4000)[comment1] nvarchar(4000)[comment2] nvarchar(4000))WITH (LOCATION = custfeedbackv0csvDATASOURCE = athenablogdatasourceFILEFORMAT = [SynapseDelimitedTextFormat])

创建用户

CREATE LOGIN bloguser1 WITH PASSWORD = CREATE USER bloguser1 FROM LOGIN bloguser1

授予选择 schema 的权限

GRANT SELECT ON SCHEMAdbo TO [bloguser1]

请记下用户名、密码、数据库名称和您所使用的无服务器或专用 SQL 端点这些将在后续步骤中需要。

这完成了在 Azure 上设置示例数据集的步骤。

配置 GCS 数据集

要在 GCS 上设置示例数据集,请将文件上传到 GCS 存储桶。

创建一个 GCP 服务帐户并授予对存储桶的访问权限。

此外,为服务帐户创建一个 JSON 密钥。后续步骤需要这个密钥的内容。

这完成了在 GCP 上设置我们的示例数据集。

部署 AWS 基础设施

您现在可以运行提供的 AWS CloudFormation 堆栈 创建解决方案资源。确定您希望创建资源的 AWS 区域,并在整个设置和验证过程中确保使用相同的区域。

请参考以下表格提供必要的参数。您可以将其他参数保留为默认值,或根据您的需求进行修改。

参数名称期望值AzureSynapseUserName您为 Synapse 数据库创建的用户名。AzureSynapsePwdSynapse 数据库用户的密码。AzureSynapseURLSynapse JDBC URL,格式如下:jdbcsqlserver//ltsqlendpointgtdatabaseName=ltdatabasenamegt 例如:jdbcsqlserver//xxxxgondemandsqlazuresynapsenetdatabaseName=azureathenablogdbGCSSecretKey来自 GCP 的秘钥文件内容。UserAzureADLSOnlyUserPasswordAzure 专用用户的 AWS 管理控制台密码。此用户仅可以查询来自 ADLS 的数据。UserGCSOnlyUserPasswordGCS 专用用户的 AWS 管理控制台密码。此用户仅可以查询来自 GCP GCS 的数据。UserMultiCloudUserPassword多云用户的 AWS 管理控制台密码。此用户可以查询来自任何云存储的数据。

该堆栈将配置 VPC、子网、S3 存储桶、Athena 工作组和 AWS Glue 数据库及表。它创建了两个在 AWS Secrets Manager 中存储 GCS 密钥和 Synapse 用户名及密码的秘密。您将在创建 Athena 连接器时使用这些秘密。

此外,该堆栈还创建了三个 AWS 身份与访问管理IAM用户,并授权对此些 Athena 工作组、Athena 数据源和 Lambda 函数的权限:AzureADLSUser 可以在 ADLS 和 Amazon S3 上运行查询,GCPGCSUser 可以查询 GCS 和 Amazon S3,MultiCloudUser 可以查询 Amazon S3、Azure ADLS Gen2 和 GCS 数据源。该堆栈不创建 Athena 数据源和 Lambda 函数。您将在后续步骤中创建这些。

该堆栈还为 Athena 工作组、Secrets Manager 中的秘密和 S3 存储桶附上了 成本分配标签。您将在后续步骤中使用这些标签进行成本分析。

当堆栈部署完成时,请注意 CloudFormation 堆栈输出的值,这些值将在接下来的步骤中使用。

将 数据文件 上传到 CloudFormation 堆栈创建的 S3 存储桶。您可以从堆栈输出中获取名为 S3SourceBucket 的值。这作为本篇文章的 S3 数据湖数据。

现在您可以创建连接器。

创建 Athena Synapse 连接器

要设置 Azure Synapse 连接器,请完成以下步骤:

在 Lambda 控制台 创建一个新应用。在应用设置部分,输入 CloudFormation 堆栈输出中相应键的值,如下表所示。属性名称CloudFormation 输出键SecretNamePrefixAzureSecretNameDefaultConnectionStringAzureSynapseConnectorJDBCURLLambdaFunctionNameAzureADLSLambdaFunctionNameSecurityGroupIdsSecurityGroupIdSpillBucketAthenaLocationAzureSubnetIdsPrivateSubnetId

选择确认复选框并选择部署。

在继续下一步之前,等待应用部署完成。

创建 Athena GCS 连接器

要创建 Athena GCS 连接器,请完成以下步骤:

在 Lambda 控制台 创建一个新应用。在应用设置部分,输入 CloudFormation 堆栈输出中相应键的值,如下表所示。属性名称CloudFormation 输出键SpillBucketAthenaLocationGCPGCSSecretNameGCSSecretNameLambdaFunctionNameGCSLambdaFunctionName选择确认复选框并选择部署。

对于 GCS 连接器,有一些后续部署步骤需要为 GCS 数据文件创建 AWS Glue 数据库和表。在本篇文章中,您之前部署的 CloudFormation 堆栈已创建了这些资源,因此无需再次创建。该堆栈创建了一个名为 oktankmulticloudanalyticsgcp 的 AWS Glue 数据库,以及在该数据库下名为 customerfeedbacks 的表,具备所需配置。

登录 Lambda 控制台以验证 Lambda 函数是否已创建。

接下来,您需要创建与这些连接器相应的 Athena 数据源。

创建 Azure 数据源

完成以下步骤以创建 Azure 数据源:

在 Athena 控制台 创建一个新数据源。在数据源中,选择Microsoft Azure Synapse。选择下一步。

对于数据源名称,输入 CloudFormation 堆栈输出中 AthenaFederatedDataSourceNameForAzure 键的值。在连接详情部分,选择您为 Azure 创建的 Lambda 函数。

选择下一步,然后选择创建数据源。

您应该能够看到 Azure 外部数据库的相关架构。

创建 GCS 数据源

完成以下步骤以创建 GCS 数据源:

在 Athena 控制台 创建一个新数据源。在数据源中,选择Google Cloud Storage。选择下一步。

对于数据源名称,输入 CloudFormation 堆栈输出中 AthenaFederatedDataSourceNameForGCS 键的值。在连接详情部分,选择您为 GCS 创建的 Lambda 函数。

选择下一步,然后选择创建数据源。

这完成了部署。您现在可以从 Athena 运行多云查询。

查询联邦数据源

本节将演示如何分别以 ADLS 用户、GCS 用户和多云用户身份查询数据源。

以 ADLS 用户身份运行查询

ADLS 用户可以在 ADLS Gen2 和 Amazon S3 数据上运行多云查询。完成以下步骤:

多云数据湖分析与亚马逊 Athena 大数据博客从 CloudFormation 堆栈输出中