'SELECT visitorId , totals.visits FROM [12123333.ga_sessions_20160602]'
한 번의 요청으로 500k 행을 반환하는 bigquery 가 있습니다.
그러나 한 요청에서 1 행에서 10,000 행으로 데이터를 조각화하고 다음 요청에서 다음 10,001 ~ 20,000 개를 가져 오는 식입니다.
미리 감사드립니다.
하나의 옵션은 대상 테이블에 쿼리의 쓰기 결과에있을 다음 사용하는 것이 Tabledata을 : 목록 API 사용 중 하나 페이징 방식으로 해당 테이블에서 데이터를 검색 maxResults
하고 pageToken
페이지에서 페이지를 검색하거나 maxResults
및 startIndex
행의 지정된 세트를 검색 할 수 있습니다.
또 다른 옵션 은 쿼리에 row_number를 추가하는 것입니다 (아래와 같음).
SELECT visitorId , totals.visits,
ROW_NUMBER() OVER() as num
FROM [12123333.ga_sessions_20160602]
여전히 대상 임시 테이블에 결과를 쓴 다음 예를 들어 num
그룹화를 num % 10000 = {group_number}
위해 새 필드를 사용하여 해당 테이블에서 데이터를 검색합니다 . 또는 당신이 사용할 수 있습니다 INTEGER(num / 10000) = {group_number}
-당신이 더 좋아하는 것은 무엇이든
SELECT visitorId , totals.visits
FROM tempTable
WHERE num % 10000 = 0
다음은
WHERE num % 10000 = 1
등등 ...
참고 : 두 번째 옵션은 각 파티션 (이 경우 하나의 파티션-모든 행)에 대한 모든 데이터가 동일한 노드에 있어야 하는 비용이 많이 드는 ( 실행 현명-청구 현명 아님) ROW_NUMBER () 함수를 사용하므로 숫자에 따라 다릅니다. 작동하거나 작동하지 않을 수 있습니다. 500K 행만있는 특정 예의 경우 작동하지만 수백만 행이있는 테이블로 확장하면 그렇지 않을 수도 있습니다 (각 행에서 출력하는 데이터의 양과 행 수에 따라 다름).
참고 :
-첫 번째 옵션에서는 결과를 생성하고 임시 테이블에 저장할 때 한 번만 지불합니다. 그렇다면 Tabledata.list API는 BigQuery 쿼리 자체를 사용하지 않고 기본 데이터에서 직접 읽기만하므로 무료로 사용할 수 있다는 점에서 무료입니다.
- 두 번째 옵션에서 당신은 둘 다 지불 - 당신은 임시 테이블을 생성 할 때 와 때마다 당신은 / 쿼리 또 다른 그룹을 검색 - 모든 BigQuery에서 쿼리이기 때문이다. 또한 특정 그룹에 대한 데이터를 얻을 때마다 전체 임시 테이블을 스캔하는 데 요금이 부과되므로 귀하의 경우에는 추가로 50 번
이것은 (귀하의 경우) 첫 번째 옵션을 두 번째 옵션보다 약 51 배 저렴하게 만듭니다 : o)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다