如何在Vertica SQL中创建表值函数?

问题描述 投票:0回答:1

有人知道如何在Vertica SQL中创建表值函数吗?

例如,我想创建一个函数

f_student_name()

需要输入:student_id

返回输出:student_name

在查询中,直接从students表中提取,其中student_id, student_name是唯一的1:1映射。

用例:不必为许多查询而经常在同一表上联接,从而提高了可读性并减少了意大利面条式代码。

我似乎找不到任何文档。 Vertica中的功能文档仅提供了通过硬编码创建功能的示例(当...然后...时为CASE x)

我想使用VSQL构建此表值函数,但是使用Python(并在Vertica中运行该函数)的最佳解决方案也可以。

python sql function vertica vsql
1个回答
0
投票

表值函数倾向于在查询计划中创建很多嵌套循环。 Vertica作为大数据DBMS具有通用的体系结构,该体系结构通常会避免任何会使查询计划变慢的事情。

联接不是意大利面条代码。它们是关系范式的一部分。

但是为了简化代码并使查询更快,请尝试使用扁平列

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充满了魔法-实际上,它的表现非常出色。

就我而言,更清洁的方法....


© www.soinside.com 2019 - 2024. All rights reserved.