메타데이터 캐싱

이 문서에서는 메타데이터 캐싱을 사용하여 객체 테이블 및 일부 유형의 BigLake 테이블에 대한 쿼리 성능을 향상시키는 방법을 설명합니다.

객체 테이블 및 일부 유형의 BigLake 테이블은 외부 데이터 스토어(예: Cloud Storage)의 파일에 대한 메타데이터 정보를 캐시할 수 있습니다. 다음 유형의 BigLake 테이블에서는 메타데이터 캐싱을 지원합니다.

  • Amazon S3 BigLake 테이블
  • Cloud Storage BigLake 테이블

메타데이터에는 파일 이름, 파티셔닝 정보, 행 수와 같은 파일의 메타데이터가 포함됩니다. 테이블에서 메타데이터 캐싱을 사용 설정할지 여부를 선택할 수 있습니다. 파일 수가 더 많고 Hive 파티션 필터가 포함된 쿼리는 메타데이터 캐싱의 이점을 극대화할 수 있습니다.

메타데이터 캐싱을 사용 설정하지 않으면 테이블의 쿼리에서 외부 데이터 소스를 읽어 객체 메타데이터를 가져와야 합니다. 이 데이터를 읽으면 쿼리 지연 시간이 늘어나므로 외부 데이터 소스에서 수백만 개의 파일을 나열하는 데 몇 분 정도 걸릴 수 있습니다. 메타데이터 캐싱을 사용 설정하면 쿼리가 외부 데이터 소스에서 파일을 나열하지 않고 파티션과 파일 프루닝을 더 빠르게 수행할 수 있습니다.

테이블을 만들 때 BigLake 또는 객체 테이블에서 메타데이터 캐싱을 사용 설정할 수 있습니다. 객체 테이블 만들기에 대한 자세한 내용은 Cloud Storage 객체 테이블 만들기를 참조하세요. BigLake 테이블 만들기에 대한 자세한 내용은 다음 주제 중 하나를 참조하세요.

메타데이터 캐싱 설정

이 기능의 동작을 제어하는 두 가지 속성이 있습니다.

  • 최대 비활성은 쿼리에서 캐시된 메타데이터를 사용하는 시기를 지정합니다.
  • 메타데이터 캐시 모드는 메타데이터 수집 방법을 지정합니다.

메타데이터 캐싱을 사용 설정했으면 테이블 작업에 허용되는 메타데이터 비활성 간격을 최대한으로 지정합니다. 예를 들어 1시간 간격을 지정하면 이전 한 시간 내에 새로고침된 경우 테이블 작업에 캐시된 메타데이터가 사용됩니다. 캐시된 메타데이터가 이보다 오래된 경우 작업은 대신 데이터 스토어(Amazon S3 또는 Cloud Storage)에서 메타데이터를 검색하도록 되돌아갑니다. 비활성 간격은 30분부터 7일까지로 지정할 수 있습니다.

캐시를 자동 또는 수동으로 새로고침하도록 선택할 수 있습니다.

  • 자동 새로고침의 경우 일반적으로 30분에서 60분 사이로 시스템에서 정의된 간격으로 캐시가 새로고침됩니다. 데이터 스토어의 파일이 무작위 간격으로 추가, 삭제, 수정될 경우에는 캐시를 자동으로 새로고침하는 것이 좋습니다. 추출-변환-로드 작업이 끝날 때 새로고침을 트리거할 때와 같이 새로고침 시간을 제어해야 할 경우에는 수동 새로고침을 사용합니다.
  • 수동 새로고침의 경우 BQ.REFRESH_EXTERNAL_METADATA_CACHE 시스템 프로시져를 실행하여 선택한 일정에 따라 메타데이터 캐시를 새로고침합니다. BigLake 테이블의 경우 테이블 데이터 디렉터리의 하위 디렉터리를 제공하여 메타데이터를 선택적으로 새로고침할 수 있습니다. 그러면 불필요한 메타데이터 처리를 방지할 수 있습니다. 데이터 스토어의 파일이 파이프라인 출력과 같이 알려진 간격으로 추가, 삭제, 수정될 경우에는 캐시를 수동으로 새로고침하는 것이 좋습니다.

수동 및 자동 캐시 새로고침은 모두 INTERACTIVE 쿼리 우선순위로 실행됩니다.

자동 새로고침을 사용하는 경우 메타데이터 캐시 새로고침 작업을 실행하는 프로젝트에 대해 예약을 만든 후 BACKGROUND 작업 유형으로 할당을 만드는 것이 좋습니다. 이렇게 하면 새로고침 작업이 리소스에 대한 사용자 쿼리와 경쟁하지 않으며 사용할 수 있는 리소스가 충분하지 않은 경우 실패하는 것을 방지합니다.

설정하기 전 비활성 간격 및 메타데이터 캐싱 모드 값이 상호작용하는 방식을 고려해야 합니다. 다음 예를 고려하세요.

  • 테이블의 메타데이터 캐시가 수동 새로고침을 요구하도록 설정되고 비활성 간격이 2일로 설정된 경우 테이블 작업에 캐시된 메타데이터가 사용되도록 하려면 2일 이내에 BQ.REFRESH_EXTERNAL_METADATA_CACHE 시스템 절차를 실행해야 합니다.
  • 테이블의 메타데이터 캐시가 자동으로 새로고침되도록 설정되고 비활성 간격이 30분으로 설정된 경우 메타데이터 캐시 새로고침이 일반적인 30분~60분 기간보다 길어지면 테이블에 대한 작업 중 일부에서 데이터 스토어 읽기가 수행될 수 있습니다.

BigLake 테이블의 메타데이터 캐싱 옵션 설정에 대한 자세한 내용은 Amazon S3 BigLake 테이블 만들기 또는 Cloud Storage BigLake 테이블 만들기를 참조하세요.

객체 테이블의 메타데이터 캐싱 옵션 설정에 대한 자세한 내용은 객체 테이블 만들기를 참조하세요.

메타데이터 캐시 새로고침 작업에 대한 정보 가져오기

메타데이터 캐시 새로고침 작업에 대한 정보를 보려면 다음 예시에 표시된 것처럼 INFORMATION_SCHEMA.JOBS를 쿼리합니다.

SELECT *
FROM `region-us.INFORMATION_SCHEMA.JOBS`
WHERE job_id LIKE '%metadata_cache_refresh%'
AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR)
ORDER BY start_time DESC
LIMIT 10;

캐시된 메타데이터로 고객 관리 암호화 키 사용

캐시된 메타데이터는 캐시된 메타데이터가 연결된 테이블에 사용되는 고객 관리 암호화 키(CMEK)로 보호됩니다. 테이블에 직접 적용되는 CMEK이거나 테이블이 데이터 세트 또는 프로젝트에서 상속하는 CMEK일 수 있습니다.

프로젝트 또는 데이터 세트에 기본 CMEK가 설정되어 있거나 프로젝트 또는 데이터 세트의 기존 CMEK가 변경되어도 기존 테이블 또는 캐시된 메타데이터에 영향을 주지 않습니다. 테이블과 캐시된 메타데이터 모두에 새 키를 적용하려면 테이블 키를 변경해야 합니다.

BigQuery에서 만든 CMEK는 BigLake 및 객체 테이블에서 사용되는 Cloud Storage 파일에 적용되지 않습니다. 엔드 투 엔드 CMEK 암호화를 얻으려면 해당 파일에 대해 Cloud Storage에 CMEK를 구성합니다.

쿼리 작업별 메타데이터 캐시 사용량에 대한 정보 가져오기

쿼리 작업의 메타데이터 캐시 사용량에 대한 정보는 해당 작업의 jobs.get 메서드를 호출하고 Job 리소스의 JobStatistics2 섹션에서 MetadataCacheStatistics 필드를 확인하세요. 이 필드는 쿼리에 사용된 메타데이터 캐시 지원 테이블, 쿼리에 메타데이터 캐시가 사용되었는지 여부, 사용되지 않았다면 그 이유에 대한 정보를 제공합니다.

테이블 통계

Parquet 파일을 기반으로 하는 BigLake 테이블의 경우 메타데이터 캐시가 새로고침될 때 테이블 통계가 수집됩니다. 테이블 통계 수집은 자동 새로고침과 수동 새로고침 모두에서 발생하며 통계는 메타데이터 캐시와 동일한 기간 동안 유지됩니다.

수집되는 테이블 통계에는 행 수, 물리적 파일 및 압축되지 않은 파일 크기, 열의 카디널리티와 같은 파일 정보가 포함됩니다. Parquet 기반 BigLake 테이블에서 쿼리를 실행하면 이러한 통계가 쿼리 최적화 도구에 제공되어 쿼리 계획이 향상되고 일부 쿼리 유형의 쿼리 성능이 향상될 수 있습니다. 예를 들어 일반적인 쿼리 최적화는 동적 제약조건 전파로, 쿼리 최적화 도구는 작은 측정기준 테이블에서 조인에 있는 더 큰 팩트 테이블에 조건자를 동적으로 추론합니다. 이러한 최적화는 정규화된 테이블 스키마를 사용하여 쿼리 속도를 높일 수 있지만 정확한 테이블 통계가 필요합니다. 메타데이터 캐싱에서 수집한 테이블 통계는 BigQuery 및 Apache Spark 모두에서 쿼리 계획의 최적화를 개선합니다.

제한사항

메타데이터 캐시에는 다음 제한사항이 적용됩니다.

  • 여러 번의 수동 새로고침을 동시에 수행하면 하나만 성공합니다.
  • 메타데이터 캐시는 새로고침되지 않을 경우 7일 후 만료됩니다.
  • 테이블의 소스 URI를 업데이트하면 메타데이터 캐시가 자동으로 새로고침되지 않고 후속 쿼리가 오래된 캐시의 데이터를 반환합니다. 이를 방지하려면 메타데이터 캐시를 수동으로 새로고침합니다. 테이블의 메타데이터 캐시가 자동으로 새로고침되도록 설정된 경우 테이블의 새로고침 모드를 수동으로 변경하고 수동 새로고침을 수행한 후 테이블의 새로고침 모드를 다시 자동으로 설정해야 합니다.
  • 메타데이터 캐시를 수동으로 새로고침하고 대상 데이터 세트와 Cloud Storage 버킷이 리전 위치에 있는 경우 BQ.REFRESH_EXTERNAL_METADATA_CACHE 프로시져 콜을 실행할 때 이 위치를 명시적으로 지정해야 합니다. 다음 방법 중 하나를 사용할 수 있습니다.

    콘솔

    1. BigQuery 페이지로 이동합니다.

      BigQuery로 이동

    2. 편집기에서 탭을 선택합니다.

    3. 더보기를 클릭한 다음 쿼리 설정을 클릭합니다.

    4. 고급 옵션 섹션에서 자동 위치 선택 체크박스를 선택 해제한 후 대상 리전을 지정합니다.

    5. 저장을 클릭합니다.

    6. 편집기 탭에서 BQ.REFRESH_EXTERNAL_METADATA_CACHE 프로시져 콜을 포함하는 쿼리를 실행합니다.

    bq

    bq query를 사용하여 BQ.REFRESH_EXTERNAL_METADATA_CACHE 프로시져 콜을 포함하는 쿼리를 실행하는 경우 --location 플래그를 지정해야 합니다.

다음 단계