【问题标题】:Google BigQuery doesn't parse nullable 2nd timestamp fieldGoogle BigQuery 不解析可为空的第二个时间戳字段
【发布时间】:2013-12-16 22:03:52
【问题描述】:

我正在尝试使用 CSV 将大量数据导入到平面表中。在导入 BigQuery 报告期间:

- File: 0 / Line:6659 / Field:11: Could not parse '' as a timestamp

在架构中,我有 2 个时间戳:字段 4 和 11 。两者都可以为空。对于第二个时间戳,字段 11 上的行条目确实为空。

它应该像这样工作还是我需要将其发送为“0”?

【问题讨论】:

  • 我正在尝试重现,但在我的简单测试中这是可行的。你能分享更多信息吗? (在此处粘贴第 6659 行和表格说明)
  • @Fh。 Schema 太大而无法粘贴,但这些是前几个字段:channel:string、type:string、kind:string、activity_datetime:timestamp、user_id:integer、user_country_iso:string、user_language_iso:string、user_segment:string、sale_id:integer、 sale_name:string, sale_start_datetime:timestamp, sale_audience_id:integer, sale_audience_name:string, ...
  • @Fh。这是第 6659 行 "Web","View","Login","2013-10-01 06:31:50.0354","2861905","BE","nl-BE","","0","","","","","","","","","0","","","","","","","","","","","","","" ,"",""
  • @Fh。我现在将所有空日期转换为 UNIX 纪元,这很有效。但是使用实际的 null 可能会更好
  • 当我没有时间戳到 bigquery 时,我尝试发送 NULL 值,但我失败了。我尝试了 Null、None、“​​”,但我得到了这个:``` - 文件:0 / 行:101 / 字段:53:无法将“NULL”解析为时间戳。所需格式为 YYYY-MM-DD HH:MM[:SS[.SSSSSS]] ``` 和 0000-00-00 00:00 结果为 0-0-0 does not exist for timestamp: 0000-00-00 00:00 我可能也会切换到 UNIX 时间戳 :(

标签: csv google-bigquery talend


【解决方案1】:

注意空值和空字符串之间的区别。上面复制的第 6659 行有空字符串,但不是空值。

为了重现,我使用此架构创建了一个表:

[{"name":"a","type":"TIMESTAMP","mode":"NULLABLE"},
 {"name":"b","type":"TIMESTAMP","mode":"NULLABLE"}]

然后将此文件上传到它:

"",""

我在哪里得到这个错误:

File: 0 / Line:1 / Field:1, Could not parse '' as a timestamp

但是如果我上传这个文件:

,

一切正常,因为逗号周围有 2 个空值。

您可以转换所有文件,去掉空字符串,或者将这些列作为字符串导入 BigQuery,然后在 BigQuery 中运行从字符串到时间戳的 ETL。

【讨论】:

  • BigQuery 应将时间戳解析为 null。我已经提交了一个内部错误。
  • 我们使用 Talend 创建 CSV 文件,它不支持省略空值的引号。所以我通过sed 替换我的数据,现在它可以工作了。是否可以将有关执行该字符串的更多信息发送到 BigQuery 中的时间戳 ETL?听起来很有趣。非常感谢!
  • 然后将其作为字符串导入,您可以在 BigQuery 中进行转换并创建一个新表 - 或者每次都进行转换。乔丹也在考虑在不久的将来不会有这个问题。
  • 详细说明:我导入 BigQuery 的懒惰方式是告诉它每个字段都是一个字符串。导入表后,我可以执行“SELECT INTEGER(a) a, TIMESTAMP(b) b, FLOAT(c) c FROM xxx”并将其输出到具有正确类型的新表中。
  • 我以前试过,确实有效。但我不知道如何自动化。 bq.py python 脚本允许您运行查询,但 afaik 不能将结果存储在新表中。 Java 库似乎可以做到这一点,我刚刚发现。
【解决方案2】:

我也遇到过类似的问题

错误是

- File: 2 / Line:9940 / Field:13: Day 0-0-0 does not exist for
 timestamp: 0000-00-00 00:00:00

"9718470";"2769586jfghjkdf";"2015-08-03 15:57:28";"2015-08-03 16:10:10";"479";"128833308";"May 2015";"1461782";"ab_20150616";"1130567689";"69466";"emailid@hotmail.com";"0000-00-00 00:00:00";"2015-08-03 23:53:44"

我的 BigQuery 架构中的第 13 个字段是 TIMESTAMP,我发送的是 "0000-00-00 00:00:00" 。 Big Query 不接受“0000-00-00 00:00:00”。

为了解决这个问题我发送

"9718470";"2769586jfghjkdf";"2015-08-03 15:57:28";"2015-08-03 16:10:10";"479";"128833308";"May 2015";"1461782";"ab_20150616";"1130567689";"69466";"emailid@hotmail.com";;"2015-08-03 23:53:44"   

简而言之,您必须发送 "someValue";;"someOtherValue" 而不是 "someValue";"0000-00-00 00:00:00";"someOtherValue 或 "someValue";"";"someOtherValue

请注意,我正在使用;作为分隔符。

【讨论】:

    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2014-07-04
    • 1970-01-01
    • 2015-04-02
    • 2021-08-05
    • 1970-01-01
    相关资源
    最近更新 更多