SQL片段与已保存问题与视图比较

了解你可以用来保持 SQL 代码整洁的 Metabase 功能。

本文概述了 Metabase 提供的用于保持 SQL 代码整洁的工具,并提供了一些指导,说明何时使用某个工具而不是另一个工具。

有两个主要工具可以组织你的 SQL 代码:片段和保存的查询。我们还将讨论数据库视图,以区分其在 Metabase 中与保存查询的使用,尽管视图是特定于你的数据库的(即,它们不是 Metabase 的一部分)。

片段和保存的查询都充当模板,你可以将其注入其他 SQL 查询中。至于使用哪个以及何时使用,一般规则如下:使用片段来处理小而常用的 SQL 片段,使用保存的 SQL 查询来执行任何你想要独立执行的代码。

SQL 片段和文件夹

使用 SQL 片段 来处理关键或频繁使用的 SQL 代码。片段应该是简短、可重用的 SQL 行。

Example snippet using the Sample Database included with Metabase.

就像你可以使用 查询构建器 将官方聚合和过滤器定义为 度量单位和段 一样,你还可以使用 SQL 片段来编纂 KPI 和过滤器。例如,你可能想要存储确切的收入计算方式,或构成活跃用户的标准。将此 SQL 代码保存为片段,添加描述(你甚至可以包括联系信息,以防有人有问题),现在你的团队中的每个人都可以参考你片段中结晶的 SQL。

SELECT *
FROM users
WHERE {{ snippet: Active Users }} AND {{ snippet: Adults }}

片段对于巩固和标准化你的代码至关重要。如果你在任何时候需要更新构成活跃用户的定义,你只需更新 Active Users 片段,该更改将传播到使用该片段的每个问题。

Metabase 企业版还允许你将 SQL 片段组织到文件夹中,就像集合组织问题和仪表板一样。你可以设置这些文件夹的权限,以限制对敏感 SQL 的访问,或者只是确保用户不必在不相关的领域中翻阅文件夹。

Creating a snippet folder in Metabase Enterprise Edition.

如果你发现自己正在编写一个长的片段,并且该片段返回一组结果(即,该片段不仅仅是 WHERE 子句——它本身就是一条查询),考虑将查询保存为问题,以便其他人可以在他们的查询中参考。

保存的查询作为构建块

对于一些独立有趣的较大SQL代码块,可以考虑将其保存为一个问题。毕竟,大多数人使用Metabase的方式就是提出问题。

问题可以组合到仪表板中,但也可以作为构建更大查询的基石,就像你可以在查询中拉取多个代码片段一样。

假设你编写了一个查询并将其保存为问题。你可以像这样将其注入另一个查询中

SELECT *
FROM {{#123}}

其中123是该问题的ID。你也可以将问题用作公用表表达式(CTE)

WITH active_users AS {{#123}}
SELECT *
FROM Active Users

保存的问题是一种低成本的模块化分析方式。通过保存问题模块化查询(而不是SQL代码片段)的最大优点是,你可以独立运行保存的问题并查看其结果,这使得问题比代码片段更容易调试。

或者,你也可以简单地复制一个问题并从先前的问题开始构建,但这种复制是有代价的。现在,你在两个问题中都有相同的代码;如果你后来在一个问题中找到错误,你也必须纠正另一个问题中的错误——假设你记得它们共享相同的代码。通过简单地引用保存的问题,你只需在一个地方更新代码。

例如,如果你是一家初创公司,你可能会在归一化表中分散着有关用户的数据。在Metabase中,你可以以各种方式连接这些表,创建一套用户感兴趣的问题,这允许他们利用这些结果,在自己的查询中引用这些问题以特定方式切片数据。

数据库视图

如果你认为保存的问题在数据库中与视图非常相似,你是对的。问题的优势是,你不需要是管理员就可以创建它们,并且你可以动态创建问题并将它们嵌套在其他问题中。劣势是,问题是一个Metabase结构,你不会得到数据库视图的原生性能优化(如果有的话)。此外,当在SQL代码中引用另一个问题时,请注意,你只能访问问题的结果:你不能访问查询本身,这意味着你不能引用其中可能存在的任何变量。

如果你发现人们经常将Metabase中的问题作为查询的基础,考虑与你的数据库管理员交谈,创建一个返回与保存问题相同结果集的物化视图。物化视图的优势是,数据库不必每次都重新计算结果;物化视图将非常类似于数据库中的实际表。

在SQL模板中使用其他保存的问题非常好,当你无法在数据库中创建视图时,或者你只是探索数据而不想创建视图时。

随着你的成长,将业务逻辑推到管道的上端

大多数分析只是以不同的方式切割数据,以便更好地了解它所能讲述的故事。随着你找到分析的基础,你并不一定知道哪些数据切片将帮助你在公司做出最佳决策。

随着您组织的数据分析设置成熟,您可能希望将业务逻辑进一步推送到管道的上方,以便在Metabase中找到的表可以组合成您业务中的逻辑单元。整理和扩展一组核心的保存问题是一个简单的办法,可以帮助您确定哪些数据对组织来说最重要。

一般来说,人们分析数据越容易,您的组织就越有效率。参见初创公司常犯的常见数据模型错误以了解更多信息。

下一节:使用SQL问题添加仪表板过滤器

如何向仪表板添加过滤器小部件并将它们连接到SQL问题中的字段过滤器变量。

下一篇文章