在DuckDB查询中使用lua插件编写lua程序用于输出

DuckDB中使用Lua插件编程

github存储库https://github.com/isaacbrodsky/duckdb-lua
下载

wget http://community-extensions.duckdb.org/v1.4.1/linux_arm64/lua.duckdb_extension.gz

安装和加载

./duckdb141
D install 'lua.duckdb_extension.gz';
D load lua;

输出

-- context示例
D SELECT lua('return "Hello " .. context', 'World');
┌────────────────────────────────────────────┐
│ lua('return "Hello " .. context', 'World') │
│                  varchar                   │
├────────────────────────────────────────────┤
│ Hello World                                │
└────────────────────────────────────────────┘
-- 将lua程序片段执行,但没有返回值,print函数在屏幕控制台输出执行结果
D SELECT lua('s=0 for i=3,1,-1 do s=s+i end print(s)');
6
┌───────────────────────────────────────────────┐
│ lua('s=0 for i=3,1,-1 do s=s+i end print(s)') │
│                    varchar                    │
├───────────────────────────────────────────────┤
│ nil                                           │
└───────────────────────────────────────────────┘
-- 将lua程序片段执行,有返回值,在SQL查询结果中输出
D SELECT lua('s=0 for i=3,1,-1 do s=s+i end return(s)');
┌────────────────────────────────────────────────┐
│ lua('s=0 for i=3,1,-1 do s=s+i end return(s)') │
│                    varchar                     │
├────────────────────────────────────────────────┤
│ 6                                              │
└────────────────────────────────────────────────┘
--利用query查询包含lua程序的拼接字符串,出错处理
D from query('select lua(''return "big" ..'',''db'')');
┌─────────────────────────────────────────────────┐
│          lua('return "big" ..', 'db')           │
│                     varchar                     │
├─────────────────────────────────────────────────┤
│ [string "line"]:1: unexpected symbol near <eof> │
└─────────────────────────────────────────────────┘
--利用query查询包含lua程序的拼接字符串,lua程序正确执行的结果
D from query('select lua(''return "big" ..context'',''db'')');
┌─────────────────────────────────────┐
│ lua('return "big" ..context', 'db') │
│               varchar               │
├─────────────────────────────────────┤
│ bigdb                               │
└─────────────────────────────────────┘
--利用set variable传入数组参数,求平方积,注意 Lua 索引值是以 1 为起始
D SET VARIABLE list_of_int = [1,2,3];

D SELECT lua('s2=1 s=context for i=1,3,1 do s2=s2*s[i]*s[i] end return(s2)',getvariable('list_of_int'));
┌─────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lua('s2=1 s=context for i=1,3,1 do s2=s2*s[i]*s[i] end return(s2)', getvariable('list_of_int')) │
│                                              json                                               │
├─────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 36                                                                                              │
└─────────────────────────────────────────────────────────────────────────────────────────────────┘
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值