【问题标题】:Cannot cast '' to bigint in presto无法立即将“”转换为 bigint
【发布时间】:2018-10-21 06:30:34
【问题描述】:

我试图在我的查询中清除'null',但运行它时仍然出现错误, 一直告诉我 'cannot cast '' to bigint,有什么办法可以解决吗?

我的查询

select m.app, m.hour,m.user_id, 
 m.avg_minutes_watched, n.userid, n.watched_mins, n.active FROM 

(SELECT app,
substr(hour,1,8) hour, 
CAST(COALESCE(json_extract_scalar(json, '$.user_id'), '-999999') as BigInt) user_id,
CAST(COALESCE(json_extract_scalar(json, '$.playback_time'), '-999999') as BigInt) /60000 avg_minutes_watched
FROM prod
WHERE event_type = 'user_session_complete' AND hour > '20180331' and hour < '20180501')m

left join

(select userid, watched/60000 watched_mins,
(case when watched/60000 >= 2 then 'active' else 'not_active' end) active  from est where realdate > '2018-03-31' and realdate < '2018-05-01') n

on m.user_id = n.userid
order by m.hour, m.user_id;

错误

Query 20180510_220127_17857_bxg5s, FAILED, 72 nodes
Splits: 5,178 total, 644 done (12.44%)
0:04 [39.2M rows, 1.93GB] [9.32M rows/s, 469MB/s]

查询 20180510_220127_17857_bxg5s 失败:无法将 '' 转换为 BIGINT

【问题讨论】:

  • edit 格式化这堵无法阅读的文字墙。
  • 想通了,把 cast 换成 try_cast 就行了
  • 我认为问题不在于null,而在于您的字符串为空。
  • @Dain Sundstrom 是的,你是对的!我有空字符串,所以我把这些空字符串转移到-999999,但仍然无法正常工作..所以我最终使用try_cast,解决了问题。

标签: sql casting type-conversion presto trino


【解决方案1】:

如果转换失败,TRY_CAST 将返回 null:

TRY_CAST(json_extract_scalar(json, '$.user_id') as BigInt) user_id 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2021-06-23
    • 2012-04-11
    • 2012-07-20
    • 2019-12-13
    • 2016-01-01
    • 2023-03-11
    相关资源
    最近更新 更多