如何在Vertica中创建外部过程

时间:2015-02-10 12:55:46

标签: sql vertica

如何在Vertica中创建使用带有FROM, WHERE, GROUP BY, ORDER BY, LIMIT等子句的SQL的函数/过程?

2 个答案:

答案 0 :(得分:8)

Vertica的create function语法禁止在expression中使用某些条款。

创建功能

CREATE [ OR REPLACE ] FUNCTION
... [[db-name.]schema.]function-name ( [ argname argtype  [, ...] ] )
... RETURN rettype
... AS 
... BEGIN
...... RETURN expression;
... END;
  

注意: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'

您可以配置使用bash调用vsql客户端的过程。以下脚本可以做到这一点。您的脚本也可以获取Vertica传递的参数。

Bash程序脚本

#!/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

使用admintool GUI或命令行

安装脚本

安装外部脚本

脚本必须拥有正确的所有者,并且必须设置setuid标志。您可以使用chmod

执行此操作
$ admintools -t install_procedure -d vmartdb -f /scratch/helloworld.sh -p ownerpassword
Installing external procedure...
External procedure installed

在数据库中创建脚本然后调用它

CREATE PROCEDURE my_proc_name() AS 'my_script.sh' LANGUAGE 'external' USER 'db_user';
select my_proc_name();

答案 1 :(得分:-1)

Vertica不像某些数据库中那样支持存储过程。相反,它具有用户定义的功能。您可以用Java或其他方式编写它们,但它在数据库中运行,就好像它是SP一样。 (如果你想要的话,它还支持外部程序在数据库之外运行东西)