雪花 - 如何使用函数显示列名?

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 示例来构建此类查询)

【讨论】:

您能否提供第一种方法的示例。

以上是关于雪花 - 如何使用函数显示列名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在雪花中使用 SQL 用户定义函数?

如何在雪花中使用 parse_xml 忽略损坏的 xml 行

雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名

如何从 impala 数据集市显示列名

如何在雪花中调用另一个过程中的过程

使用雪花连接器和 COPY INTO 功能将 csv 上传到雪花时如何指定分隔符