繁体   English   中英

如何从雪花存储过程中的给定表动态 select 列?

[英]How to dynamically select columns from a given table in snowflake stored procedure?

我正在尝试创建一个从两个表中动态选择列的过程。 我已经对查询进行了硬编码,效果很好。

#现有查询

create table mydb.result_table as 
select 
t1.id,
t1.name,
t1.place,
t1.product
t1.prize
t2.id,
t2.name,
t2.place,
t2.product,
t2.prize
from source_db.source_table t1
full outer join target_db_target_table t2 on 
t1.id=t2.id and t1.name=t2.name
where t1.place<>t2.place

现在我需要创建一个过程,它基本上是 select 列动态地从给定的表名,并用给定的键连接两者

所以像下面这样

CREATE OR REPLACE PROCEDURE result(source_db varchar, source_table VARCHAR, targt_db varchar, target_table VARCHAR, key_join varchar<not sure can pass list>, filter_col varchar )
returns string not null
language javascript
as
$$
var query= `create table mydb.result_table as 
select
t1.<all columns from source_db and source_table>
t2.<all columns from targt_db and target_table >
from <source_db and source_table> as t1
full outer join  <target_db_target_table> as t2
on <key_join> where <t1.filter_col <> t2.filter_col>
`
return 'success';
$$;

我没有看到为这种用例动态选择列的示例。 对此有什么解决办法吗?

您需要为每个表中的列列表查询信息架构,并使用结果动态构建您的 SQL 语句。

您还需要注意多个表中存在的相同列名,因为您显然不能在一个表中多次出现相同的列 - 因此您需要根据需要动态重命名列

只需查询 INFORMATION_SCHEMA.COLUMNS 视图以访问表的列,然后您就可以动态构建查询:

https://docs.snowflake.com/en/sql-reference/info-schema/columns.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM