SQL片段与已保存问题与视图比较
了解你可以用来保持 SQL 代码整洁的 Metabase 功能。
本文概述了 Metabase 提供的用于保持 SQL 代码整洁的工具,并提供了一些指导,说明何时使用某个工具而不是另一个工具。
有两个主要工具可以组织你的 SQL 代码:片段和保存的查询。我们还将讨论数据库视图,以区分其在 Metabase 中与保存查询的使用,尽管视图是特定于你的数据库的(即,它们不是 Metabase 的一部分)。
片段和保存的查询都充当模板,你可以将其注入其他 SQL 查询中。至于使用哪个以及何时使用,一般规则如下:使用片段来处理小而常用的 SQL 片段,使用保存的 SQL 查询来执行任何你想要独立执行的代码。
SQL 片段和文件夹
使用 SQL 片段 来处理关键或频繁使用的 SQL 代码。片段应该是简短、可重用的 SQL 行。
就像你可以使用 查询构建器 将官方聚合和过滤器定义为 度量单位和段 一样,你还可以使用 SQL 片段来编纂 KPI 和过滤器。例如,你可能想要存储确切的收入计算方式,或构成活跃用户的标准。将此 SQL 代码保存为片段,添加描述(你甚至可以包括联系信息,以防有人有问题),现在你的团队中的每个人都可以参考你片段中结晶的 SQL。
SELECT *
FROM users
WHERE {{ snippet: Active Users }} AND {{ snippet: Adults }}
片段对于巩固和标准化你的代码至关重要。如果你在任何时候需要更新构成活跃用户的定义,你只需更新 Active Users
片段,该更改将传播到使用该片段的每个问题。
Metabase 企业版还允许你将 SQL 片段组织到文件夹中,就像集合组织问题和仪表板一样。你可以设置这些文件夹的权限,以限制对敏感 SQL 的访问,或者只是确保用户不必在不相关的领域中翻阅文件夹。
如果你发现自己正在编写一个长的片段,并且该片段返回一组结果(即,该片段不仅仅是 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问题中的字段过滤器变量。