是否可以创建SQL查询模板?

时间:2019-07-30 12:02:41

标签: snowflake-data-warehouse

我有几个表作为数据源,它们的结构极为相似。我只关心它们的某些列,并且想加入它们。所以我现在要做的是:

SELECT 'table_a' AS source, col1, col2, col3, col4
FROM table_a as source_table
INNER JOIN other on source_table.id = other.id

UNION ALL

SELECT 'table_b' AS source, col1, col2, col3, col4
FROM table_b as source_table
INNER JOIN other on source_table.id = other.id

UNION ALL

SELECT 'table_c' AS source, col1, col2, col3, col4
FROM table_c as source_table
INNER JOIN other on source_table.id = other.id

UNION ALL

SELECT 'table_d' AS source, col1, col2, col3, col4
FROM table_d as source_table
INNER JOIN other on source_table.id = other.id

我想做这样的事情:

query(param1, param2) := {
    SELECT param1 AS source, col1, col2, col3, col4
    FROM param2 as source_table
    INNER JOIN other on source_table.id = other.id
}

query('table_a', table_a)
UNION ALL
query('table_b', table_b)
UNION ALL
query('table_c', table_c)
UNION ALL
query('table_d', table_d)

我知道如何在编程语言中做到这一点(使用模板引擎并构造查询字符串)。

在SQL(雪花仓库)中是否可能发生这种情况?

1 个答案:

答案 0 :(得分:0)

恐怕您不能完全做到。但是,您可以使用Snowflake jekyll-image-size(SP)有效地实现此目的。您可以根据传递给SP的参数在SP中构造SQL查询文本,然后执行它。您可以例如将表名称等的数组传递给它。

一个问题是,今天的雪花Stored Procedures中的SP。为了克服这个问题,您可以例如将查询结果保存到新表中(名称用SP硬编码,或作为参数传递给SP),然后使用单独的SELECT查询。