【问题标题】:Casting a very large number to NULL in a query在查询中将非常大的数字转换为 NULL
【发布时间】:2021-03-08 15:37:51
【问题描述】:

我正在尝试从雪花数据库中检索数据。但是当我查询数据时,它没有说明“Failed to cast variant value {numberLong: -8301085358432}”。从错误中我了解到,我的 SQL 查询中的值有一个很长的数字。

这是我的查询:

SELECT price,
       total_price,
       quantity
From Table1

以上三个量中的任何一个都可能有长号。我该如何解决这个numberLong 错误。如果值太长,有没有办法将该值转换为 NULL。

【问题讨论】:

  • 你能提供你用来提取它的 SQL 吗?
  • 我没有Snowflake知识,但是在Oracle、SQL Server、MySQL、Postgres中,缩小领域没有捷径;为了弄清楚是哪一列产生了错误,我会注释掉其他列并一次遍历它们以找到包含错误的列,并从那里找到一种查看排序数据以确定错误值的方法和直接修复。
  • @a_horse_with_no_name 我正在使用雪花
  • 你确定你分享了整个错误信息吗?
  • 我的猜测是您的基础数据是一个变体,无论是在视图中还是在某个地方,您都试图将值转换为其他东西。如果您可以提供基础列的数据类型以及 ddl(如果它是视图),那将会很有帮助

标签: sql snowflake-cloud-data-platform dbt


【解决方案1】:

也许我错了,但我认为错误信息不完整。为了重现错误,我运行以下命令:

create table testv ( v variant);

insert into testv select '{numberLong: -8301085358432}'::variant;

create view dbt_likes_views as select to_decimal(v) price from testv;

select price
from dbt_likes_views;

无法将变体值“{numberLong: -8301085358432}”转换为 FIXED

如果是这种情况,那么您需要检查变量列中的数据。

【讨论】:

  • 因此您的变体列之一包含该数据:{numberLong: -8301085358432}。检查您的哪些列是变体,然后查找此错误。您标记了 DBT,所以我假设您使用 DBT。 DBT 为表创建视图,其中一个视图可能是将变量列转换为数字。
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 2011-08-23
  • 2013-01-21
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多