首页 > 解决方案 > 如何以 yaml 格式表达 SQL 查询?

问题描述

我正在尝试一些最终用户以 yaml 格式表达查询的随机想法。这个 yaml 文件将被输入到一些中间转换器中,以将 yaml 转换为 SQL 语句。

以下是示例 yaml 片段,但是当我想到有条件、表达式、子查询、连接时。随着查询趋于复杂,yaml 变得更加复杂。

问题:如何定义 yaml 格式的 SQL 查询并涵盖所有场景?(有没有可以做这种魔术的现有库)

table:
    schema: test
    name: test_table
  select:
    columns:
      - column: * # retrieve all columns     
  where:
    columns:
      - column: user_id
      - column: customer_id
  limit:
    value: 10
  # groupBy
  # orderBy

标签: sqlyaml

解决方案


您的问题的答案是:您将 SQL 语句的语法树序列化为 YAML。

快速查看pg_query以了解即使对于简单查询,这棵树看起来多么复杂(该工具使用 Postgres 的 SQL 解析器来生成 SQL 语句的语法树)。这种复杂性是覆盖所有场景所必需的。

现在您当然可以尝试简化这个结构,使其保留重建原始语法树所需的所有信息。这正是 SQL 查询语言所做的!当他们可以使用定义良好且支持良好的语法来表达查询时,没有用户愿意写下显式结构。

您基本上会在语法树和原始 SQL 语言之间的某个位置创建一种全新的、基于 YAML 的语言。使用它需要用户知道 YAML 和你的结构的语义。因此,如果您的目标是增强用户友好性,那么这不太可能是实现它的一种方式。


推荐阅读