代码片段:重用和共享代码
了解在原生代码中使用代码片段所需的一切。
代码片段允许您将 SQL 代码保存为代码片段,然后您或其他 SQL 作者可以在不同的 SQL 查询中引用该代码片段。如果您需要更新该代码,可以编辑代码片段,这些更改将传播到所有使用该代码片段的问题。任何具有至少一个数据库的 SQL 编辑器权限的人都可以使用、创建和编辑代码片段。
代码片段是一个简单但功能强大的功能,让我们来详细了解它们。我们还将介绍 Metabase 中的专业版和企业版独有的功能:代码片段文件夹。这些文件夹及其权限可帮助您组织代码片段,例如按数据库或按代码片段类型组织,并允许您授予或拒绝访问特定文件夹或子文件夹。
首先,一个简单的代码片段示例
以这段简短的 JOIN 语句为例
orders AS o
LEFT JOIN products AS p
ON o.product_id = p.id
您可以突出显示该代码,将代码片段命名为 Orders and products
,添加有用的描述,然后使用 snippet:
标签在任何 SQL 查询中调用该代码片段,如下所示:
SELECT
*
FROM
{{snippet: Orders and products}}
您还可以使用代码片段来表示常见指标,例如平均订单总额,这些指标会考虑数据库的特殊性。举一个简单的例子,假设我们知道 ID 为 1 的账户是测试账户,我们不希望该数据扭曲我们的平均值。我们可以将该例外封装在一个名为 average order total
的代码片段中。
(SELECT
AVG(total)
FROM
orders
WHERE
id > 1)
然后我们可以在另一个查询中使用该代码片段,在该查询中,我们查找订单中总额低于平均订单总额的产品。
SELECT
product_id
FROM
orders
WHERE
total < {{snippet: average order total}}
这就是创建和使用代码片段的全部过程。现在让我们深入探讨它们为什么如此有用。
为什么要使用代码片段?
代码片段主要有三种用例
- 标准化:您的组织如何定义热门产品?是根据销售单位数量?还是根据平均评分高于 4 的评论?您可以为热门产品定义这些资格,并将其编码到代码片段中,
{{snippet: popular products}}
,并让该代码填充到使用该代码片段的每个问题中。如果未来这个定义需要更改,只需更新代码片段的 SQL,更改就会传播到所有使用该代码片段的问题。与 段(命名过滤器或一组过滤器)和 指标(命名计算)可以标准化组织中的分析类似,代码片段提供了另一种确保团队之间正确性和一致性的方法。 - 效率:您是否经常复制粘贴 SQL 代码?不想费心记住哪些外键映射到哪些表?只需编写一次复杂的 JOIN,将其保存为代码片段,并在需要时调用该代码片段。
- 教育:代码片段可以通过向新接触 SQL 的人员(甚至经验丰富的分析师)展示您组织的“规范 SQL”或更高效或更复杂的查询来提升他们的水平。阅读、复制和基于高质量代码进行构建是培养技能的最佳方式之一。它还可以节省您组织的时间:人们可以复制代码片段的代码,修改它以获得不同的结果,并将该代码保存为新的代码片段供其他人使用。
使用代码片段
代码片段侧边栏
Metabase 的 SQL 编辑器有一个 代码片段侧边栏,用于查看、创建和编辑代码片段,您可以通过将鼠标悬停在编辑器的右侧并点击 代码片段图标(三条不均匀的水平线)来访问它。
创建代码片段后,您可以使用代码片段标签 {{snippet: Orders and products}}
在编辑器中插入它们,或者从代码片段侧边栏中选择它们
点击 代码片段侧边栏 中的代码片段名称,将在光标当前位置插入到查询中。
编辑代码片段
更新代码片段的 SQL 代码将更新使用该代码片段的所有查询,因此请务必在保存代码之前测试您的代码,以避免破坏人们的问题。当然,如果您犯了错误并造成混乱,您可以简单地更正代码,再次保存代码片段,并恢复宇宙的秩序。
代码片段和别名
请注意,如果您在代码片段中使用了别名(例如,orders AS o
),则需要在代码片段之外使用这些别名来引用查询中的该数据。我们建议您的团队对别名制定一项策略:要么所有人都应该在代码中使用表别名,要么所有人都使用完整的表名。如有疑问,请使用完整的表名。
归档代码片段
代码片段是不可摧毁的:您不能删除它们,但您可以归档(和取消归档)它们。归档代码片段将使您的代码片段侧边栏保持整洁,因为已归档的代码片段不会填充侧边栏。它还将阻止已归档的代码片段出现在 SQL 编辑器中的类型建议结果中,即,当您键入 {{snippet:
时,已归档的代码片段将不会显示为自动完成选项。归档代码片段不会影响使用该代码片段的问题,因此您可以安全地归档代码片段,而不会破坏任何人的问题。
代码片段文件夹
Metabase 的专业版和企业版包括代码片段文件夹和权限,以帮助组织大量代码片段。管理员可以将代码片段添加到文件夹中,并将文件夹嵌套在其他文件夹中。所有代码片段都将出现在代码片段侧边栏中,包括其他数据库的代码片段(因为您可能会将字符串片段化,以便在多个数据库中使用)。您可以将每个数据库的有用代码片段收集到自己的文件夹中,还可以创建文件夹来存储与不同团队或项目相关的代码片段。
此外,管理员可以为这些文件夹添加权限,以控制谁可以查看或编辑其中位于的代码片段。
权限授予组,每个文件夹有三个权限级别。
- 编辑权限:查看、编辑、归档/取消归档代码片段。
- 查看权限:查看和运行代码片段。
- 无访问权限:无法在侧边栏和自动完成菜单中查看代码片段。但是,没有访问权限的人可以运行包含这些代码片段的查询。
归档和取消归档代码片段不影响权限,尽管您需要对文件夹拥有编辑权限才能归档和取消归档其代码片段。
使用文件夹在团队内部和团队之间组织和标准化代码片段,并使敏感代码片段仅对适当的组可见。
何时使用代码片段与已保存的问题
一个代码片段可以有多大?一般来说,如果一个代码片段可以独立运行(即,您可以将其作为独立的查询运行),请考虑将该 SQL 查询存储为已保存的问题。将代码片段保留给依赖于其他代码的部分。代码片段对于保存查询中常用字符串也很有用。有关何时使用代码片段的更多信息,请参阅代码片段与已保存的问题与视图。
有关使用代码片段的更多信息
要了解有关代码片段的更多信息,请查看我们的详细文档