쿼리 출력 관리

출력 데이터를 평가할 때는 쿼리에서 작성한 바이트 수를 고려해야 합니다. 결과 집합에 작성된 바이트가 얼마나 되나요? 작성되는 데이터의 양을 적절히 제한하고 있나요? 같은 데이터를 반복해서 작성하나요? 쿼리에서 작성하는 데이터의 양은 쿼리 성능(I/O)에 영향을 미칩니다. 결과를 영구(대상) 테이블에 작성하는 경우 작성되는 데이터 양에 대한 비용도 발생합니다.

다음의 권장사항을 출력 데이터를 제어하는 데 참고할 수 있습니다.

반복되는 조인 및 하위 쿼리 방지

권장사항: 동일한 테이블을 반복적으로 연결하거나 똑같은 하위 쿼리를 사용하지 마세요.

동일한 테이블을 반복적으로 연결하고 있다면 스키마를 다시 살펴보는 것이 좋습니다. 데이터를 반복하여 연결하는 대신 중첩된 반복 데이터를 사용해 관계를 표현하면 더 효과적일 수 있습니다. 중첩된 반복 데이터를 사용하면 조인에 필요한 통신 대역폭의 성능에 미치는 영향이 줄어듭니다. 또한 동일한 데이터를 반복해서 읽고 쓸 때 발생하는 I/O 비용도 절감할 수 있습니다. 자세한 내용은 중첩 및 반복 필드 사용을 참조하세요.

마찬가지로 동일한 하위 쿼리가 반복되면 반복적인 쿼리 처리로 인해 성능이 영향을 받습니다. 여러 쿼리에서 동일한 하위 쿼리를 사용할 때는 테이블에서 하위 쿼리 결과를 구체화한 후 쿼리에서 구체화된 데이터를 사용하는 것이 좋습니다.

하위 쿼리 결과를 구체화하면 성능이 개선되고 BigQuery에서 읽고 쓰는 전체적인 데이터 양이 줄어듭니다. 반복적인 I/O 및 쿼리 처리가 성능에 영향을 미치는 것에 반해 구체화된 데이터는 저장 비용이 적게 들어 훨씬 이롭습니다.

대규모 결과 집합 구체화 시 고려사항

권장사항: 대상 테이블로 대규모 결과 집합을 구체화할 때는 신중하게 고려해야 합니다. 대규모 결과 집합을 작성하면 성능 및 비용이 영향을 받습니다.

BigQuery에서는 캐시 처리된 결과를 약 128MB의 압축된 데이터로 제한합니다. 이보다 큰 결과를 반환하는 쿼리는 제한을 초과해 Response too large 오류가 발생하기 쉽습니다.

이 오류는 주로 상당량의 데이터가 포함된 테이블에서 많은 수의 필드를 선택할 때 발생합니다. 캐시 처리된 결과 작성과 관련된 문제는 감소 또는 집계 없이 데이터를 정규화하는 ETL 스타일 쿼리에서도 발생할 수 있습니다.

다음과 같은 방법을 이용하면 캐시 처리된 결과의 크기 제한 문제를 해결할 수 있습니다.

  • 필터를 사용해 결과 집합을 제한합니다.
  • 특히 ORDER BY 절을 사용하는 경우 LIMIT 절을 사용해 결과 집합을 줄입니다.
  • 출력 데이터를 대상 테이블에 작성합니다.

대규모 결과 집합을 대상 테이블에 작성하면 쿼리 성능(I/O)이 영향을 받습니다. 또한 대상 테이블 저장 비용도 소액 발생합니다. 데이터세트의 기본 테이블 만료를 사용하면 대규모 대상 테이블을 자동으로 삭제할 수 있습니다. 자세한 내용은 저장소 권장사항의 만료 설정 사용을 참조하세요.

대규모 정렬에 LIMIT 절 사용

권장사항: 다수의 값을 정렬하는 경우에는 LIMIT 절을 사용하세요.

ORDER BY 절을 사용하여 쿼리 결과를 작성하면 Resources exceeded 오류가 발생할 수 있습니다. 최종 정렬은 단일 슬롯에서 이루어져야 하므로 대규모 결과 세트를 정렬하려고 하면 최종 정렬로 인해 데이터를 처리 중인 슬롯에서 문제가 발생할 수 있습니다. ORDER BY 절을 사용하는 경우 LIMIT 절도 사용해야 합니다.

예를 들어 다음 쿼리에서는 대규모 결과 집합을 정렬하여 Resources exceeded 오류가 반환됩니다. 이 쿼리는 Wiki1B 테이블의 title 열을 기준으로 정렬합니다. title 열에는 수백만 개의 값이 포함되어 있습니다.

SELECT
  title
FROM
  `bigquery-samples.wikipedia_benchmark.Wiki1B`
ORDER BY
  title

오류를 없애려면 다음과 같은 쿼리를 사용합니다.

SELECT
  title
FROM
  bigquery-samples.wikipedia_benchmark.Wiki1B
ORDER BY
  title DESC
LIMIT
  1000
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.