如何在 Vertica 中创建外部过程

2024-01-18

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


维蒂卡的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 http://en.wikipedia.org/wiki/Setuid.

$ 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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Vertica 中创建外部过程 的相关文章

随机推荐