2016-08-29 1 views
0

지난 주 동안 특정 엔티티 ID와 연결된 모든 행을 가져 오려고합니다. 각 행에는 타임 스탬프가 있습니다. 나는 날짜 타임 스탬프에서 날짜를 추출하여, 하루 그룹에 그 실체를하고 싶습니다,하지만 난 때, 나는 BigQuery에서에서BigQuery에서 타임 스탬프에서 날짜를 추출 할 수 없습니다.

Error: (L6:28): expression STRFTIME_UTC_USEC([data_timestamp], '%Y-%m-%d') in GROUP BY is invalid

를 얻을. DATE() 함수에 문제가있는 것처럼 보입니다. 여기

내가 실행하고 전체 쿼리입니다 :
SELECT Count(*) FROM [myproj:mydataset.mytable] 
WHERE 
    bool_property=False 
AND 
    entity_id=5667423172689920 
AND 
    DATEDIFF(CURRENT_DATE(), data_timestamp) <= 7 
GROUP BY DATE(data_timestamp) 

데이터를 보면, 여기 'data_timestamp'라는 품질, 사실 적절한 타임 스탬프에 있음을 나타납니다; DATE() 함수가 실패하는 이유를 정말로 이해하지 못합니다.

도움말이나 정보? 감사!

답변

3

당신이 문에 의해 그룹에서 표현을 사용할 수 없습니다 BigQuery에 기존 SQL에서 쿼리

  1. 두 가지 문제가 있습니다, 아니라 단지 필드 (BTW,이 제한이 BigQuery 표준 SQL에 없습니다.
  2. GROUP BY를 할 때 - 단순히 모든 필드를 선택할 수는 없지만 COUNT 또는 SUM 등의 집계 함수를 사용해야합니다 (GROUP BY의 일부가 아닌 필드의 경우).)

그래서 쿼리는 다음과 같은 것을 볼 수 있습니다 : 그것은 BigQuery를 보인다

SELECT DATE(data_timestamp) AS dt, COUNT(1) AS cnt 
FROM [myproj:mydataset.mytable] 
WHERE bool_property=FALSE 
AND entity_id=5667423172689920 
AND DATEDIFF(CURRENT_DATE(), data_timestamp) <= 7 
GROUP BY dt 
+0

가 아니라, 내가 나타납니다 불구하고 그룹화가 포함되어 있지 않습니다 'GROUP BY'를 사용하여 다른 쿼리를 테스트 했으므로 표준 sql을 사용하여 제대로 작동하는 것으로 보입니다. 그래도 집계 함수에 대해서 당신 말이 맞습니다. 나는 나의 질문을 적합하게 바꾸었다. 내 진짜 문제는 GROUP BY가 아니지만 DATE 함수를 사용하면 비논리적으로 작동하지 않는 것처럼 보입니다. – bgenchel

+0

구문을 기반으로 사용 - legacy sql을 사용하고 있습니다. 내 대답에 쿼리를 실행하려고 시도한 적이 있습니까? 문제는 날짜 기능에 있지만 사실은 그룹에 성명을 레거시 SQL에서 사용했다 –

+0

그래, 그게 완전히 일했다! 그러나, 나는 왜 나는 이해하는지 모르겠다. 당신의 이론/가설은 GROUP BY에 있었기 때문에 날짜 기능이 제대로 작동하지 않는다는 것입니까? 이 쿼리가 어떻게 작동하는지 조금 더 설명해 주시겠습니까? – bgenchel

1

불행히도 레거시 SQL에서는 GROUP BY 표현식을 허용하지 않으며 열 이름만을 사용할 수 있습니다. 그러나 표준 SQL로 당신은 그것을 할 수 있습니다 :

SELECT * FROM myproj.mydataset.mytable 
WHERE 
    bool_property=False AND 
    entity_id=5667423172689920 AND 
    DATE_DIFF(CURRENT_DATE(), EXTRACT(DATE FROM data_timestamp), DAY) <= 7 
GROUP BY EXTRACT(DATE FROM data_timestamp) 
+0

는 https://cloud.google.com/bigquery/query-reference – bgenchel

관련 문제