掘金 后端 ( ) • 2024-05-05 17:13

本文图片来自于尚硅谷。

即席查询?即时查询?

作者学习过程中已经连续看到过两次即席查询了,不禁冒出个想法:是不是真的有“即席查询”的概念?我还以为是即时查询,打错了呢……

即席查询概念

确实存在“即席查询”(Ad-hoc Query)的概念。这个术语通常用于描述那些未预先定义或计划的查询,即用户根据当前的需求临时创建和执行的查询。这种类型的查询用于探索性分析或数据挖掘,允许用户灵活地探查数据,寻找信息或见解,而无需依赖预先设计好的报告或仪表板。

即席查询的特点

  • 灵活性:即席查询提供了极高的灵活性,允许用户根据当前的分析需求构造查询。这对于数据分析师和业务用户尤其有用,他们可能需要根据最新的数据或问题快速调整查询
  • 探索性:即席查询通常用于探索性数据分析,帮助用户理解数据中可能隐藏的模式、趋势或异常。
  • 即时性:虽然“即席”通常强调的是查询的非预定性和灵活性,但在很多情况下,即席查询也需要能够快速执行,以支持快速决策制定过程

即席查询与即时查询的区别

  • 即席查询(Ad-hoc Query) :强调查询的非预定性、灵活性和探索性。这种查询不是事先定义好的,而是根据当前需要临时创建的。
  • 即时查询(Real-time Query):通常指的是对实时数据进行查询的能力,强调查询执行的速度和数据的实时性。即时查询使得用户能够获得几乎实时更新的数据反馈,这对于需要快速响应的应用场景非常关键。

在许多现代数据分析和商业智能工具中,即席查询能力被视为一项重要功能,它为用户提供了直接、灵活且强大的数据探索和分析手段。这种能力特别适合于动态的商业环境,其中快速获取、分析数据并根据数据做出决策变得越来越重要。


即席查询举例(以Kylin为例)

Apache Kylin 是一个开源的分布式分析引擎,提供了SQL接口和多维分析(OLAP)能力,使得在大数据环境下进行即席查询变得非常高效。Kylin通过预先计算大数据集上的聚合数据并存储在HBase等NoSQL数据库中,使得即席查询可以在秒级别返回结果,即使是针对非常大的数据集。【具体下文会有所讲解】

即席查询的例子

假设你是一家零售公司的数据分析师,你想要分析2019年1月1日至2019年12月31日之间,各个产品类别的总销售额。在Kylin中,你可以通过编写一个SQL查询来实现这个需求,如下所示:

SELECT product_category, SUM(sales_amount)
FROM sales_data
WHERE sale_date BETWEEN '2019-01-01' AND '2019-12-31'
GROUP BY product_category
ORDER BY SUM(sales_amount) DESC;

这个查询的结构相当直接:

  • 选择字段product_category(产品类别)和SUM(sales_amount)(销售额的总和)。
  • 数据源FROM sales_data 指定了包含销售数据的表。
  • 筛选条件WHERE sale_date BETWEEN '2019-01-01' AND '2019-12-31' 限制了查询的时间范围。
  • 分组GROUP BY product_category 按产品类别分组,以便计算每个类别的总销售额。
  • 排序ORDER BY SUM(sales_amount) DESC 按销售额的总和降序排序结果。

为什么这是即席查询

这个查询是一个即席查询的例子,因为它是根据当前分析需求临时创建的,而不是预先定义好的报告或分析。这种查询使得用户可以灵活地探索数据,寻找特定时间段内各个产品类别的销售表现,而无需依赖固定的报告模板。

Kylin通过预计算和存储聚合数据,极大地加速了这类即席查询的执行速度。即使是在包含数十亿行数据的大型数据集上,Kylin也能够在几秒内返回查询结果,这使得数据分析师能够快速迭代查询,探索不同的数据视角和分析假设。

请注意,实际执行这个查询还需要你已经在Kylin中创建了相应的Cube,并且sales_data表、时间范围和字段名称需要根据你的实际数据模型进行调整。Kylin的强大之处在于它为即席查询提供了极佳的支持,特别是在需要快速响应的数据探索和分析场景中。


BI到底是什么!

商业智能(BI)是通过使用各种技术工具和方法,将数据转换为有意义的信息,进而帮助组织做出基于数据的决策的过程。在当今这个数据驱动的商业环境中,商业智能扮演了至关重要的角色。

编辑

以下是商业智能的几个关键组成部分,以及它们是如何帮助企业转化数据为知识的:

  1. 数据仓库(Data Warehousing) :数据仓库是一个集中存储企业中来自不同源的数据的系统。它允许企业汇总、存储、管理,并通过结构化的方式查询大量数据。数据仓库是进行深入分析的基础,使企业能够从历史数据中提取出有价值的见解。它通过整合来自不同业务系统的数据(如销售、财务、人力资源等),为商业智能分析提供了一个统一的数据源。
  2. 联机分析处理(OLAP) :OLAP是一种强大的分析工具,它支持快速、一致、交互式地访问多维数据的能力。它允许用户从多个角度对数据进行探查和分析,如进行时间序列分析、趋势分析以及细分市场分析等。OLAP通过提供多维视图来帮助决策者理解数据,发现数据之间的关系和模式。
  3. 数据挖掘(Data Mining) :数据挖掘是一种分析技术,用于从大量的数据集中探索、发现模式和关系。它利用统计学、机器学习和人工智能技术来预测未来趋势和行为模式。通过数据挖掘,企业可以识别客户购买行为的模式、发现潜在的市场机会,或者预测销售趋势。
  4. 报表和可视化(Reporting and Visualization) :将数据转化为知识的一个重要步骤是通过报表和可视化工具来呈现这些信息。这些工具使非技术用户能够理解复杂的数据分析结果,通过图表、图形和仪表板直观地展示数据。可视化帮助快速传达关键信息,支持决策者根据实时数据做出更明智的业务决策。
  5. 商业智能软件和平台(BI Software and Platforms) :为了有效地实施上述各种技术和方法,企业通常会采用商业智能软件和平台。这些平台整合了数据仓库、OLAP、数据挖掘和可视化工具,提供了一个全面的解决方案,帮助企业分析和理解其数据。它们通常具有易于使用的界面,支持拖放功能,允许用户轻松创建和共享报表和仪表板。 【真的用过的话就很有感触,原来帆软BI就是这样一种商业智能平台呀!】

商业智能的最终目标是帮助企业基于数据做出更加明智、有效的决策。通过实时分析大量数据,企业能够更好地了解市场动态、优化运营效率、提高客户满意度,从而在竞争激烈的市场中保持领先地位。


ROLAP(Relational)与MOLAP(Multidimensional)

OLAP(联机分析处理)是一种强大的技术,用于支持快速、多维的复杂查询,主要用于商业报告、分析、数据挖掘等。它主要分为两种类型:ROLAP(关系型OLAP)和MOLAP(多维OLAP) 。让我们深入了解这两种形式及其主要差异。

编辑

ROLAP(关系型OLAP)

  • 基础技术:ROLAP基于关系型数据库。它直接在标准的关系数据库管理系统(RDBMS)上运行,使用标准的SQL查询来分析数据。ROLAP的设计使其能够高效处理非常大的数据集。
  • 数据存储数据以传统的表格形式存储,使用行和列的结构。这种存储方法便于理解和管理,但可能不如多维数据结构直观。
  • 性能ROLAP系统不需要预计算聚合数据。查询时,系统实时执行复杂的SQL查询以生成结果。这意味着ROLAP可以提供最新的数据视图,但对于特别大的数据集或复杂的分析,性能可能受到影响。
  • 适用场景:ROLAP特别适合于需要处理大量数据并执行复杂查询的场景,特别是当数据实时性非常重要时。它在处理稀疏数据集方面也非常有效,即数据不均匀分布的情况。 【往往是即席查询】

MOLAP(多维OLAP)

  • 基础技术MOLAP基于多维数据模型,通常使用专门的多维数据库。这种模型允许数据以多维数组的形式存储,优化了数据检索。
  • 数据存储MOLAP使用多维立方体(cubes)来存储数据。每个立方体由多个维度组成,如时间、地区、产品等。这种结构使得进行多维分析变得非常直观和高效。
  • 性能MOLAP系统通过预计算并存储数据的汇总(聚合)信息来优化查询性能。这种预计算意味着查询响应非常快,尤其是对于标准报告和分析。但是,这也意味着立方体需要定期更新以反映最新数据。
  • 适用场景:MOLAP非常适合需要快速响应时间和高度汇总数据的分析任务。它在处理规则性较强、数据维度和层级明确的情况下表现最佳。 【往往是预定义查询】

编辑

编辑

比较

  • 性能和灵活性:MOLAP在查询性能上通常优于ROLAP,尤其是在处理预定义的查询和报告时。然而,ROLAP在处理大量数据和复杂查询方面更加灵活,尤其是当查询变化多端时。
  • 数据实时性:ROLAP能够提供更加实时的数据视图,因为它直接在原始数据上运行查询,而不依赖于预计算。MOLAP则依赖于周期性的数据处理和更新,因此可能无法实时反映最新数据。
  • 数据模型和管理:MOLAP的多维数据模型对于用户来说更直观,但可能需要专门的工具和技能来设计和管理。而ROLAP利用现有的关系数据库,可能更容易集成到现有的IT基础设施中。

选择ROLAP还是MOLAP,或者两者的组合(称为HOLAP,混合型OLAP),主要取决于组织的具体需求,包括数据大小、查询的复杂性、性能要求、以及数据更新的频率等因素。


Kylin麒麟!

Kylin 主要是基于 MOLAP(多维OLAP)模型,使用预计算的多维数据立方体(Cube)来优化查询性能。这里的关键在于理解即席查询的需求以及如何通过预计算的数据立方体来满足这些需求,同时保持高性能和灵活性。

即席查询和预计算立方体

  • 即席查询:如上文所述,指的是没有预先定义的查询,允许用户根据需要随时创建和提交查询。这种查询方式为用户提供了极大的灵活性,因为它们可以根据当前的需求,随时探索数据和获取信息。
  • 预计算立方体为了支持快速响应即席查询,Kylin 预先计算并存储了大量的聚合数据。这些预计算的结果被组织在多维数据立方体中,立方体按照特定的维度(如时间、地区、产品等)来组织数据。当进行即席查询时,Kylin 能够快速从这些预计算的立方体中检索数据,而不需要从头开始对庞大的原始数据集进行全面扫描和计算

为什么适合 Cube

尽管即席查询听起来像是不需要预先定义查询,但在大数据环境下,直接在原始数据上执行复杂的即席查询通常会非常慢。Kylin 使用 Cube 的方法有几个优点:

  • 性能提升:通过预计算聚合数据,Kylin 能够显著提高查询性能,使得即使是在非常大的数据集上运行复杂的即席查询也能在秒级响应。
  • 减少资源消耗:避免了每次查询时都进行大规模的数据扫描和计算,从而减少了计算资源的消耗。
  • 支持复杂分析:预计算的数据立方体支持多维度的分析,使得用户可以从各种角度探索数据,发现数据之间的关系和模式。

特点总结

  • Kylin 通过将 MOLAP 的优势(如预计算的立方体)与即席查询的需求相结合,提供了一种高效的分析解决方案。这使得它特别适合需要快速响应大数据量即席查询的场景。
  • Kylin 的设计考虑了大数据环境下即席查询的性能挑战,通过智能的预计算和数据组织方式,优化了查询效率,同时保持了用户查询的灵活性。

因此,尽管即席查询本质上是动态和未预定义的,Kylin 通过预计算立方体的方法,成功地解决了在大规模数据集上进行快速、灵活分析的挑战。


作者思考总结

多维数据虽然更适合于预计算的查询,但是我们可以先将多维数据预计算,然后把这种高性能的数据格式应用到SQL等即席查询的场景中。根据其底层的数据格式还是Cube这样的多维数据,所以Kylin本质上属于MOLAP,但是它也把ROLAP的即席查询也结合并且优化了,它在很多场景下性能是比Hive/Spark性能效率高得多的。

Apache Kylin 通过其创新的设计,结合了 MOLAP 的高效数据处理优势和 ROLAP 提供的即席查询灵活性,实现了一个既能支持高性能数据分析又能适应灵活查询需求的解决方案。让我们来进一步解析这种结合是如何在实际应用中发挥作用的:

预计算多维数据与即席查询的结合

Kylin 预先计算并存储了多维数据立方体中的聚合数据,这些数据立方体根据特定的维度组织,如时间、地区、产品等。这种预计算提高了数据检索的速度,因为当进行即席查询时,系统可以直接从这些预先计算好的聚合数据中快速提取信息,而不需要重新进行耗时的计算。

这种方法有效地将 MOLAP 的高效数据访问能力应用到了 SQL 等即席查询场景中,即使这些查询没有预先定义。这样,Kylin 既保持了数据分析的灵活性,又显著提升了查询效率,特别是在面对大规模数据集时。

与 Hive/Spark 的性能比较

在很多场景下,Kylin 的确因其高效的数据处理能力而在性能上超过了 Hive 和 Spark。Hive 和 Spark 都是处理大规模数据集的强大工具,但它们在处理即席查询时通常需要扫描大量的原始数据,特别是当涉及到复杂的数据分析和多维度聚合时。这种方法在大数据环境下可能会导致较高的查询延迟。

  • Hive:作为一个数据仓库解决方案,Hive 更适用于那些结构化的批量数据处理,尤其是当数据模式相对固定且查询相对预定时。
  • Spark:虽然 Spark 是一个强大的通用数据处理框架,能够进行复杂的数据分析和机器学习任务,但其性能在即席查询场景下仍然受限于数据的读取和处理速度。

Kylin 通过预计算和优化存储的多维数据立方体,为即席查询提供了更快的响应时间,尤其是在多维分析和大规模数据集上。它的这种设计使得在数据分析和报告生成方面,尤其是需要快速响应和高度交互的业务智能(BI)场景中,Kylin 可以提供比 Hive 和 Spark 更高效的性能。

Kylin 通过其多维数据预计算和存储的方法,结合了 MOLAP 的高性能和 ROLAP 的查询灵活性,提供了一个既适应即席查询需求又能在大数据环境下保持高效性能的分析平台。这种能力使其在需要快速、高效访问和分析大规模数据集的场景下,成为比 Hive 或 Spark 更优的选择。