BigQuery:无法读取TIMESTAMP_MICROS类型的字段'戳'作为DATETIME

时间:2017-12-05 03:00:25

标签: google-bigquery

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

我有一个包含以下架构的表:

>>> s = mit.seekable(range(3))
>>> s.next()
# 0

>>> s.seek(0)                                              # reset iterator
>>> s.next()
# 0

>>> s.next()
# 1

>>> s.seek(1)
>>> s.next()
# 1

>>> next(s)
# 2

由于我的数据集中的表格具有混合模式且其名称通常不作为前缀,我打算进行广泛的通配符匹配 - 然后缩小_PARTITIONTIME TIMESTAMP NULLABLE stamp TIMESTAMP NULLABLE value FLOAT NULLABLE source STRING NULLABLE ... 中的_TABLE_SUFFIX

WHERE

这是我能做到的基础。 SELECT *, _TABLE_SUFFIX AS table_name FROM `my-project.my-dataset.*` WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, r"cars") 只匹配一个表。 我打算在上面的REGEX中添加其他表。例如:cars

当我执行上述查询时,出现以下错误:

cars|trucks|...

此外,当我尝试从我的Cannot read field 'stamp' of type TIMESTAMP_MICROS as DATETIME中移除stamp并使用其中的SELECT列时:

source

BigQuery现在告诉我: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]列,为什么它无法找到stamp

1 个答案:

答案 0 :(得分:4)

  

这两种情况都发生了什么?为什么BigQuery想要投射我的邮票列,为什么它无法找到源?

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

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

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