1.3 Trino使用场景
Trino灵活强大的特性使你可以自行决定如何使用它以获得最佳收益。你可以从仅用它解决一个特定的小问题开始,实际上,大部分Trino用户也是这样开始的。
一旦你或者你所在组织中的其他Trino用户熟悉了这些好处和特性,将会发现新的应用场景。口口相传,很快你就会发现通过访问各种数据源,Trino可以满足无数的需求。
在本节中,我们将讨论几个使用场景。记住,你可以将Trino应用到所有场景。此外,仅使用Trino解决某个特定问题也完全没有问题,只要准备好爱上Trino并在之后频繁使用它即可。
1.3.1 单一的SQL分析访问点
RDBMS和SQL已经出现了很长时间且被证明是非常有用的。没有它们,任何组织都无法运作。实际上,很多公司会运行多个系统。Oracle Database和IBM DB2这样的大型商业数据库可能支撑着你的企业软件。开源系统,如MariaDB和PostgreSQL,可能用于其他解决方案或者一些内部应用程序。
作为消费者和分析师,你可能会遇到数不清的问题:
•有时你甚至不知道数据在哪里,只有凭借公司某个部门的内部知识或组织内多年的工作经验,你才能找到正确的数据。
•为了查询多种源的不同数据库,你需要使用不同的连接并运行多种不同SQL方言的不同查询。这些查询看起来很相似,行为上却不同,因此你会感到困惑,并需要了解其中的细节。
•若不使用数据仓库,就无法使用查询功能合并来自不同系统的数据。
Trino可以帮你避免这些问题。你可以从Trino这里访问所有数据库。
你可以使用一个SQL标准来查询所有的系统——Trino支持的标准化SQL、函数和运算符。
所有的仪表盘和分析工具以及其他商业智能系统,都可以指向一个系统——Trino,它可以访问组织当中的所有数据。
1.3.2 数据仓库和数据源系统的访问点
当一个组织需要更好地理解和分析存放在无数RDBMS中的数据时,数据仓库系统的创建和维护就登上了舞台。从多个系统中提取的数据通过一个复杂的ETL过程(通常通过长时间的批处理任务),最终进入一个严格受控的、巨大的数据仓库。
尽管数据仓库在很多情况下非常有用,但作为一个数据分析师,你会面临很多新问题:
•除了原来的数据库,你的工具和查询现在又要多一个数据接入点。
•你今天就要用的数据还没放入数据仓库。添加数据的过程痛苦、昂贵又障碍重重。
Trino允许你添加任何数据仓库作为数据源,就像其他关系型数据库一样。
如果你想深入研究数据仓库的查询,可以在Trino里直接完成。你也可以在这里访问数据仓库及其源数据库系统,甚至可以将它们组合在一起编写一个SQL语句来查询。Trino让你可以使用单个系统查询任何数据库(包括数据仓库、源数据库)。
1.3.3 提供对任何内容的SQL访问
只使用RDBMS的日子早已一去不复返。数据现在存储在许多针对特定使用场景进行优化的不同系统中。基于对象的存储、键值存储、文档数据库、图数据库、事件流系统和其他NoSQL系统提供了独有的特性和优势。
至少你的组织中使用了其中的一些系统,所保存的数据对理解和改进业务至关重要。
当然,所有这些系统还要求你使用不同的工具和技术来查询与处理数据。
至少这是一项学习曲线陡峭的复杂任务。更有可能的是,你最终只触及了数据的表层,而并没有真正获得完整的理解。你缺乏查询数据的好方法,更详细地可视化和分析数据的工具很难找或根本不存在。
另外,Trino允许你将它作为一个数据源,用来对接各类系统。这些系统可以使用标准的ANSI SQL来查询相关的数据,如图1-4所示。
图1-4:适用于所有数据源的多个使用场景下的统一的SQL访问点
得益于Trino,理解所有这些截然不同的系统中的数据变得更加简单,甚至第一次成为可能。
1.3.4 联邦查询
将所有的数据孤岛都暴露给Trino是向理解数据迈出的一大步。你可以使用SQL和标准工具来查询所有这些内容,但你想要回答的问题往往需要你潜入这些数据孤岛,将它们的一些内容提取出来,然后再在一个地方将其组合起来。
可以通过Trino的联邦查询满足上述需求。联邦查询是在一个语句中引用并使用不同数据库和模式(schema)的SQL查询。在Trino中可以用同一条SQL语句,在同一时间查询出来自完全不同的系统的数据。
你可以定义对象存储中的用户追踪信息和RDBMS中客户数据之间的关系。如果键值存储包含更多相关信息,你也可以把它添加进查询。
使用Trino的联邦查询,你可以获得通过其他方式无法获得的洞见。
1.3.5 虚拟数据仓库的语义层
数据仓库系统为用户创造了巨大的价值,对组织来说却是一个负担:
•运行和维护数据仓库是一个巨大且昂贵的项目。
•需要专门的团队运行与管理数据仓库和相关的ETL过程。
•将数据导入数据仓库需要用户执行烦琐的操作,并且通常很耗时。
Trino可用作虚拟数据仓库。使用这一工具和标准ANSI SQL,你就可以定义语义层。一旦所有的数据库都设置成Trino的数据源,你就可以查询它们。Trino提供了查询这些数据库所需的计算能力。使用SQL和Trino支持的函数与运算符,你可以直接从数据源获得想要的数据。在使用数据进行分析之前,无须复制、移动或转换它们。
得益于对所有连接数据源的标准SQL支持,你可以以更简单的方式创建所需的语义层,以支持来自工具和终端用户的查询。这一语义层覆盖了所有底层的数据源,并且无须迁移任何数据。Trino可以在数据源和存储层查询数据。
使用Trino作为“动态数据仓库”为组织提供了增强现有数据仓库额外功能的潜力,甚至可以完全避免构建和维护数据仓库。
1.3.6 数据湖查询引擎
数据湖通常指的是一个巨大的HDFS或类似的分布式对象存储系统,在数据被存储到这些存储系统时,并没有特别考虑接下来应该如何访问它们。Trino可以使它们成为有用的数据仓库。实际上,Facebook开发Trino的目的就是对一个非常大的Hadoop数据仓库进行更快、更强大的查询,提供Hive和其他工具无法提供的能力。这也是Trino Hive连接器的起源,6.4节将讨论这个连接器。
现代数据湖通常使用HDFS之外的其他对象存储系统,这些系统来自云供应商或其他开源项目。Trino能使用Hive连接器连接它们,无论数据在哪里、如何存储,你都可以在数据湖上使用基于SQL的数据分析。
Delta Lake和Iceberg等新表格式极大地提高了数据湖的可用性,以至于产生了新的术语——数据湖仓(湖仓一体)。有了Delta Lake和Iceberg连接器,Trino是查询这些数据湖仓的首选。
1.3.7 SQL转换和ETL
基于对RDBMS和其他类似数据存储系统的支持,Trino也可用于迁移数据。它所提供的丰富的SQL函数集可以让你查询数据、转换数据,并将数据写入同一个数据源或任何其他数据源。
在实践中,这意味着你可以从对象存储系统或键值存储中复制数据到RDBMS,并进一步分析。当然,你也可以转换和聚合数据,以获得新的理解。
另外,从可操作的RDBMS或像Kafka这样的事件流系统中读取数据,并将它们移动到数据湖中,以减轻分析师对RDBMS进行查询的负担,也是很常见的。ETL过程(现在也常称为数据准备过程)可作为这一过程的重要组成部分,以提升数据质量并创建更适合查询和分析的数据模型。
在这一场景中,Trino是整个数据管理解决方案的关键部分,并且对数据湖仓的容错执行查询的支持使其成为此类场景下的绝佳选择。
1.3.8 更快的响应带来更好的洞见
复杂的问题和海量数据集带来了诸多限制。将数据复制并加载到你的数据仓库并在其中分析它们最终会过于昂贵。要么是消耗大量的算力来运行它们,要么是耗费许多天才能得到一个答案。
Trino在设计上避免了数据复制。Trino的并行计算和深度优化通常能为你的数据分析带来性能提升。
如果原来需要3天的查询现在只需15分钟就可以完成,那么执行这个查询便是有价值的。从这些结果中获得的知识为你提供价值的同时,也让你有能力运行更多查询。
总之,Trino更快的处理速度带来了更好的数据分析和结果。
1.3.9 大数据、机器学习和人工智能
Trino将尽可能多的数据开放给SQL相关的标准工具,并将查询能力扩展到海量数据集上,这使其成了大数据处理的主要工具。如今,大数据处理通常还包括统计分析,随着机器学习和人工智能系统的发展,处理的复杂度也随之上升。基于对R语言和其他工具的支持,Trino也必将在这些使用场景中占据重要位置。
1.3.1 0其他使用场景
在前面的几小节中,我们提供了对Trino使用场景的概述。新的场景和组合在不断涌现。
在第13章中,你将学习一些知名公司和组织使用Trino的细节。我们将这些信息留在本书的结尾,这样你就可以通过阅读接下来的章节,获得理解眼前数据所必备的知识。