自两天前(2016年8月10日)以来,曾经工作的查询(使用BQ Export for Google Analytics Premium的表格)已停止工作.它返回以下错误:
Error: Cannot union tables : Incompatible types.
‘hits.latencyTracking.userTimingVariable’ : TYPE_INT64
‘hits.latencyTracking.userTimingVariable’ : TYPE_STRING
经过一些调查,当我在8月10日之前和之后查询表时,在WHERE子句中使用IN似乎是一个问题(表ga_sessions_20160810).
我已经简化了我的原始查询以提供具有相同基本结构的虚拟查询.以下查询有效(查询2016-08-08和2016-08-09的数据):
SELECT fullVisitorId, sum(totals.visits)
FROM (select * from TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-08'),TIMESTAMP('2016-08-09')))
WHERE fullVisitorId in(
SELECT fullVisitorId
FROM TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-08'),TIMESTAMP('2016-08-09'))
)
GROUP BY fullVisitorId
但另一个(只是更改日期,在本例中是2016-08-09和2016-08-10)返回错误:
SELECT fullVisitorId, sum(totals.visits)
FROM (select * from TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10')))
WHERE fullVisitorId in(
SELECT fullVisitorId
FROM TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10'))
)
GROUP BY fullVisitorId
如果我删除WHERE子句或者我只是在IN中尝试查询,那么最后一个查询工作正常,所以我猜问题是结构WHERE字段IN(…).此外,仅查询2016-08-10的数据确实有效.此外,使用与fullVisitorId不同的字段并在不同的BQ项目中运行相同的查询也会发生同样的情况.
查看错误描述,它应该是变量类型的问题,但我不知道什么是hits.latencyTracking.userTimingVariable.我的查询过去工作正常,所以我无法弄清楚产生错误的变化.有些字段改变了类型或发生了什么?
有没有人经历过这个?这是BigQuery中的错误还是新行为?如何解决这个错误?
最佳答案 当您在select子句中使用*时,它可能会在union尝试组合两种不同的列类型(因为模式从INT64更改为STRING)时导致问题.
我有两种方法
1)只使用你需要的那些字段而不是在select子句中使用*
SELECT fullVisitorId, sum(totals.visits)
FROM (select fullVisitorId,totals.visits from TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10')))
WHERE fullVisitorId in(
SELECT fullVisitorId
FROM TABLE_DATE_RANGE([XXXXXXXX.ga_sessions_],TIMESTAMP('2016-08-09'),TIMESTAMP('2016-08-10'))
) GROUP BY fullVisitorId
2)使用视图拆分内部查询并在查询中稍后使用视图. (即使在视图中你只需要使用那些必需的字段)
SELECT fullVisitorId, sum(totals.visits)
FROM [view.innertable2]
WHERE fullVisitorId in(
SELECT fullVisitorId from [view.innertable1] ) GROUP BY fullVisitorId
这将排除hits.latencyTracking.userTimingVariable,因此不会出现错误.