【发布时间】:2020-09-21 16:17:56
【问题描述】:
我正在将数据仓库前端从 Hadoop 后端转换为 Snowflake 后端,我需要将其每个 SQL 函数转换为等效的 Snowflake。我遇到的一件事是处理产生 Infinity/-Infinity 或 NaN(非数字)的公式。
在 Hadoop 中,这只是使用 IS_INF 和 IS_NAN 检查公式的简单问题。在 SQL Server(我们测试的另一个后端)中,这可以使用 SET ARITHABORT OFF/SET ANSI_WARNINGS OFF 来完成。 Hadoop 方法向 SQL 添加了额外的逻辑检查,而 SQL Server 方法直接忽略了错误并返回 NULL,而不是引发错误。我更喜欢后一种方法,因为它不会减慢查询速度,但我愿意接受任何可以在 Snowflake 中实际工作的方法,因为到目前为止我还找不到。
我应该注意到,有一些雪花函数可以帮助避免非常具体的错误,例如除以零(即 DIV0 函数或 NULLIF),但这对我没有帮助有两个原因。首先,这只处理某些问题(除以零)。我需要能够处理任何产生 Inf/NaN 的公式的东西。其次,有问题的公式通常是由最终用户在前端编写的,这意味着我不知道公式的哪个部分是被除数,哪个是除数。公式可能非常复杂(包括 CASE WHEN 或其他函数或任何数量的东西),所以解析除数(所以我可以使用 NULLIF),或者解析除数和除数(所以我可以使用 DIV0)是'不是一个真正的选择。
我注意到 Snowflake 的文档说 FLOAT 数据类型可以处理 Infinity 和 NaN 等特殊值,但我没有看到任何方法可以在公式中实际生成这些值而不会引发错误。
任何帮助将不胜感激。
【问题讨论】:
标签: snowflake-cloud-data-platform