当前位置: 首页 > news >正文

用parser_tools插件来解析SQL语句

C:\d>duckdb140
DuckDB v1.4.0 (Andium) b8a06e4a22
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
D INSTALL parser_tools FROM community;
100% ▕██████████████████████████████████████▏ (00:00:02.45 elapsed)
D LOAD parser_tools;
D SELECT * FROM parse_tables('SELECT * FROM my_table');
┌─────────┬──────────┬─────────┐
│ schematable   │ context │
│ varcharvarcharvarchar │
├─────────┼──────────┼─────────┤
│ main    │ my_table │ from    │
└─────────┴──────────┴─────────┘
D SELECT * FROM parse_tables($$
路     WITH recent_users AS (SELECT * FROM users WHERE created_at > now() - INTERVAL '7 days')SELECT * FROM recent_users r JOIN logins l ON r.id = l.user_id
路 $$);
┌─────────┬──────────────┬────────────┐
│ schematable     │  context   │
│ varcharvarcharvarchar   │
├─────────┼──────────────┼────────────┤
│         │ recent_users │ cte        │
│ main    │ users        │ from       │
│ main    │ recent_users │ from_cte   │
│ main    │ logins       │ join_right │
└─────────┴──────────────┴────────────┘
D SELECT parse_table_names('SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id');
┌───────────────────────────────────────────────────────────────────────────────────────────────┐
│ parse_table_names('SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id') │
│                                           varchar[]                                           │
├───────────────────────────────────────────────────────────────────────────────────────────────┤
│ [orders, customers]                                                                           │
└───────────────────────────────────────────────────────────────────────────────────────────────┘
D SELECT parse_table_names(query) AS tables FROM 'user_queries.csv';
IO Error:
No files found that match the pattern "user_queries.csv"
D SELECT parse_tables('SELECT * FROM products p JOIN inventory i ON p.sku = i.sku');
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                     parse_tables('SELECT * FROM products p JOIN inventory i ON p.sku = i.sku')                      │
│                            struct("schema" varchar, "table" varchar, context varchar)[]                             │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ [{'schema': main, 'table': products, 'context': from}, {'schema': main, 'table': inventory, 'context': join_right}] │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
D SELECT query, is_parsable(query) AS valid
路 FROM (VALUES('SELECT * FROM good_table'),('BAD SQL SELECT *'),('WITH cte AS (SELECT 1) SELECT * FROM cte')) AS t(query);
┌──────────────────────────────────────────┬─────────┐
│                  query                   │  valid  │
│                 varcharboolean │
├──────────────────────────────────────────┼─────────┤
│ SELECT * FROM good_table                 │ true    │
│ BAD SQL SELECT *false   │
│ WITH cte AS (SELECT 1) SELECT * FROM cte │ true    │
└──────────────────────────────────────────┴─────────┘
D SELECT * FROM parse_where('SELECT * FROM MyTable WHERE time > 1 AND time < 100');
┌────────────────┬────────────┬─────────┐
│   condition    │ table_name │ context │
│    varcharvarcharvarchar │
├────────────────┼────────────┼─────────┤
│ ("time" > 1)   │ MyTable    │ WHERE   │
│ ("time" < 100) │ MyTable    │ WHERE   │
└────────────────┴────────────┴─────────┘
D SELECT * FROM parse_where_detailed('SELECT * FROM MyTable WHERE time > 1 AND time < 100');
┌─────────────┬───────────────┬─────────┬────────────┬─────────┐
│ column_name │ operator_type │  value  │ table_name │ context │
│   varcharvarcharvarcharvarcharvarchar │
├─────────────┼───────────────┼─────────┼────────────┼─────────┤
│ time>1       │ MyTable    │ WHERE   │
│ time<100     │ MyTable    │ WHERE   │
└─────────────┴───────────────┴─────────┴────────────┴─────────┘
D SELECT * FROM parse_where('SELECT * FROM MyTable WHERE time BETWEEN 1 AND 100');
┌────────────────────────────┬────────────┬─────────┐
│         condition          │ table_name │ context │
│          varcharvarcharvarchar │
├────────────────────────────┼────────────┼─────────┤
│ ("time" BETWEEN 1 AND 100) │ MyTable    │ WHERE   │
└────────────────────────────┴────────────┴─────────┘
D SELECT * FROM parse_where_detailed('SELECT * FROM MyTable WHERE time BETWEEN 1 AND 100');
┌─────────────┬───────────────┬─────────┬────────────┬─────────┐
│ column_name │ operator_type │  value  │ table_name │ context │
│   varcharvarcharvarcharvarcharvarchar │
├─────────────┼───────────────┼─────────┼────────────┼─────────┤
│ time>=1       │ MyTable    │ WHERE   │
│ time<=100     │ MyTable    │ WHERE   │
└─────────────┴───────────────┴─────────┴────────────┴─────────┘
D SELECT * FROM parse_functions('SELECT upper(name), count(*) FROM users WHERE length(email) > 0');
┌───────────────┬─────────┬─────────┐
│ function_name │ schema  │ context │
│    varcharvarcharvarchar │
├───────────────┼─────────┼─────────┤
│ upper         │ main    │ select  │
│ count_star    │ main    │ select  │
│ length        │ main    │ where   │
└───────────────┴─────────┴─────────┘
D SELECT * from  parse_statements('SELECT 42; INSERT INTO log VALUES (1); SELECT 43;') as statements;
┌──────────────────────────────┐
│          statement           │
│           varchar            │
├──────────────────────────────┤
│ SELECT 42                    │
│ INSERT INTO log (VALUES (1)) │
│ SELECT 43                    │
└──────────────────────────────┘
D SELECT num_statements('SELECT 1; SELECT 2; SELECT 3;');
┌─────────────────────────────────────────────────┐
│ num_statements('SELECT 1; SELECT 2; SELECT 3;') │
│                      int64                      │
├─────────────────────────────────────────────────┤
│                        3                        │
└─────────────────────────────────────────────────┘
D SELECT * FROM parse_tables('PIVOT cities ON year USING sum(population);');
┌─────────┬─────────┬─────────┐
│ schematable  │ context │
│ varcharvarcharvarchar │
├─────────┴─────────┴─────────┤
│           0 rows            │
└─────────────────────────────┘
D

根据存储库页面 https://github.com/zfarrell/duckdb_extension_parser_tools 介绍,这个实验性插件目前只能解析SELECT语句,所以PIVOT解析不出结果。

http://www.dtcms.com/a/445780.html

相关文章:

  • 湖北住房和城乡建设厅网站phpmysql做网站
  • 《量子计算》学习笔记:量子计算的基本定义(续)
  • 哈尔滨网站建设价位上海有名的猎头公司
  • 手写MyBatis第94弹:完整架构回顾与核心技术深度解析
  • 汽车电子Autosar架构BSW层学习路线·附录章节
  • 织梦 网站设计做网站竟然不知道cms
  • Linex操作系统-Shell脚本(六)
  • 2025年ASOC SCI2区TOP,基于动态模糊系统的改进灰狼算法FGWO,深度解析+性能实测
  • Go基础:输入与输出格式化详解
  • Go语言:数据压缩与解压详解
  • Odoo 前端控制器:构建无缝集成的网站页面
  • Go基础:json文件处理详解(标准库`encoding/json`)
  • 网站页头尺寸网站建设实物实训目的
  • RegNet:高效可扩展网络
  • 软考 系统架构设计师系列知识点之杂项集萃(169)
  • 大数据毕业设计选题推荐-基于大数据的人口普查收入数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 实验室网站制作数据交易网站源码
  • 【Kubernetes】(二十)Gateway
  • 爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南——企业级实时数据闭环构建
  • 桂林哪里可以做网站wordpress前台不显示
  • 模拟退火粒子群优化算法(SA-PSO):原理、应用与展望
  • 不用每次都改 `easysearch.yml` 也能改启动参数 —— 用 Docker 环境变量搞定一切
  • 三问岚图,计划登陆港股对消费者意味着什么?
  • 舒尔特方格开源
  • D365财务和运营应用
  • 沧州seo公司哈尔滨seo和网络推广
  • 5.机器学习的介绍
  • 安徽合肥网站制作公司源代码
  • Flink 连接器与格式thin/uber 制品、打包策略与上线清单
  • 玩转ClaudeCode:通过Chrome DevTools MCP实现页面抓取和调试的基础入门