나는 다음과 같은 필드의 BigQuery의 테이블이에 대한 전체 데이터 세트에 대한 응답이 너무 큰 오류를 제공하지만 :BigQuery에 동등한 하위 쿼리
time,a,b,c,d
time
는 ISO8601 형식으로 만 공간을 가진 문자열을 a
는이다 1에서 16000 사이의 정수이며 다른 열은 문자열입니다. 이 테이블에는 한 달 분량의 데이터가 포함되어 있으며 하루에 수백만 개의 레코드가 있습니다.
다음 쿼리는 "너무 큰 반응"실패 :
select UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) as day,b,c,d,count(a),count(distinct a, 1000000)
from [myproject.mytable]
group by day,b,c,d
order by day,b,c,d asc
그러나,이 쿼리가 작동 (데이터가 2012-01-01부터 시작)
select UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) as day,
b,c,d,count(a),count(distinct a)
from [myproject.mytable]
where UTC_USEC_TO_DAY(PARSE_UTC_USEC(time)) = UTC_USEC_TO_DAY(PARSE_UTC_USEC('2012-01-01 00:00:00'))
group by day,b,c,d
order by day,b,c,d asc
이 수도 그것과 같다 this issue와 관련이 있습니다. 그러나 group by
절로 인해 최상위 쿼리는 두 번째 쿼리를 반복적으로 호출하는 것과 같습니다. 쿼리 플래너가이 문제를 처리 할 수 있습니까?
편집 : 내가 생성 된 가짜 테스트 데이터를 사용하고
: 내 테스트 데이터를 명확하게합니다. 나는 원래 여러 필드를 사용하여 한 달 동안 시간별 요약을 얻으려고했다. (group by hour
, 여기서 시간은 을 사용하여 쿼리의 select
부분에 정의 됨). 그게 실패했을 때 나는 매일 바꾸려고 노력했다. 그게 실패했을 때 저는 관련된 열을 줄였습니다. 그것도 count (distinct xxx, 1000000)
을 사용할 때 실패했지만 하루의 가치가있을 때만 효과가있었습니다. (그것은 또한 내가 1000000
매개 변수를 제거하지만 는 하루 쿼리 작업을 수행 이후 쿼리 플래너는 내가 기대하는 것처럼 일을 분리하지 않는 것 같다 작동합니다.) 하나는 count (distinct)
검사
카디널리티있다 16,000이고 그룹 별 열은 카디널리티 2와 20을 가지며 총 1200 개의 예상 행을 나타냅니다. 열 값은 약 10 자 정도로 매우 짧습니다.
감사합니다; 내 데이터에 대한 자세한 내용을 올려 놓았습니다. (죄송합니다!) 필자는 최대 정확한 수를 뚜렷하게 올렸습니다. 'group by each '을 시도했지만 그룹화 컬럼 중 하나가'as'('select utc_usec_to_day (day)')에서 왔기 때문에'Error : Field day가 쿼리에 사용되었지만 찾을 수 있습니다. " – polm23
문제는 기억력이 있습니다. count (distinct xxx, 1000000)를 사용하면 실행 엔진이 결과별로 각 그룹에 대해 최대 100000 개의 항목을 추적해야 함을 의미합니다. 따라서 예상 행 수가 1200 개라면 1을 저장할 수 있습니다.2 * 10^9 값은 계산 트리의 루트에 할당되어야합니다. –
각 그룹이 어떻게 당신을 위해 일할 수 있다고 생각하는지 설명하기 위해 답을 업데이트했습니다. –