BigQuery:无法将 TIMESTAMP_MICROS 类型的字段“stamp”读取为 DATETIME

Posted

技术标签:

【中文标题】BigQuery:无法将 TIMESTAMP_MICROS 类型的字段“stamp”读取为 DATETIME【英文标题】:BigQuery: Cannot read field 'stamp' of type TIMESTAMP_MICROS as DATETIME 【发布时间】:2017-12-05 03:00:24 【问题描述】:

我正在使用 BigQuery 的标准 SQL Wildcard Table 功能。

我有一个具有以下架构的表:

_PARTITIONTIME  TIMESTAMP   NULLABLE
stamp           TIMESTAMP   NULLABLE
value           FLOAT       NULLABLE
source          STRING      NULLABLE
...

因为我的数据集中的表具有混合模式,并且它们的名称不常用前缀,所以我打算进行广泛的通配符匹配 - 然后缩小 WHERE 中的 _TABLE_SUFFIX

SELECT
*,
_TABLE_SUFFIX AS table_name
FROM `my-project.my-dataset.*`
WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, r"cars")

这是我能做到的最基本的。 cars 只匹配一个表。 我打算在上面的 REGEX 中添加额外的表。例如:cars|trucks|...

当我执行上述查询时,我收到以下错误:

Cannot read field 'stamp' of type TIMESTAMP_MICROS as DATETIME

此外,当我尝试从SELECT 中删除stamp 并在其位置使用source 列时:

SELECT
source,
_TABLE_SUFFIX AS table_name
FROM `my-project.my-dataset.*`
WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, r"cars")

BigQuery 现在告诉我:Unrecognized name: source at [2:1]

这两种情况都发生了什么? BigQuery 为什么要强制转换我的stamp 列,为什么找不到source

【问题讨论】:

【参考方案1】:

这两种情况都发生了什么? BigQuery 为什么要投我的戳栏,为什么找不到源?

为了执行使用通配符表的标准 SQL 查询,BigQuery 会自动推断该表的架构。 BigQuery 使用与通配符匹配的最近创建的表的架构作为通配符表的架构。如果通配符表匹配的表之间的架构不一致,BigQuery 会返回错误。

这解释了你看到的两种情况!

在第一种情况下 - 最近的表具有 _PARTITIONTIME 作为 DATETIME 数据类型 在第二种情况下 - 相同的最新表只是没有 source 字段

【讨论】:

有什么办法解决这个问题?我有 2017-2020 年的每日分区。但是在 2017 年有几个月的时间,列定义为 STRING。其他任何地方都是DATETIME

以上是关于BigQuery:无法将 TIMESTAMP_MICROS 类型的字段“stamp”读取为 DATETIME的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Google Ads 连接到 BigQuery

我无法将数据从 BigQuery 迁移到数据洞察

无法使用 table.insertall() 将任何数据上传到 bigquery

将数据导入 Bigquery,但只能通过作业历史访问“表”,无法在数据集中查看

无法将字段中带有 \" 的数据提取到 BigQuery 中

将 CSV 导入 BigQuery 中的表时无法添加字段