‧
阅读时间:4分钟
我们将问题放入您的问题中
Sameer Al-Sakran
‧ 阅读时间:4分钟
分享这篇文章
Metabase 查询构建器允许您在数据库的单个表中运行简单查询。在这个基本习语中,我们添加了从通过外键链接的表中获取信息、修改列以及基于数学表达式创建新列的功能。然而,这已成为我们坚持的核心模式,并在可用性方面带来了一些收益。
我们发现,虽然它提供的功能不如其他一些工具强大,但它确实让80%的非技术用户能够提出20%的问题,而其他所有工具都专注于让公司精英5%的用户提出80%的问题。
在此基础上,随着我们的新版本发布,您现在可以在查询构建器中将保存的问题用作“表”。
这有什么用呢?
最明显的用例是聚合或切片另一个问题的结果,例如“平均日收入”。更有趣的是,您可以使用保存的问题——无论是图形用户界面还是SQL——作为新问题的起点。
这允许您使用SQL生成复杂的中间结果(也称为子查询),然后在查询构建器中使用它。
其他工具迫使您创建真正的怪物SQL模板,或者使用一种奇怪的自定义语言YAML来生成“重型”的工件,以便您的非技术用户使用。但是,使用嵌套问题,您可以使用标准的SQL创建这些子查询,然后使用查询构建器。如果有远见,这意味着您可以使用轻量级的SQL和查询构建器来公开其他需要大量奇怪SQL或YAML的接口。
关于连接(JOIN)呢?
现在,如果您想询问涉及两个或多个表的问题,请在嵌套子问题中使用连接。与其创建一个复杂的界面来促进连接,您只需使用标准的SQL。虽然内部、外部、左、右、上、下以及所有方向的连接确实很微妙,也可能很复杂,但实际上SQL语法相当简单。我们不会重新发明图形轮子,我们认为任何知道左内连接和右外连接区别的人也了解一些SQL。
这意味着您不会向查询构建器添加更多功能吗?
完全不是。我们对查询构建器有很多计划!在未来的版本中,我们将努力为非技术用户和专业技术用户提供更多功能。他们将专注于SQL不太擅长的事情,而不是SQL擅长的事情。我们还将重新设计界面,使其对非技术用户更容易访问,使他们更容易找到问题的常见起点。
这不会很慢吗?
这取决于。您可能会生成一个慢查询,但即使您使用了显式的子查询,它也会很慢,我们发现我们的用户倾向于经常使用这些。
如果我的用户运行太多的复合查询并减慢了速度怎么办?
这意味着您的用户在运行这些查询时找到了价值,您应该优化它们。优化的路径是将子查询转换为物化视图,如果这个过程很慢(例如,在插入时),则将其拆分到一个批次或流式转换过程中,该过程产生相似的表。我们建议保留相同的表名,因为这可能会让您有可能替换现有的查询。
接下来是什么?
我们建议您尝试嵌套查询,并给我们一些反馈。我们有一些开放的问题,我们在其中讨论下一步和改进。
如果其中之一或多个会显著简化您的生活,请在这些问题上发表意见。我们将根据有多少用户认为它们是好主意来优先考虑功能增强。