sql - 如何以 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
解决方案
您的问题的答案是:您将 SQL 语句的语法树序列化为 YAML。
快速查看pg_query以了解即使对于简单查询,这棵树看起来多么复杂(该工具使用 Postgres 的 SQL 解析器来生成 SQL 语句的语法树)。这种复杂性是覆盖所有场景所必需的。
现在您当然可以尝试简化这个结构,使其保留重建原始语法树所需的所有信息。这正是 SQL 查询语言所做的!当他们可以使用定义良好且支持良好的语法来表达查询时,没有用户愿意写下显式结构。
您基本上会在语法树和原始 SQL 语言之间的某个位置创建一种全新的、基于 YAML 的语言。使用它需要用户知道 YAML 和你的结构的语义。因此,如果您的目标是增强用户友好性,那么这不太可能是实现它的一种方式。
推荐阅读
- c# - ObservableCollection 不更新 UI
- spring - 我怎样才能解决这个问题(类
无法解析为类型)? - time - 复制路径 Cassandra NoSQL
- sql - SQL 如何获取 varbinary(max) 的最大令牌?
- java - 更改对象变量的问题
- azure-sql-managed-instance - Azure SQL DB 托管实例上的数据库创建/删除时间需要很长时间
- database - SQLite 查询只返回第一条记录
- windows - windows环境下如何处理bash脚本中的json
- r - 根据另一列中的值从数据框中的列中选择
- python - 如何计算具有由索引数组定义的不同窗口大小的 NumPy 数组的移动平均值?