数据分析在Uber的决策,驾驶和塑造公司的各个方面,从改善我们的产品到生成为我们的业务提供信息的见解而起着至关重要的作用。为了确保及时,准确的分析,需要易于搜索为这些分析的汇总,匿名数据。
由于我们业务的规模和复杂性,数据通常是异质的,并存储在不同的数据商店中,包括mysql,,,,普雷斯托,,,,图式, 和Aresdb。为了解决这些差异,我们使用编写的数据源连接器统一了这些数据存储去并由语言的内置支持数据库软件包,提供统一的查询必要数据的方式。
在Uber ATG但是,我们正在遵循Uber的现有策略,并转移到利用Amazon AWS的某些服务的混合云解决方案,该解决方案可提高成本效率,性能和可维护性。当我们缩放该解决方案时,当我们需要生成报告或运行机器学习任务时,很难查询数据。尽管Uber的内部商业智能工具可以轻松地在系统之间共享数据,但我们机器学习和数据科学平台,他们不支持AWS云数据查询。
我们决定使用交互式查询服务Amazon Athena来填补这一空白,使我们现有的商业智能工具可以查询AWS云数据。为了促进Uber的商业智能工具与AWS Athena之间的沟通,我们建立了雅典娜,Amazon Athena的数据库驱动程序,支持GO内置数据库/SQL框架。
最近,我们开了雅典娜,允许社区中的其他人从我们的解决方案中受益于自己的大规模数据分析需求。我们希望您能发现Athenadriver有用,并会考虑自己的功能和建议,以便我们可以继续为全球用户增强该项目。
Athenadriver如何运作
亚马逊雅典娜(Amazon Athena)可以使用标准SQL在S3,AWS对象存储服务中分析数据。普雷斯托,雅典娜的分布式查询引擎,处理SQL解析,工作量分配和执行。与其他传统关系数据库管理系统(RDBMS)(如MySQL和PostgreSQL)不同,Athena旨在快速查询大型数据存储。
为了支持Uber的商业智能工具(其中许多是用GO编写的)和目前不支持与GO集成的服务的雅典娜(Athena),我们建立了Athenadriver,这是一种用作桥梁的开源驱动程序。利用Athenadriver,用户可以通过Uber现有的商业智能前端访问Athena,并利用与MySQL,ARESDB和其他数据库的现有驱动程序相同的接口。
重要的是,Athenadriver允许我们的团队在数据库之间保持统一的环境。用户只需选择S3云数据作为查询目标数据存储类型,并且在其选择的商业智能仪表板上可视化结果。
在这个外观熟悉的外壳之下,雅典娜·阿纳德里弗(Athenadriver)称雅典娜的Go SDK与实际的雅典娜服务互动,发送SQL请求并提取查询结果集。Athenadriver查询包括三个不同的步骤:
-
- 客户端将SQL查询从GO数据源连接器发送到雅典娜列弗,该查询将此请求转移到雅典娜。在此阶段,雅典娜仅收到查询请求,并将任务添加到其执行队列中。雅典娜(Athena)将任务分配为一个唯一的查询ID字符串,该字符串立即返回到雅典娜(Athenadriver)。
- Athenadriver使用此查询ID字符串定期请求SQL查询执行任务的状态,同时它位于Athena的队列中。如果任务仍在队列中,则此步骤重复。
- 当状态表明已成功执行SQL查询时,Athenadriver发送了第二个SQL查询来提取初始查询的结果。因为我们正在使用大数据,所以查询结果有时是如此之大,以至于一次返回它们可能会阻止网络或用尽过多的内存。在这些情况下,Athenadriver发送多个结果查询以按页面获取数据。
图2,下面显示了雅典娜·查询的生命周期中的所有三个步骤。Athena使用Presto查询S3源数据,然后将结果存储在另一个S3结果集合中。
如图2所示,查询雅典娜实际上是一个非常复杂的工作流程。在像MySQL或PostgreSQL这样的普通GO数据库驱动程序中,查询仅在一步之内完成,并且有一个子问题,但是在雅典娜的情况下,此过程采取了三个步骤,并且在至少雅典娜服务的三个子征服。Athenadriver简化了此查询过程,从而提高了工程团队的生产率。
Athenadriver增强并扩展了基本的Athena GO SDK,继承了GO内置数据库/SQL框架的基本功能集,并解决了Athena GO SDK SDK的一些限制。此外,它还包括高级功能,例如支持多个AWS身份验证方法,Athena Workgroup和标记创建以及仅阅读模式。
用工作组和标签查询
Athenadriver完全支持雅典娜的工作组和标签,可用于诸如成本跟踪,用户管理和查询历史管理等功能。尽管这些功能不在标准GO数据库/SQL框架的范围之内,但Athenadriver允许用户在现有的商业智能工具中利用这两个功能。Athenadriver使用一种新格式数据源名称(DSN)确定唯一的数据库。标准DSN(大多数数据库使用)具有以下格式:
我们为雅典娜DSN发明的新格式看起来像这样:
s3://
这database_properties_key_value_pairs包括凭据,工作组,标签,会话和驱动程序配置。然后,Athenadriver将所有这些元素封装到单个配置对象中,这是存储重复使用参数的一种手段,并使用它来调用DSN字符串。
然后,我们设置配置对象的属性,将其序列化到Athena DSN字符串,然后将其传递到GO数据库/SQL API。Athenadriver对DSN字符串的应对配置对象进行了启用,从而使其可以接收相关信息(包括工作组和标签)。有了这些信息,Athendriver可以调用Athena GO SDK API,以从服务器端从雅典娜获得现有的工作组和标签。它还可以在雅典娜的服务器端远程创建工作组和标签。
在Uber,我们使用Athenadriver自动化工作组和标签创建以及跟踪成本。由于亚马逊将雅典娜作为每笔收费服务,因此工作组和标签可以帮助我们提前微调查询,从而防止了不必要的大量查询。Athenadriver还可以帮助我们跟踪支出。当有人运行过度的问题查询时,我们的成本效率系统可以查明用户并通知它们。
确保使用仅阅读模式的数据一致性
Athenadriver还支持仅阅读模式,允许仅阅读模式允许某些用户检索其ATHENA数据库中的信息,但不能从其ATHENA数据库中取代信息。当系统管理员打开此功能时,对数据库的任何写作和修改都会引起错误,从而防止意外数据更改。
雅典娜通常用于分析查询,还允许用户修改和创建数据库。这种对数据库操作的写作不会在原始S3数据源中创建新文件。相反,它在输出存储桶中创建中间文件。
尽管可以在S3存储措施策略中禁用写入访问权限,但Athenadriver的仅阅读模式允许数据库管理员直接根据客户端的客户端运行基于客户端信息的数据库写入许可。此功能允许数据库管理员创建具有不同访问级别的本地用户组。
作为Athenadriver仅阅读模式的价值的一个例子,queryathena()下面的功能接受一些用户作为输入。
如果一些用户是数据科学家(如第5行所示),然后他们只能检索信息,因为启用了仅阅读模式。如果一些用户是数据库管理员(如第7行所示),然后禁用了仅读取模式,并且可以自由修改数据库。
向前驾驶
以上仅涵盖了使Athenadriver有用的众多功能中的三个,但是如前所述,Athenadriver还扩展了GO数据库/SQL框架,并解决了许多Amazon Athena GO SDK的限制。Athenadriver可以通过封装查询和访问复杂性并无缝处理各种边缘案例,从而极大地简化雅典娜的查询代码,以便工程师可以安全地替换数百条Athena行,使用少于十行代码的Athenadriver代码。
Athenadriver甚至支持一些无证件的雅典娜功能,例如其他数据类型。我们与我们的伴侣实用工具一起开放了雅典娜雅典娜2020年2月,帮助开发人员在自己的组织中处理类似问题。当我们开始整合Athena和Uber的商业智能工具时,我们意识到与GO的标准图书馆兼容的Athena Driver不仅很重要,而且还必需,而且我们找不到满足我们需求的一种。因此,我们想象许多将基于GO的服务与AWS结合的团队会发现Athenadriver有用。
自开放采购雅典娜(Athenadriver)以来,该项目已被克隆了数万次,并且已经帮助众多开发商和用户实现了雅典娜的全部力量。我们期待着继续维护该项目,解决用户问题的发生,并随着GO和Athena的进化而更新雅典娜。
我们还考虑开放采购更多类似于雅典娜,以及其他语言的驱动程序,因此,我们欢迎反馈和贡献Athenadriver的GitHub存储库。我们期待与您合作!
本文的标题图像包括Go Gopher徽标,是由Rene French创建的,并获得了许可创意共享归因3.0。






