我有几个表作为数据源,它们的结构极为相似。我只关心它们的某些列,并且想加入它们。所以我现在要做的是:
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(雪花仓库)中是否可能发生这种情况?
答案 0 :(得分:0)
恐怕您不能完全做到。但是,您可以使用Snowflake jekyll-image-size(SP)有效地实现此目的。您可以根据传递给SP的参数在SP中构造SQL查询文本,然后执行它。您可以例如将表名称等的数组传递给它。
一个问题是,今天的雪花Stored Procedures中的SP。为了克服这个问题,您可以例如将查询结果保存到新表中(名称用SP硬编码,或作为参数传递给SP),然后使用单独的SELECT查询。