2016-09-08 2 views
0

다음 쿼리는 실행되고 16 행의 출력을 생성하며 (SELECT count(*) FROM (query)의 줄 바꿈으로 확인 됨) 히트가 반복되는 레코드입니다. hits.customDimensions가 히트 안에서 반복됩니다. customDimensions는 주 레코드에서 반복됩니다.범위 집계 및 WHERE 범위

SELECT 
    fullVisitorId, 
    visitId, 
    hits.page.pagePath, 
    hits.type, 
    FIRST(IF(customDimensions.index = 10, customDimensions.value, NULL)) WITHIN RECORD AS gacid, 
    FIRST(IF(hits.customDimensions.index = 11, hits.customDimensions.value, NULL)) WITHIN hits AS blogCategories 
FROM 
    [dataset.ga_sessions_20160902] 
WHERE 
    fullVisitorId ='55555555555' 

그러나

SELECT 
    fullVisitorId, 
    visitId, 
    hits.page.pagePath, 
    hits.type, 
    FIRST(IF(customDimensions.index = 10, customDimensions.value, NULL)) WITHIN RECORD AS gacid, 
    FIRST(IF(hits.customDimensions.index = 11, hits.customDimensions.value, NULL)) WITHIN hits AS blogCategories 
FROM 
    [dataset.ga_sessions_20160902] 
WHERE 
    fullVisitorId ='55555555555' 
    AND hits.type = 'PAGE' 

는 단일 (평탄화) 레코드가 반환되고

Cannot query the cross product of repeated fields customDimensions.index and hits.type. 

실패 및 내 포장 수는 나에게 실제 결과를 제공하지? 두 개의 범위가 지정된 집계가 다른 범위에서 작동 할 수 있지만 내부 범위의 WHERE이 실패하는 이유는 무엇입니까? 문제를 설명 -

+0

중요하므로 투표 아래에 게시 된 답변의 왼쪽에있는 진드기를 사용하여 허용 된 답변을 표시 할 수 있습니다. 중요한 이유는 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235를 참조하십시오. 또한 대답에 투표하는 것이 중요합니다. 도움이되는 답변에 투표하십시오. 더 많은 것이 있습니다 ... 누군가가 당신의 질문에 대답 할 때 무엇을해야하는지 확인할 수 있습니다 - http://stackoverflow.com/help/someone-answers. –

답변

1

크로스 제품 (- 큰 결과 및 평탄화 당신은 각각의 옵션을 테이블에 resuly 쓰기하지 않는 한) 모든 바깥 쪽 SELECT가 평평 결과를 생성 기존 SQL에 BTW,

SELECT 
    fullVisitorId, 
    visitId, 
    hits.page.pagePath, 
    hits.type, 
    FIRST(IF(customDimensions.index = 10, customDimensions.value, NULL)) WITHIN RECORD AS gacid, 
    FIRST(IF(hits.customDimensions.index = 11, hits.customDimensions.value, NULL)) WITHIN hits AS blogCategories 
FROM [dataset.ga_sessions_20160902] 
WHERE fullVisitorId ='55555555555' 
HAVING hits.type = 'PAGE' 

아래 시도 생산 피하기 위해 귀하의 예에서

+0

"예에서 문제를 설명하는"아니오, 그렇지 않습니다. 그래서 크기를 "select count (*) from()"쿼리에 배치하여 크기를 테스트한다고 말한 것입니다. 또한 수행되는 교차 제품이 없기 때문에 엔진은이를 피하기 위해 필요한 컨텍스트를 가지고 있습니다. –

+0

나는 당신의 말을 듣는다 : o (문제 해결 방법이 효과가 있습니까? 아니면 문제를 설명하는 데 관심이 있습니까?) GBQ 팀 –

+0

의 또 다른 대안은 명백한 FLATTEN입니다. 왜 이런 일이 발생했는지에 더 관심이있었습니다. 다른 곳에서 버그 신고를했습니다. https://code.google.com/p/google-bigquery/issues/detail?id=694&thanks=694&ts=1473356481 –