如何在VerticaSQL中创建表值函数?

mdfafbf1  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(452)

有人知道如何在VerticaSQL中创建表值函数吗?
例如,我想创建一个函数 f_student_name() 接收输入: student_id 返回输出: student_name 在查询中,直接从 students table,在哪里 student_id, student_name 是唯一的1:1Map。
用例:不必不断地在同一个表上加入大量的查询,提高了可读性并减少了意大利面代码。
我好像找不到这方面的任何文件。vertica中的函数文档只给出了通过硬编码创建函数的示例(当。。。然后……)
我想使用vsql构建这个表值函数,但是使用python(并让函数在vertica中工作)的最佳解决方案也可以。

9fkzdhlc

9fkzdhlc1#

表值函数倾向于在查询计划中创建大量嵌套循环。vertica是一个大数据dbms,它有一个通用的体系结构,可以避免任何减慢查询计划的事情。
连接不是意大利面代码。它们是关系范式的一部分。
想想看,我所知道的意式代码指的是过程或面向对象语言的过程流。您可以用任何语言创建意大利面代码,从cobol over pascal到c,甚至是python,但不能用sql构成的描述性语言。。。
但要简化代码并使查询更快,请尝试使用扁平列:

CREATE TABLE f_marks (
  mark_ts TIMESTAMP
, subject_id INT
, stud_id INT
, subject VARCHAR(32) 
  DEFAULT (SELECT subject FROM d_subject WHERE id=f_marks.subject_id)
, stud_name VARCHAR(32) 
  DEFAULT (SELECT stud_name FROM d_student WHERE id=f_marks.stud_id)
);

您插入到 f_marks 使用:

INSERT INTO f_marks (
  mark_ts,subject_id,stud_id
) VALUES (
  CURRENT_TIMESTAMP,4321,123986
)

,两个呢 VARCHAR 它充满了魔力,而且它的表现也相当出色。
一个更干净的方法,就我而言。。。。
这是上面的文件:https://www.vertica.com/docs/10.0.x/html/content/authoring/analyzingdata/flattenedtables/flattenedtables.htm

相关问题