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

duckdb polyglot 插件的使用

polyglot插件github存储库地址 :https://github.com/tobilg/duckdb-polyglot/
这个插件能把33种SQL方言翻译成DuckDB,如果duckdb数据库中有相应的数据,还可以用polyglot_query函数直接输出执行结果。

  1. 安装
D INSTALL polyglotFROMcommunity;DLOADpolyglot;DSELECTpolyglot_transpile('SELECT NOW()','postgresql');┌──────────────────────────────────────────────────┐ │ polyglot_transpile('SELECT NOW()','postgresql')│ │varchar│ ├──────────────────────────────────────────────────┤ │SELECTCURRENT_TIMESTAMP│ └──────────────────────────────────────────────────┘
  1. 用它来翻译一个sql脚本中的语句。
    有一个脚本文件pgctetree.txt, 内容如下:
WITHRECURSIVE search_tree(id,link,data,path)AS(SELECTt.id,t.link,t.data,ARRAY[ROW(t.f1,t.f2)]FROMtree tUNIONALLSELECTt.id,t.link,t.data,path||ROW(t.f1,t.f2)FROMtree t,search_tree stWHEREt.id=st.link)SELECT*FROMsearch_treeORDERBYpath;

可以用read_text读出它的内容到content列,然后把content列传递给polyglot_transpile函数。

D.modeduckbox Dselect*fromread_text('pgctetree.txt');┌───────────────┬───────────────────────────────────────────────────────────────────┬───────┬──────────────────────────┐ │ filename │ content │ size │ last_modified │ │varcharvarchar│ int64 │timestampwithtimezone │ ├───────────────┼───────────────────────────────────────────────────────────────────┼───────┼──────────────────────────┤ │ pgctetree.txt │WITHRECURSIVE search_tree(id,link,data,path)AS(\r\n SE… │3022026-02-1703:00:49+08│ └───────────────┴───────────────────────────────────────────────────────────────────┴───────┴──────────────────────────┘ DSELECTpolyglot_transpile(content,'postgresql')fromread_text('pgctetree.txt');┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ polyglot_transpile("content",'postgresql')│ │varchar│ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │WITHRECURSIVE search_tree(id,link,data,path)AS(SELECTt.id,t.link,t.data,[ROW(t.f1,t.f2)]FROMtree t UN… │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

它自动去掉了换行符。

3.存在问题

  1. 不能识别不同方言中同一个运算符的差异,比如 postgresql中的/表示整除,而duckdb中的/表示普通除法。
DSELECT*FROMpolyglot_query('SELECT 1/2','postgresql');┌─────────┐ │(1/2)│ │double│ ├─────────┤ │0.5│ └─────────┘
  1. 不能识别变量和字面常量, 字面常量1和2显然不会为NULL, 它做了多余的判断。
DSELECTpolyglot_transpile('SELECT decode(1,2,3,4)','oracle');┌───────────────────────────────────────────────────────────────────────┐ │ polyglot_transpile('SELECT decode(1,2,3,4)','oracle')│ │varchar│ ├───────────────────────────────────────────────────────────────────────┤ │SELECTCASEWHEN1=2OR(1ISNULLAND2ISNULL)THEN3ELSE4END│ └───────────────────────────────────────────────────────────────────────┘
http://www.jsqmd.com/news/387727/

相关文章:

  • 完整教程:给 MHTML 添加滚动条.mhtml
  • 生产环境deepseek文档导出最佳实践与性能优化
  • GA-TCN-Transformer组合模型回归+SHAP分析+新材料预测+多输出!深度学习可解释分析MATLAB代码
  • CentOS 下 Keepalived 高可用配置
  • 在中国区EKS集群使用 kgateway 代理 Lambda 函数的实践过程
  • Photoshop - Photoshop 工具栏(62)切片选择工具
  • 永辉超市购物卡回收,省心又划算的处理之道 - 京顺回收
  • Eureka 在大数据计算中的应用实践
  • C++初学的常见问题 之五——C++ 数组、指针与静态成员深度剖析:从常见错误到核心原理
  • C++初学的常见问题 之四
  • 2025 年终总结——解构,重构与锚点
  • Spring3整合MyBatis构建增删改查操作
  • 开启超人类推理之旅![特殊字符]✨
  • C++初学的常见问题 之三
  • 2月16号
  • 神经网络驱动的商业智能:需求与价格预测全流程解析
  • AI销冠系统是什么?数字员工在企业创新与效率提升中的价值何在?
  • ios 快捷指令 github跳转deepwiki
  • openclaw怎么调用记忆的
  • 前端营销I(From AIGC)
  • 10kV线路微机继电保护装置源代码,配套pcb图纸和bom。 适合自己学习的素材,也可作为基础...
  • ctfshowweb361--一道题从0入门SSTI模板注入
  • 深入解析:【Linux】零基础学习命名管道-共享内存
  • 华黎卡的排列构造
  • 2026年海外GEO系统优化推广服务商Top 5揭晓:谁在真正驱动中国品牌出海? - 深圳昊客网络
  • AI元人文:界面东西——在诗性与逻各斯间
  • 我的算法修炼之路--8——预处理、滑窗优化、前缀和哈希同余,线性dp,图+并查集与逆向图 - 指南
  • JVM学习笔记:第三章——运行时数据区(部分)
  • 自助建站系统哪个好?自助建站软件选哪个好 - 码云数智
  • vue3微信小程序Nodejs无人机监控管理平台设计与实现