【问题标题】:Overflow error in RedshiftRedshift 中的溢出错误
【发布时间】:2018-06-05 20:01:06
【问题描述】:

我正在Amazon Redshift 上运行以下非常简单的查询:

SELECT member_id,
       COUNT(DISTINCT TO_CHAR(created_at,'YYYY-MM-DD')) AS days
FROM ads.fbs_modality_staging
WHERE member_id in (select memberid from auth.members)
group by member_id

但这给了我以下错误:

An error occurred when executing the SQL command:
SELECT member_id,
       COUNT(DISTINCT TO_CHAR(created_at,'YYYY-MM-DD')) AS days
FROM ads.fbs_modality_staging
WHERE member_id IN (SELEC...

[Amazon](500310) Invalid operation: Overflow (Integer valid range -2147483648 to 2147483647)
Details: 
 -----------------------------------------------
  error:  Overflow (Integer valid range -2147483648 to 2147483647)
  code:      1207
  context:   Value: '2952163128494839000', Character: '8'
  query:     2748804
  location:  :0
  process:   query5_95_2748804 [pid=0]
  -----------------------------------------------;

Execution time: 2.11s
1 statement failed.

我检查了一下,表 members 没有“2952163128494839000”的 memberid。我还尝试使用CONVERTCAST 函数将memberid 转换为integer,但我得到了同样的错误。

为什么我会遇到这个错误,我该如何解决?

【问题讨论】:

  • 如果members 没有超出范围的memberid,那么可能modality_staging 有一个超出范围的member_id。你说你在哪一列上使用了 CAST/CONVERT:。您是否将members.memberid 转换为与modality_staging.member_id 相同的类型?
  • 我在convertmodality_staging.member_idmembers.memberid 上都使用了convert
  • 转换成什么? modality_staging.member_id 是什么类型?这可能是您应该转换的内容。

标签: sql amazon-redshift


【解决方案1】:

想必你的会员id比较有问题。我发现您不太可能有足够的日期来溢出count(distinct)

将它们转换为字符串:

SELECT member_id,
       COUNT(DISTINCT TO_CHAR(created_at,'YYYY-MM-DD')) AS days
FROM ads.fbs_modality_staging
WHERE cast(member_id as varchar(255)) in (select cast(memberid as varchar(255)) from auth.members)
group by member_id

【讨论】:

  • 转换为 varchar 有效。非常感谢 :)。我想知道为什么转换为整数不起作用..你有什么想法吗?
  • @Patthebug 。 . .显然,因为并非所有值都可以转换为整数。整数具有明确定义的可接受值范围。
猜你喜欢
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多