5

我正在从 SQL Server 过渡到 Vertica。有没有类似的方法来创建变量?

通常我会做类似的事情:

Define @myVariable int
Set @myVariable = select MAX(Field1) from myTable
4

4 回答 4

5

我不认为 Vertica 允许使用变量,除非您直接使用 vsql,但是 vsql 变量非常有限,不会按照您的预期执行:

-- this will work
\set a foo
\echo :a
foo

-- this is not what you expect:
\set a NOW()
\echo :a
NOW()

\set a select max(id) from s.items()
\echo :a
selectmax(id)froms.items()

有关更多信息,请参阅 https://my.vertica.com/docs/6.1.x/HTML/index.htm#2732.htm上的 vertica 文档

于 2013-06-11T06:37:33.087 回答
2

在 Vertica 中“创建变量”的方式与在 SQL Server 中没有“创建变量”的方式相同。您要转换的是 T-SQL 脚本。

您可以在 Vertica 中执行相同的操作,方法是创建在数据库外部运行的 Perl、Python 或 Java ... 脚本,或者在 Vertica内部运行的 C++ 或 R 或​​ Java 中编写用户定义的函数。

于 2016-02-05T00:09:50.170 回答
0

如果你使用 vsql,你可以创建包含查询结果的变量,虽然它有点复杂:

vsql -v INARG=33假设您使用;启动 vsql

SELECT :INARG+1;                -- Set up the query
\pset format u
\pset t                         -- Update output format to bare
\g `echo /tmp/dyneval`          -- Eval the query and write into file
\set DYNARG `cat /tmp/dyneval`  -- Set var from shell command output
\echo :DYNARG

所以基本上我们将查询结果写入文件并将文件的内容读入变量。

您可以使用/tmp/dyneval-${PPID}_id而不是/tmp/dyneval,因此您可以确保并行执行不会相互改变。(PPID是父进程的进程ID,即vsql进程的PID。)

该解决方案有一些限制:

  • 假设一个 linux 环境 (echo, cat)
  • 它会更改输出格式设置 (\pset)
于 2021-11-04T14:28:55.573 回答
0

您可以:variable_name在 Vertica 中使用用户输入变量。例如:

select date_time from table_1 where date_time between :start and :end

在上面startend是变量。运行查询时,会打开一个对话框,提示您输入 和 的startend

于 2017-04-13T21:58:56.333 回答