【问题标题】:Error inserting RFC3339 string into bigquery将 RFC3339 字符串插入 bigquery 时出错
【发布时间】:2020-03-30 20:39:06
【问题描述】:

我关注datetime 字符串2020-03-30T16:26:37-04:00,当我尝试将其插入bigquery(我将字符串对象作为json 对象的一部分发送)时出现错误

Invalid datetime string "2020-03-30T16:26:37-04:00" > '无效'`。

根据这篇文章,我认为格式没问题,但我仍然收到错误

What format does BigQuery timestamp take?

  • 这是从 gcp-dataflow 管道插入到 bigquery 的
  • 我使用的是apache-beam[gcp]==2.19.0版本

总结我在 BigQuery 中的插入方式

  • 我从 pubsub 以字节流形式接收消息
  • 我有一个解码器,它将字节流解码为字典列表,即[{"field_one":value, "field_two":value_2}]

  • 然后将此字典发送至bigquery

【问题讨论】:

  • 澄清一下,这是从 Dataflow/Beam 作业中插入的吗?如果是,哪个 SDK 和版本?
  • 您能否为您的问题添加更多信息?您如何尝试将此数据插入 BigQuery?你在使用数据流吗?如果是这样,您能否分享您的管道和数据样本?
  • 用答案更新了我的问题。
  • 正如您在此处看到的 (cloud.google.com/bigquery/docs/reference/standard-sql/…),dattime 不支持时区。您可以尝试改用时间戳吗?
  • @EmAe 对你有用吗?

标签: google-bigquery timestamp google-cloud-dataflow apache-beam


【解决方案1】:

如您所见hereDATETIME 类型不支持时区。
正确的语法是YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.DDDDDD]],其中:

YYYY:四位数字的年份
[M]M:一位或两位数字的月份
[D]D:一位 或两位数的日期
(|T):空格或“T”分隔符
[H]H:一 或两位数小时(有效值从 00 到 23)
[M]M:一位或两位 数字分钟(有效值从 00 到 59)
[S]S:一位或两位数 秒(从 00 到 59 的有效值)
[.DDDDDD]:最多六个 小数位数(微秒精度)

如果您需要时区,请考虑使用TIMESTAMP
对于TIMESTAMP,语法为YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.DDDDDD]][time zone],其中:

YYYY:四位数字的年份
[M]M:一位或两位数字的月份
[D]D:一位 或两位数的日期
(|T):空格或T 分隔符
[H]H:一 或两位数小时(有效值从 00 到 23)
[M]M:一位或两位 数字分钟(有效值从 00 到 59)
[S]S:一位或两位数 秒(从 00 到 59 的有效值)
[.DDDDDD]:最多六个 小数位数(微秒精度)
[时区]:字符串 代表时区。当时区未明确时 指定时,使用默认时区 UTC。查看时区 详细信息部分。

请注意,当向时间戳字段插入新值时,该值将转换为 UTC。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多