自两天前(2016年8月10日)以来,曾经工作的查询(使用BQ Export for Google Analytics Premium的表格)已停止工作。它返回以下错误:
错误:无法联合表:不兼容的类型。 ' hits.latencyTracking.userTimingVariable' :TYPE_INT64 ' hits.latencyTracking.userTimingVariable' :TYPE_STRING
经过一些调查后,当我在8月10日之前和之后查询表时(表 ga_sessions_20160810 ),在WHERE子句中使用IN似乎是一个问题。
我已将原始查询简化为提供具有相同基本结构的虚拟查询。以下查询有效(查询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 field IN(...) 。此外,仅查询2016-08-10的数据确实有效。此外,使用与fullVisitorId不同的字段并在不同的BQ项目中运行相同的查询也会发生同样的情况。
查看错误描述,它应该是变量类型的问题,但我不知道什么是hits.latencyTracking.userTimingVariable。我的查询过去常常正常工作,所以我无法弄清楚产生错误的变化。有些字段改变了类型或发生了什么?
有没有人经历过这个?这是BigQuery中的错误还是新行为?如何解决这个错误?
答案 0 :(得分:2)
当您在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
,因此不会出现错误。
答案 1 :(得分:0)
如果要查询的字段是兼容的,则可以尝试使用标准SQL通配符表(如果从UI执行此操作,则必须取消选中“使用旧SQL”框)。像这样:
$.getJSON(
'https://en.wikipedia.org/w/api.php?action=query&format=json&gsrlimit=15&generator=search' +
'&origin=*' + // <-- this is the magic ingredient!
'&gsrsearch='q, function(data){ /* ... */ }
);