Bigquery 无法加载数据日期值或时间戳值格式错误

Posted

技术标签:

【中文标题】Bigquery 无法加载数据日期值或时间戳值格式错误【英文标题】:Bigquery unable to load data Date value or Time stamp value format wrong 【发布时间】:2017-03-07 14:02:21 【问题描述】:
1.Error while uploading CSV , where Data format is '0000-00-00' &&  timestamp has '0000-00-00 00:00:00' value.
2.The Datatype is DATE, TIMESTAMP as Follows.

我是否缺少任何忽略复选框。试图忽略所有错误,但不是加载所有数据 bigquery 忽略了日期格式行并仅上传了允许的行。enter image description here

尝试使用空值,无法做到,别无选择,将 DATE 替换为“1969-01-01”,将时间戳替换为“1969-01-01 00:00:00”。我能够上传数据。

【问题讨论】:

【参考方案1】:

有效日期的下限是0001-01-01; data types page 包含有关各种类型的有效范围的更多信息。一种选择是将值加载为STRING 类型,然后应用SAFE_CAST(string_date_col AS DATE) 等函数将值转换为DATE 类型。例如,

#standardSQL
SELECT
  * EXCEPT(string_date_col, string_timestamp_col),
  SAFE_CAST(string_date_col AS DATE) AS date_col,
  SAFE_CAST(string_timestamp_col AS TIMESTAMP) AS timestamp_col 
FROM MyTableWithStrings;

作为一个独立的例子:

#standardSQL
WITH MyTableWithStrings AS (
  SELECT 1 AS x, '0000-00-00' AS string_date_col, '0000-00-00 00:00:00' AS string_timestamp_col UNION ALL
  SELECT 2 AS x, '2017-03-07' AS string_date_col, '2017-03-07 12:34:56' AS string_timestamp_col
)
SELECT
  * EXCEPT(string_date_col, string_timestamp_col),
  SAFE_CAST(string_date_col AS DATE) AS date_col,
  SAFE_CAST(string_timestamp_col AS TIMESTAMP) AS timestamp_col 
FROM MyTableWithStrings;

这会将无效的日期和时间戳字符串替换为 NULL 值。

【讨论】:

现在我把它设置为 1969-01-01 和 1969-01-01 00:00:00,并且数据已上传,最好对每一行进行类型转换,因为它将近 200 万条记录。请纠正我。 问题我在创建表时无法加载数据本身。我已经更新了关于 DATE 和 TIMESTAMP 的空值的问题【参考方案2】:

Load API 没有足够的控件来控制无效 DATE/TIMESTAMP 值的行为 - 您可以在此处向 BigQuery 问题跟踪器提交功能请求:https://issuetracker.google.com/issues?q=componentid:187149。 同时,解决方法是使用 https://cloud.google.com/bigquery/external-data-sources#table_definitions_based_on_csv_source_files 中所述的基于 CSV 的联合查询,并使用 Elliott 的答案中所述的 SAFE_CAST 函数。

【讨论】:

issuetracker.google.com/issues/36043493 邮寄了这个问题。现在我可能不得不将无效的 DATE/TIMESTAMP 更改为以上。

以上是关于Bigquery 无法加载数据日期值或时间戳值格式错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 bq 将数据加载到 BigQuery 的自定义日期格式?

BigQuery 在解析时无法识别时区

如何将特定日期格式加载到 BigQuery

使用特定时间戳列将 CSV 导入 BigQuery 上的分区表?

从 BigQuery 到数据洞察的日期格式

BigQuery:加载具有日期列数据类型的 avro 文件,只要转换为时间戳