我正在使用BigQuery的标准SQL 通配符表功能。
我有一个具有以下架构的表:
_PARTITIONTIME TIMESTAMP NULLABLE
stamp TIMESTAMP NULLABLE
value FLOAT NULLABLE
source STRING NULLABLE
...
Run Code Online (Sandbox Code Playgroud)
因为在我的数据集的表有混合模式,他们的名字是不常用前缀,我打算使广泛的通配符匹配-那么,缩小_TABLE_SUFFIX在WHERE:
_PARTITIONTIME TIMESTAMP NULLABLE
stamp TIMESTAMP NULLABLE
value FLOAT NULLABLE
source STRING NULLABLE
...
Run Code Online (Sandbox Code Playgroud)
这是我能做到的基本知识。cars只匹配一个表。我打算在上面的REGEX中添加其他表。例如:cars|trucks|...
当我执行上述查询时,出现以下错误:
Cannot read field 'stamp' of type TIMESTAMP_MICROS as DATETIME
此外,当我试图删除stamp从我的SELECT,并使用source它的地方列:
SELECT
*,
_TABLE_SUFFIX AS table_name
FROM `my-project.my-dataset.*`
WHERE REGEXP_CONTAINS(_TABLE_SUFFIX, r"cars")
Run Code Online (Sandbox Code Playgroud)
BigQuery现在告诉我: Unrecognized name: source at [2:1]
这两种情况都在发生什么?BigQuery为什么要强制转换我的stamp列,为什么找不到source?
这两种情况都在发生什么?BigQuery为什么要转换我的标记列,为什么找不到源?
为了执行使用通配符表的标准SQL查询,BigQuery会自动推断该表的架构。BigQuery使用与通配符匹配的最新创建表的模式作为通配符表的模式。如果在与通配符表匹配的表之间架构不一致,则BigQuery返回错误。
这说明了您看到的两种情况!
在第一种情况下-最新的表具有_PARTITIONTIME作为DATETIME数据类型
在第二种情况下-同一最新的表只是其中没有source字段
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |