【问题标题】:Why would BigQuery suddenly throw data format error为什么 BigQuery 会突然抛出数据格式错误
【发布时间】:2019-03-18 17:58:45
【问题描述】:

以下查询突然停止工作:

SELECT
  CAST((SELECT up.value.string_value FROM UNNEST(user_properties) up WHERE key = "user_id") AS INT64) AS user_id,
  (TIMESTAMP_MILLIS(CAST(event_timestamp/1000 AS INT64))) AS event_date
`firebase.dataset.events_*`

错误如下:

bad int64 value:

查询几个月来一直运行良好,今天发生了一些事情导致了这个错误。有没有人有同样的问题?问题可能出在我们的数据中吗?这可能是 GCP 方面的临时问题吗?谢谢!

【问题讨论】:

  • 对我来说听起来像是一个溢出问题,你确定 event_timestamp/1000 仍然适合 int64 吗?
  • 我找到了问题所在。 user_id 字段是一个字符串,一些事件(原因不明)包含一个空字符串,不能转换为整数。我认为解决方案是 1)修复在我们的应用程序上发送空字符串的错误和 2)忽略空字符串的安全转换/忽略带有 if 语句的行。

标签: sql firebase google-bigquery


【解决方案1】:

使用 safe_cast() 代替强制转换

SELECT
  safe_cast((SELECT up.value.string_value FROM UNNEST(user_properties) up WHERE key = "user_id") AS INT64) AS user_id,
  (TIMESTAMP_MILLIS(CAST(event_timestamp/1000 AS INT64))) AS event_date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 2017-09-21
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多