SQL代码片段:重用和分享SQL代码

了解如何在SQL代码中使用代码片段所需知道的一切。

SQL代码片段允许您将SQL代码保存为片段,然后您或其他SQL作者可以在不同的SQL查询中引用该片段。如果您需要更新该代码,您可以编辑代码片段,并且这些更改将传播到所有使用该片段的问题)。任何具有至少一个数据库的SQL编辑器权限的人都可以使用、创建和编辑代码片段。

Highlight SQL code and save it as a snippet.

代码片段是一个简单但强大的功能,让我们来详细说明。我们还将介绍Metabase专有的专业和企业计划的功能:代码片段文件夹。这些文件夹及其权限有助于您整理代码片段,例如按数据库或代码片段类型整理,并让您授予或拒绝对特定文件夹或子文件夹的访问权限。

首先,一个简单的SQL代码片段示例

看看这个简短的连接语句

orders AS o
LEFT JOIN products AS p
ON o.product_id = p.id

您可以将该代码突出显示,将代码片段命名为订单和产品,添加有用的描述,然后使用snippet:标签在任何SQL查询中调用该代码片段,如下所示

SELECT
    *
FROM
    {{snippet: Orders and products}}

您还可以使用代码片段来处理常见的指标,例如平均订单总额,该指标考虑了数据库的怪癖。作为简单的示例,假设我们知道ID = 1的账户是一个测试账户,我们不希望这些数据影响我们的平均值。我们可以将这个异常封装在名为平均订单总额的代码片段中。

(SELECT
    AVG(total)
    FROM
    orders
    WHERE
    id > 1)

然后我们可以使用该代码片段在不同的查询中使用,该查询寻找总额低于平均订单总额的订单中的产品

SELECT
    product_id
FROM
    orders
WHERE
    total < {{snippet: average order total}}

创建和使用代码片段就是这样。现在让我们深入了解它们为什么如此有用。

为什么使用SQL代码片段?

SQL代码片段有三个主要用途

  • 标准化:您的组织如何定义热门产品?是按销售单元数量吗?还是按平均评分大于4的评论来定义?您可以定义热门产品的这些资格,并在SQL代码片段{{snippet: popular products}}中将其编码,然后在使用该代码片段的每个问题中填充该代码。如果将来需要更改此定义,只需更新代码片段的SQL即可,更改将传播到使用该代码片段的所有问题。类似于如何使用(一个命名的过滤器或一组过滤器)和度量(一个命名的计算)在您的组织中标准化分析,SQL代码片段提供了另一种确保跨团队正确性和一致性的方法。
  • 效率:您是否经常复制和粘贴SQL代码?不想麻烦记住哪些外键映射到哪些表?一次编写复杂的连接,将其保存为代码片段,并在需要时调用代码片段。
  • 教育:代码片段可以通过让新接触SQL(或甚至经验丰富的分析师)接触您组织的“标准SQL”或更有效或更复杂的查询来提高他们的技能。阅读、复制和基于高质量代码构建是提高技能的最佳方法之一。它还可以为您节省时间:人们可以复制代码片段的代码,修改它以获得不同的结果,并将该代码作为新的代码片段保存,供其他人使用。

使用SQL代码片段

SQL代码片段侧边栏

Metabase的SQL编辑器有一个用于查看、创建和编辑代码片段的代码片段侧边栏,您可以通过将鼠标悬停在编辑器的右侧并单击代码片段图标(三个不等的水平线)来访问它。

Access the Snippets sidebar by clicking on the snippet icon to the right of the SQL editor.

创建片段后,您可以使用片段标签 {{snippet: 订单和产品}} 在编辑器中插入它们,或者从片段侧边栏中选择。

Previewing and inserting a snippet from the Snippets sidebar.

片段侧边栏 中单击片段的名称,将它在查询的当前光标位置插入。

编辑 SQL 片段

更新片段的 SQL 代码将更新使用该片段的每个查询,因此请确保在保存之前测试您的代码,以避免破坏人们的查询。当然,如果您犯了一个错误并造成了混乱,您可以简单地纠正代码,再次保存片段,并恢复宇宙的秩序。

SQL 片段和别名

请注意,如果您在片段中使用了别名 (例如, orders AS o ),则需要在片段 之外 使用这些别名来引用查询中的数据。我们建议您的团队制定一个关于别名的政策:要么每个人都应该在代码中使用表别名,要么每个人都使用完整的表名。当您不确定时,只需使用完整的表名。

存档 SQL 片段

You can archive a snippet via the Snippet Edit modal.

片段是不可摧毁的:您不能删除它们,但您可以存档(并取消存档)它们。存档一个片段将使您的 片段侧边栏 保持整洁,因为存档的片段不会填充侧边栏。它还将防止存档的片段在 SQL 编辑器 的自动完成结果中显示,即,存档的片段在您键入 {{snippet: 时不显示为自动完成选项。存档片段不会影响使用该片段的查询,因此您可以安全地存档片段而不会破坏任何人的查询。

SQL 片段文件夹

SQL 片段控制仅在 ProEnterprise 计划(自托管和 Metabase Cloud 上)中可用。

Metabase 中的 Pro 和 Enterprise 计划 包括片段文件夹和权限,以帮助组织大量片段。管理员可以将片段添加到文件夹中,并在文件夹中放置文件夹。所有片段都会显示在 片段侧边栏 中,包括其他数据库的片段(就像您可以将用于多个数据库的字符串片段化一样)。您可以将每个数据库的有用片段收集到它们自己的文件夹中,并且还可以创建文件夹来存储与不同团队或项目相关的片段。

Saving a snippet to a folder.

此外,管理员还可以向这些文件夹添加权限,这些权限控制谁可以查看或编辑位于那里的片段

Changing a folder

每个文件夹都授予 权限,有三个权限级别

  • 编辑访问:查看、编辑、存档/取消存档片段。
  • 查看访问:查看和运行片段。
  • 无访问权限:不能在侧边栏和自动完成菜单中查看片段。然而,没有访问权限的人可以运行包含这些片段的查询。

存档和取消存档片段不会影响权限,尽管您需要编辑权限才能存档和取消存档文件夹中的片段。

使用文件夹在团队之间以及团队内部保持片段的组织和标准化,以及仅使敏感片段对适当的组可见。

何时使用片段与保存查询

片段有多大?通常,如果一个片段可以独立运行(即,您可以将它作为一个查询运行),请考虑将那个 SQL 查询作为保存的查询存储。将片段保留为 依赖 代码的一部分。片段对于保存常用在查询中的字符串也很有用。有关何时使用片段的更多信息,请查看 SQL 片段与保存查询和视图的比较

有关使用 SQL 片段的更多信息

要了解更多关于 SQL 片段的信息,请查看我们的详细文档

下一页:SQL片段与保存问题与视图比较

了解您可以使用的Metabase功能,以保持您的SQL代码井然有序。

下一篇文章