SQL 代码段:重用和共享 SQL 代码

了解您需要了解的关于在 SQL 代码中使用代码段的所有信息。

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

Highlight SQL code and save it as a snippet.

代码段是一个简单但强大的功能,因此让我们对其进行分解。我们还将介绍 Metabase 中 Pro 和 Enterprise 计划 独有的功能:代码段文件夹。这些文件夹及其权限可以帮助您组织代码段,例如按数据库或代码段类型,并允许您授予或拒绝访问特定文件夹或子文件夹。

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

采用以下简短的连接语句

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

您可以突出显示该代码,将代码段命名为 Orders and products,添加有用的描述,并在任何 SQL 查询中使用 snippet: 标签调用该代码段,如下所示

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}}

创建和使用代码段只需这些步骤。现在让我们深入探讨它们为何如此有用。

为什么要使用 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: Orders and products}} 将它们插入编辑器中,或从代码段侧边栏中选择它们

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 云上)中可用。

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

Saving a snippet to a folder.

此外,管理员可以向这些文件夹添加权限,以控制谁可以查看或编辑位于其中的代码段

Changing a folder

权限授予给每个文件夹的 ,具有三个权限级别

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

存档和取消存档代码段对权限没有影响,尽管您需要对文件夹具有编辑访问权限才能存档和取消存档其代码段。

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

何时使用代码段与已保存问题

代码段可以有多大?通常,如果代码段可以独立运行(即,您可以将其作为查询单独运行),请考虑将该 SQL 查询存储为已保存问题。为依赖代码片段保留代码段。代码段对于保存查询中常用的字符串也很有用。有关何时使用代码段的更多信息,请查看 SQL 代码段与已保存问题与视图

有关使用 SQL 代码段的更多信息

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

下一步:SQL 代码段与已保存问题与视图

了解您可以使用哪些 Metabase 功能来组织您的 SQL 代码。

下一篇文章