google-bigquery – BigQuery中的错误或新行为?

自两天前(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,因此不会出现错误.

点赞