雪花 - 如何使用函数显示列名?
Posted
技术标签:
【中文标题】雪花 - 如何使用函数显示列名?【英文标题】:Snowflake - how to display column name using function? 【发布时间】:2019-11-15 00:17:50 【问题描述】:我没有从 Snowflake 文档中获得关于如何使用雪花函数获取列名的太多帮助。
我有自动报告,可以计算给定日期。在这里
select
sum(case when logdate = to_date(dateadd('day', - 10, '2019-11-14')) then eng_fees + data_fees end) AS to_date(dateadd('day', - 10, '2019-11-14'))
from myTable
where logdate = '2019-11-04'
我在下面的列名得到以下输出
to_date(dateadd('day', - 10, '2019-11-14'))
100
我的列名
的预期输出2019-11-04
100
如何在 Snowflake 中将预期日期打印为列名?
【问题讨论】:
用例是什么?是否仅用于在 Snowflake Web UI 中打印? 【参考方案1】:您的声明使用 AS 来命名您的列。 Snowflake 会将其视为文字,而不是计算。我认为,为了执行您在函数中请求的操作,您需要使用 javascript 函数。这将允许您使用预定义的计算列名称动态构建 SQL 语句。
https://docs.snowflake.net/manuals/sql-reference/udf-js.html
【讨论】:
我认为数据库中根本不可能有列名表达式。您必须使用 UDTF(SQL 和 JavaScript)预先声明列名,并且标量函数不会影响列名。【参考方案2】:如果不使用外部功能(或TASK
调度),您将无法拥有动态列名。
您可以创建一个生成VIEW
的JavaScript 存储过程,其中列名可以通过动态参数/表达式设置。
处理此问题的常规方法是使用报告工具,该工具可以显示带有动态标题的固定列结果集或完全运行动态 SQL。
【讨论】:
【参考方案3】:我看到了两条接近你想要的路径:
1) 您可以简单地使用 UNION 将标题显示为第一行并将实际的列别名更改为 1....N - 这样它们就可以提供列数 - 这将是最快的,并且最便宜的
2)您可以使用动态 SQL 生成一个查询,该查询将动态填充您的别名,然后简单地运行它(您可以使用 PIVOT 示例来构建此类查询)
【讨论】:
您能否提供第一种方法的示例。以上是关于雪花 - 如何使用函数显示列名?的主要内容,如果未能解决你的问题,请参考以下文章
如何在雪花中使用 parse_xml 忽略损坏的 xml 行