如何在Vertica中创建使用SQL FROM, WHERE, GROUP BY, ORDER BY, LIMIT等语句的函数/过程 ?
Vertica的create function语法禁止使用某些条款expression.
CREATE [ OR REPLACE ] FUNCTION
... [[db-name.]schema.]function-name ( [ argname argtype [, ...] ] )
... RETURN rettype
... AS
... BEGIN
...... RETURN expression;
... END;
Run Code Online (Sandbox Code Playgroud)
注意:CREATE FUNCTION定义中只允许一个RETURN表达式.不允许使用 FROM,WHERE,GROUP BY,ORDER BY,LIMIT,聚合,分析和元函数.
为了解决这个问题,您可以使用程序代替.Vertica中的过程与存储过程/ PL-SQL不可比(Vertica不支持它们).它们是安装用另一种语言编写的脚本(例如Bash).他们采用语法......
CREATE PROCEDURE [[db-name.]schema.]procedure-name (
... [ argname ] [ argtype [,...] ] )
... AS 'exec-name'
... LANGUAGE 'language-name'
... USER 'OS-user'
Run Code Online (Sandbox Code Playgroud)
您可以配置使用bash调用vsql客户端的过程.以下脚本可以做到这一点.您的脚本也可以获取Vertica传递的参数.
#!/bin/bash
/opt/vertica/bin/vsql --command 'select count(*) from my_table where condition > value;' -w 'XXX' --echo-all -h host db_name user_name
exit 0
Run Code Online (Sandbox Code Playgroud)
使用admintool GUI或命令行安装脚本
该脚本必须具有正确的所有者,并且setuid必须设置标志.你可以使用chmod做到这一点.
$ admintools -t install_procedure -d vmartdb -f /scratch/helloworld.sh -p ownerpassword
Installing external procedure...
External procedure installed
Run Code Online (Sandbox Code Playgroud)
CREATE PROCEDURE my_proc_name() AS 'my_script.sh' LANGUAGE 'external' USER 'db_user';
select my_proc_name();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4662 次 |
| 最近记录: |