首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DB2到雪花迁移- SQL:使用‘value’子句派生结果表

从DB2到雪花迁移- SQL:使用‘value’子句派生结果表
EN

Stack Overflow用户
提问于 2022-02-11 01:15:27
回答 1查看 165关注 0票数 1

我们从DB2迁移到雪花,在使用“values”子句时遇到了一个范围不足的问题。DB2范围扩展到select查询中的所有表;而雪花仅限于子句中的表:

在DB2中有效:

代码语言:javascript
复制
select * from
t_1
join

table (values
(t_1.c1, ‘foo’)
,(t_1.c1, ‘bar’)
) as t_2 (c1, c2)

on t_1.c5 = t_2.c2

在雪花中无效(语法略有不同-删除“表”):

代码语言:javascript
复制
select * from
t_1
join

(values
(t_1.c1, ‘foo’)
,(t_1.c1, ‘bar’)
) as t_2 (c1, c2)

on t_1.c5 = t_2.c2

这会引发一个错误,即"...t_1是未定义的“。

,有人知道雪花的等效能力吗?

对于某些上下文:这个构造位于我们的业务的一个嵌入过程的后面,而对于返工来说,这意味着大量的投资。

它构成了动态ETL查询的基础,该查询被传递到ADF管道中。有一个前端将组件部署到这个查询中--这个可部署的部分需要尽可能地保持简单。它相当于"(t_1.c1,‘foo’)“行,所以理想情况下,任何解决方案都应该保持此部分不变。

编辑:

为了其他的背景..。

在上面的示例中,我们有一个占位符,它标识来自前端的新部署项的插入点,如下所示:

代码语言:javascript
复制
select * from
t_1
join

table (values
(t_1.c1, ‘foo’)
,(t_1.c1, ‘bar’)
/*client_X_placeholder*/
) as t_2 (c1, c2)

on t_1.c5 = t_2.c2

union

select * from
t_1
join

table (values
(t_1.c1, ‘foo’)
,(t_1.c1, ‘bar’)
,(t_1.c2, 'barfoo')
/*client_Y_placeholder*/
) as t_2 (c1, c2)

on t_1.c5 = t_2.c2

我们正在提取一系列与客户端相关的度量,其中标签为t_2.c2,其结果是t2.c1。相对于现实世界,这仍然是高度简化的。我们需要一种简单的方法来用新的度量来更新占位符及其计算- t2.c1可以封装在一堆函数中和/或驻留在case语句中,等等。

EN

回答 1

Stack Overflow用户

发布于 2022-02-11 06:18:42

我不知道这是否适用于雪花,但如果要在雪花中引用t_2,则需要将其声明为t_1。Db2使用表作为横向(这同样有效)的同义词。所以你可以试着:

代码语言:javascript
复制
select * 
from t_1
join LATERAL (
    values (t_1.c1, ‘foo’)
         , (t_1.c1, ‘bar’)
    ) as t_2 (c1, c2)
  on t_1.c5 = t_2.c2

在SQL99中引入了Db2,并得到了包括Db2在内的许多数据库管理系统的支持。

在Db2中,当从返回表的函数中选择时,通常使用表:

代码语言:javascript
复制
SELECT * FROM TABLE ( myfun() )

这有点类似,所以我想这就是为什么表可以充当横向的同义词(只是猜测)。

我做了一些googling和横向描述,在文档中描述雪花:连接-横向

编辑:

显然,在加入派生表中的values子句时有一个限制。西门朝圣者的答案包含了对此的修复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71074248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档