2016-08-12 4 views
4

2 일 전 (2016 년 8 월 10 일)부터 Google 애널리틱스 프리미엄 용 BQ 내보내기 테이블을 사용하여 작업했던 검색어가 작동하지 않습니다. 그것은 다음과 같은 오류 반환 : 일부 조사 후BigQuery의 버그 또는 새로운 동작?

Error: Cannot union tables : Incompatible types. 'hits.latencyTracking.userTimingVariable' : TYPE_INT64 'hits.latencyTracking.userTimingVariable' : TYPE_STRING

를, 내가 전에부터 8 월 10 일 (테이블 ga_sessions_20160810) 후 테이블을 조회 WHERE 절에서 IN 사용에 문제가 될 것으로 보인다.

동일한 기본 구조를 가진 더미 쿼리를 제공하기 위해 원래 쿼리를 단순화했습니다. 2016년 8월 9일과 2016-08에서이 경우

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년 8월 8일 데이터 및 2016년 8월 9일)를 작동 -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 

이 마지막 쿼리가 잘 작동을 하나 난 그냥 IN에서 쿼리를하려고하면 나는 나 WHERE 절을 삭제, 그래서 문제가 구조 필드으로 추측 경우 에서(...). 또한 2016-08-10의 데이터 만 쿼리하면 작동합니다. 또한 fullVisitorId와 다른 필드를 사용하고 다른 BQ 프로젝트에서 동일한 쿼리를 실행하는 경우도 마찬가지입니다.

오류 설명을 살펴보면 변수 유형에 문제가 있지만 hits.latencyTracking.userTimingVariable이 무엇인지 알 수 없습니다. 내 쿼리가 제대로 작동하는 데 사용되어서 오류가 발생하는 변경된 내용을 파악할 수 없습니다. 일부 필드가 유형을 변경했거나 어떤 일이 발생 했습니까?

누구에게 경험이 있습니까? 이 문제가 BigQuery의 새로운 동작입니까? 이 오류를 어떻게 해결할 수 있습니까?

+0

스키마 변경, 당신은 매개 변수 hits.latencyTracking.userTimingVariable은 정수 테이블 ga_sessions을 확인하고 지금은이 작업을 시도조차 캔트, 문자열 인 경우 : SELECT fullVisitorId, hits.latencyTracking을 .userTimingVariable FROM TABLE_DATE_RANGE ([xxxxxxxxxxxx.ga_sessions _], TIMESTAMP ('2016-08-9'), TIMESTAMP ('2016-08-10')), date_range 함수가 스키마 변경시 준비되지 않았습니다 . –

+0

' 맞아, Paulo. hits.latencyTracking.이 기간 동안 userTimingVariable이 INTEGER에서 STRING으로 변경되었지만이 필드를 쿼리하지 않습니다 ... 내 쿼리에서 사용하는 방식을 알고 있습니까? –

답변

2

당신이 조합은이 (스키마 STRING에 INT64 변경으로) 두 개의 서로 다른 열 유형을 결합하려고 일어나는 경우 SELECT 절에서이 문제를 일으키는 수도 * 사용하는 것처럼.

나는 두 가지 방법

1

)는 내부 쿼리를 분할하고 쿼리에서 나중에보기를 사용하려면 뷰를 사용)

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 

이 SELECT 절에 * 사용하는 것보다 당신이 요구 만 필드를 사용했다 . 그래서 오류가 없을 것입니다 이것은 hits.latencyTracking.userTimingVariable 제외됩니다

SELECT fullVisitorId, sum(totals.visits) 
FROM [view.innertable2] 
    WHERE fullVisitorId in(
    SELECT fullVisitorId from [view.innertable1]) GROUP BY fullVisitorId 

(심지어보기에 당신은 필요한 해당 필드를 사용하는 경우에만 사용해야합니다). 일일에서 다른

+0

접근법 1이 작동합니다. 감사! –

+0

@ PolF. 이 결의안에 대해 우리에게 접근 한 고객에게 감사해야하며, 그는 약간의 연구를 수행했으며,이 문제에 대해 우리에게 같은 문제에 직면 해 있다고 말한 것을 지적했습니다. 건배!!! –

0

쿼리하는 필드가 호환되면 표준 SQL 와일드 카드 테이블을 사용할 수 있습니다 (UI에서이 작업을 수행하는 경우 레거시 SQL 상자 사용을 선택 해제해야합니다). 이런 식으로 뭔가 :

SELECT fullVisitorId, sum(totals.visits) 
FROM `xxxxxxxx.ga_sessions_*` 
WHERE _TABLE_SUFFIX BETWEEN '20160808' and '20160810' 
GROUP BY fullVisitorId; 
+0

귀하의 쿼리가 작동합니다, Pavan. 그러나 [공식 문서] (https://cloud.google.com/bigquery/docs/wildcard-tables)에 따르면 Standard SQL은 여전히 ​​베타 버전이므로 프로덕션 용도로는 권장되지 않습니다. 레거시 SQL을 사용하는 다른 방법을 알고 계십니까? –

관련 문제