在这篇文章中,我们将使用SQL Server在Amazon Athena的帮助下查询驻留在Amazon S3桶中的数据。SQL Server是微软开发的最流行的关系型数据库管理系统之一。 SQL Server可以安装在企业内部,也可以安装在Azure或AWS等流行的云服务上。为了这个演示的目的,我们将使用已经安装在企业内部的SQL Server。另外,作为本教程的前提条件,我们需要有一个有效的AWS账户和一些关于Amazon Athena的知识。
什么是Amazon Athena
亚马逊Athena是亚马逊提供的一种交互式查询服务,可用于连接到S3并运行ANSI SQL查询。想象一下,你有一个CSV文件,其中包含表格式的数据。如果不直接导入数据库服务器,这个CSV文件就不能被任何SQL引擎读取。在这种情况下,AWS Athena提供了一种服务,可以用来首先创建CSV文件的模式,然后使用一般的ANSI SQL脚本来查询存储在这些CSV文件中的数据。在有多个CSV文件的情况下,这也是可行的。在这种情况下,唯一的条件是所有的CSV文件都保持类似的列结构。
现在让我们去AWS控制台,上传一个可以被Athena查询的小型CSV文件。导航到console.aws.amazon.com,搜索S3。创建一个你选择的S3桶,然后在其下创建一个目录。在这个目录下,你可以上传你的CSV文件,如下所示。
图1 - 上传CSV文件
一旦CSV文件被上传,下一步就是转移到Athena服务,设置模式和查询服务。搜索Athena服务,然后创建一个可以从S3桶中读取CSV文件的环境。你可以关注这篇文章,开始使用亚马逊Athena和S3,我已经一步步解释了如何在Athena中创建一个实例并从S3桶中查询数据。一旦你创建了一个实例,你就可以自由地使用标准的SQL查询来查询数据,如下所示。
图2 - 创建AWS Athena实例并进行查询
到目前为止,设置AWS Athena服务和S3中的CSV文件的部分已经结束。在下一节中,我们将研究如何将SQL Server连接到这个Athena服务并从SQL Server实例中运行类似的查询。
另外,为了从SQL Server查询Athena服务,我们需要从AWS控制台生成访问密钥和秘密密钥。这可以通过导航到控制台的IAM服务,然后从 "用户 "选项卡生成安全凭证来完成。如果你使用的是由管理员处理的AWS账户,你需要从管理员那里获得凭证。
为Amazon Athena设置ODBC驱动程序
现在我们的Athena服务已经启动并运行,我们可以设置我们的SQL Server实例并配置它来查询Athena。为此,我们需要首先在SQL Server中创建一个链接服务器,然后我们将使用OPENQUERY服务来查询存储在S3桶中的数据。
为了建立链接服务器,我们首先需要下载并安装SQL Server的连接器驱动程序,以连接到AWS Athena服务。这可以很容易地从Athena的官方网页上下载。导航到docs.aws.amazon.com/athena/late…,然后为你的电脑选择一个合适的版本。在我的例子中,我将继续使用ODBC 1.1.12 for Windows 64位版本。下载设置并安装在你的机器上。

图3 - 安装AWS Athena ODBC连接器
像往常一样进行安装,一旦完成,你就可以设置ODBC连接器了。从开始菜单中搜索ODBC驱动程序,ODBC数据源管理员(64位)将在屏幕上打开。对于系统DSN,Simba Athena连接器将已经存在。然而,在这种情况下,我们需要为用户安装ODBC驱动程序。在用户DSN下,点击添加,新的数据源对话框将打开。

图4 - 使用ODBC驱动创建新的数据源
正如你在上图中看到的,我们需要选择Simba Athena ODBC驱动程序,并点击完成开始。为了配置ODBC驱动程序,将需要以下信息,这些信息将允许ODBC连接器与在指定AWS账户下运行的Athena服务建立连接。

图5 - Simba Athena ODBC驱动程序设置
你可以使用以下细节来设置ODBC驱动程序。
- 数据源名称 - 这是要创建的ODBC驱动程序的名称。我们将在下面的章节中提到这一点
- 描述 - 这是一个可选字段。你可以添加一个你选择的描述来指代ODBC驱动程序。
- AWS区域 - 这指定了运行Athena服务的区域
- 目录 - Athena服务的数据库服务器目录
- Schema - Athena服务中的数据库名称
- 工作组 - 工作组的名称
- S3输出位置 - 这是S3中的一个目录,Athena可以在其中存储其输出结果
一旦提供了所有这些信息,下一步就是验证驱动程序并连接到AWS账户。 点击验证选项并提供之前获得的AWS凭证。

图6 - 用AWS认证ODBC连接器
单击 "确定",如果成功,则测试连接。

图7 - 测试连接 ODBC驱动程序
正如你在上图中所看到的,与在指定AWS账户下运行的Athena服务已经成功建立了连接。如果在连接服务时有任何问题,那么你可以尝试重新生成安全凭证,并用新的凭证重新尝试连接。
在SQL Server Management Studio中设置链接服务器
一旦ODBC驱动程序设置正确,下一步就是在SQL Server中创建一个链接服务器,该服务器可以使用ODBC驱动程序来连接到Amazon Athena服务。为了创建一个链接服务器,你可以在SQL Server Management Studio中运行以下脚本。下面的脚本将添加链接服务器,同时配置其使用。

图8 - 在SQL Server Management Studio中设置链接服务器
你可以在这里找到这个脚本。
一旦你运行该脚本,你就可以刷新左侧面板上的数据库连接,并展开链接服务器标签,找到已经创建的AWS_Athena服务器。

图9 - 创建的链接服务器
右键点击链接服务器,点击测试连接,测试驱动程序是否可以连接到Amazon Athena服务。

图10 - 连接成功
一旦与链接服务器的连接成功,下一步就是展开链接服务器下的对象,浏览最初在Amazon Athena中创建的表。

图11 - 浏览链接服务器
另外,你也可以现在开始从SQL Server Management Studio查询该服务。

图12 - 从SQL Server查询Athena服务
总结
在这篇文章中,我们讨论了什么是Amazon Athena,以及如何将SQL Server数据库连接到Athena并从存储在AWS的S3桶中提取数据。在处理不断增长的数据时,这种将SQL Server与S3中的数据进行交互的方式是一个很大的优势。亚马逊S3可以很容易地作为一个数据湖,可以以结构化或半结构化的形式存储数据。这些数据可以使用Amazon Athena进行查询,而Amazon Athena又可以链接到SQL Server实例。这使得SQL Server的用户可以通过ODBC驱动简单地连接到Amazon Athena,以获取存储在S3桶中的数据的结果。
Aveek是一名经验丰富的数据和分析工程师,目前在爱尔兰都柏林工作。他的主要技术兴趣领域包括SQL Server、SSIS/ETL、SSAS、Python、Apache Spark、Kafka等大数据工具以及AWS/Amazon和Azure等云技术。
他是一个多产的作者,在各种技术博客上发表了100多篇文章,包括他自己的博客,并经常在不同的技术论坛上发表文章。
在闲暇时间,他喜欢业余摄影,主要是街头图像和静物。在Instagram上可以看到他的一些作品的缩影。你也可以在LinkedIn上找到他

