我有一个表,其中不同的操作应应用于不同的列。
我们称之为A
:
foo | bar | baz
---------------
0| 1| 2
3| 4| 5
现在假设有一张桌子 B
columnname|operation
--------------------
foo| f_add_1
bar|f_times_2
baz|f_minus_3
如果存在与每个条目相对应的SQL UDF B.operation
,我们通常可以在其中类似地调用它们:SELECT f_add_1(2)
= 3
。
在纯Redshift风格的SQL中,有没有一种方法可以组成这两个表来生成一个表C
,其中table中的操作B
将应用于table中的值A
:
foo | bar | baz
---------------
1| 2| -1
4| 8| 2
实际上,我的“表A”将具有数百万行,而我的“表B”将具有对应于数百或数千列的10个操作。
我当然可以使用包装脚本来执行此操作,但是在一个查询中完成整个操作确实很巧妙。
Amazon Redshift存储过程可以构造包含命令的文本字符串,然后将其传递给EXECUTE
命令。因此,是的,可以基于行的内容来调用适当的函数。
但是,不可能简单地说“将此列的值插入SQL查询并运行匹配的存储过程”。相反,将需要通过单独的查询针对每一行专门调用存储过程。鉴于表具有数百万行,这将是非常低效的。
如果可能的操作数量有限,则更好的方法可能是:
WHERE operation = desired_operation
因此,如果有5个不同的操作,则将需要5个独立的查询才能运行,每个查询都在许多行上运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句