Netezza - 以干燥方式跨多个查询重用常见的sql代码?

时间:2017-03-13 03:50:51

标签: sql netezza

Netezza查询是否可以包含sql文件(包含特定的sql代码)或者它不是正确的使用方式?

这是一个例子。

我有一些常见的sql代码(比如form_validation),它创建了一些临时表,需要在多个其他查询中使用(比如说common.sqlanalysis1.sql等) - 。从代码管理的角度来看,如果analysis2.sql中的代码在许多其他查询中重复,则维护是非常难以理解的。是否有common.sql方法可以执行此操作 - 例如来自其他查询的DRY来调用重用的代码#include <common.sql>

2 个答案:

答案 0 :(得分:0)

包含sql文件不是正确的方法。如果你希望坚持这个,你可以使用像cpp甚至php这样的预处理器来为你组装文件,并有一个构建过程来生成完成的文件。

但是从可维护性的角度来看,最好为可重用内容创建视图和函数。请注意,这可能会造成优化障碍,因此通常需要进行大量查询。

答案 1 :(得分:0)

我同意,观点,功能(表格值,如果需要)或更可能:存储过程是要走的路。 我们有很多运气,让存储过程根据正在处理的表上的输入参数和元数据动态生成复杂但可重复的代码模式。

一个例子:所有表都有一个'唯一约束'(这不是唯一的,但这并不重要,因为它没有在Netezza中强制执行)具有固定名称UBK_ [tablename] UBK用作存储过程的“信号”,用于标识经典“kimball样式”类型2维表的BusinessKey列。 然后,SP可以通过提供目标表的名称和包含所有相同列名和数据类型的“stage”表,将“传入”行应用于目标表。

其他示例可以是一个SP,它接受一个tablename和三个参数,每个参数都带有'string,of,columns',并在第一个参数的列上使用group-by执行'excel样式pivot',并使用第二个参数至于做一个'select distinct'来为透视列生成新的列名,并在第三个参数的列上对一个目标表执行'sum',为...指定名称...

你能跟我来吗?

我认为nzsql命令行工具可能能够执行'include',但强大的'构建块存储过程'和perl / python和/或ETL工具的组合很可能是更好的选择< / p>