栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以生成动态SQL以返回雪花中具有不同列的行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以生成动态SQL以返回雪花中具有不同列的行

鉴于此输入:

create or replace table t asselect parse_json($1) my_jsonfrom values('{ "FruitShape":"Round", "FruitSize":55 } '),('{ "FruitShape":"Square"  } '),('{ "FruitShape":"Oblong", "FruitSize":22, "FruitColor":"Chartreuse" } ');

此查询将生成动态SQL:

select 'select '   || (select listagg(distinct 'my_json:'||key::text, ',') from t, lateral flatten(input=>t.my_json, mode=>'OBJECT'))   || ' from t;';

生成的SQL及其输出:

select my_json:FruitShape, my_json:FruitSize, my_json:FruitColor from t;MY_JSON:FRUITSHAPE | MY_JSON:FRUITSIZE | MY_JSON:FRUITCOLOR-------------------+-------------------+-------------------"Round" | 55     | NULL   "Square"| NULL   | NULL   "Oblong"| 22     | "Chartreuse"

此存储过程将执行动态SQL,而无需剪切和粘贴:

create or replace procedure p()returns stringlanguage javascriptstrictexecute as calleras$$  const statement1 =  `    select 'select '       || (select listagg(distinct 'my_json:'||key::text, ', ') from t, lateral flatten(input=>t.my_json, mode=>'OBJECT'))       || ' from t'  `  const rs1 = snowflake.execute ({sqlText: statement1})  rs1.next()  const statement2 = rs1.getColumnValue(1)  const rs2 = snowflake.execute ({sqlText: statement2})  return 'SUCCESS'$$;

然后,您可以调用存储过程并收集结果:

call p();select * from table(result_scan(-2))

您提到了根据某些元数据来限制输出。您可以在动态SQL中执行此操作,例如,通过过滤不同的字段列表。

感谢davidgarrison的result_scan()技术!

希望对您有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517222.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号