Amazon Athena Google BigQuery 커넥터 - Amazon Athena

Amazon Athena Google BigQuery 커넥터

Google BigQuery용 Amazon Athena 커넥터를 사용하면 Amazon Athena가 Google BigQuery 데이터에 대해 SQL 쿼리를 실행할 수 있습니다.

사전 조건

제한 사항

  • Lambda 함수의 최대 제한 시간 값은 15분입니다. 각 분할은 BigQuery에서 쿼리를 실행하며 Athena에서 읽을 결과를 저장할 수 있는 충분한 시간을 두고 완료해야 합니다. Lambda 함수가 시간 초과되면 쿼리가 실패합니다.

  • Google BigQuery는 대/소문자를 구분합니다. 커넥터는 데이터세트 이름, 테이블 이름 및 프로젝트 ID의 대/소문자를 수정하려고 시도합니다. 이는 Athena가 모든 메타데이터를 소문자로 만들기 때문에 필요합니다. 이러한 수정으로 인해 Google BigQuery에 대한 추가 호출이 많이 발생합니다.

  • 바이너리 데이터 형식은 지원되지 않습니다.

  • Google BigQuery 동시성 및 할당량 제한으로 인해 커넥터에 Google 할당량 제한 문제가 발생할 수 있습니다. 이러한 문제를 방지하려면 Google BigQuery에 최대한 많은 제약 조건을 푸시합니다. BigQuery 할당량에 대한 자세한 내용을 알아보려면 Google BigQuery 설명서의 할당량 및 한도를 참조하세요.

파라미터

이 섹션의 Lambda 환경 변수를 사용하여 Google BigQuery 커넥터를 구성합니다.

  • spill_bucket – Lambda 함수 제한을 초과하는 데이터에 대한 Amazon S3 버킷을 지정합니다.

  • spill_prefix – (선택 사항) 기본값은 athena-federation-spill이라는 지정된 spill_bucket의 하위 폴더입니다. 미리 정해진 일 수 또는 시간보다 오래된 유출을 삭제하려면 이 위치에서 Amazon S3 스토리지 수명 주기를 구성하는 것이 좋습니다.

  • spill_put_request_headers – (선택 사항) 유출에 사용되는 Amazon S3 putObject 요청에 대한 요청 헤더 및 값의 JSON 인코딩 맵입니다(예: {"x-amz-server-side-encryption" : "AES256"}). 다른 가능한 헤더를 알아보려면 Amazon Simple Storage Service API Reference(Amazon Simple Storage Service API 참조)의 PutObject를 참조하세요.

  • kms_key_id – (선택 사항) 기본적으로 Amazon S3로 유출된 모든 데이터는 AES-GCM 인증 암호화 모드와 임의로 생성된 키를 사용하여 암호화됩니다. Lambda 함수가 a7e63k4b-8loc-40db-a2a1-4d0en2cd8331과 같이 KMS에서 생성된 더 강력한 암호화 키를 사용하도록 하려면 KMS 키 ID를 지정합니다.

  • disable_spill_encryption – (선택 사항) True로 설정하면 유출 암호화가 비활성화됩니다. S3로 유출되는 데이터가 AES-GCM을 사용하여 암호화되도록 기본값은 False입니다(임의로 생성된 키 또는 KMS를 사용하여 키 생성). 유출 암호화를 비활성화하면 특히 유출 위치가 서버 측 암호화를 사용하는 경우 성능이 향상될 수 있습니다.

  • gcp_project_id – 커넥터가 읽어야 하는 데이터 세트를 포함하는 프로젝트 ID(프로젝트 이름 아님)입니다(예: semiotic-primer-1234567).

  • secret_manager_gcp_creds_name – JSON 형식의 BigQuery 자격 증명을 포함하는 AWS Secrets Manager 내의 보안 암호 이름입니다(예: GoogleCloudPlatformCredentials).

  • big_query_endpoint - (선택 사항) BigQuery 프라이빗 엔드포인트의 URL입니다. 프라이빗 엔드포인트를 통해 BigQuery에 액세스하려는 경우 이 파라미터를 사용합니다.

분할 및 뷰

BigQuery 커넥터는 BigQuery Storage Read API를 사용하여 테이블을 쿼리하고, BigQuery Storage API는 뷰를 지원하지 않기 때문에 커넥터는 뷰의 단일 분할에 BigQuery 클라이언트를 사용합니다.

성능

테이블 쿼리를 위해 BigQuery 커넥터는 BigQuery 관리 스토리지에 빠르게 액세스할 수 있는 RPC 기반 프로토콜을 사용하는 BigQuery Storage Read API를 사용합니다. BigQuery 스토리지 읽기 API에 대한 자세한 내용은 Google Cloud 문서에서 Use the BigQuery Storage Read API to read table data를 참조하세요.

열의 하위 집합을 선택하면 쿼리 런타임 속도를 높이고 스캔되는 데이터를 줄일 수 있습니다. 동시성이 증가함에 따라 커넥터에서 쿼리 오류가 발생할 수 있으며 일반적으로 커넥터가 느립니다.

Athena Google BigQuery 커넥터는 조건부 푸시다운을 수행하여 쿼리에서 스캔하는 데이터를 줄입니다. LIMIT 절, ORDER BY 절, 간단한 조건자 및 복잡한 표현식을 커넥터로 푸시다운하여 스캔하는 데이터와 쿼리 실행 시간을 줄입니다.

LIMIT 절

LIMIT N 문은 쿼리로 스캔하는 데이터를 줄입니다. LIMIT N 푸시다운을 통해 커넥터는 Athena에 N개 행만 반환합니다.

상위 N개 쿼리

상위 N개 쿼리는 결과 세트의 순서와 반환되는 행 수에 대한 한도를 지정합니다. 이 유형의 쿼리를 사용하여 데이터 세트에 대해 상위 N개의 최댓값 또는 상위 N개의 최솟값을 결정할 수 있습니다. 상위 N개의 푸시다운을 통해 커넥터는 Athena에 N개의 정렬된 행만 반환합니다.

Predicates

조건자는 부울 값으로 평가되고 여러 조건에 따라 행을 필터링하는 SQL 쿼리의 WHERE 절에 사용되는 표현식입니다. Athena Google BigQuery 커넥터는 이러한 표현식을 결합하고 Google BigQuery로 직접 푸시하여 기능을 개선하고 스캔하는 데이터를 줄일 수 있습니다.

다음 Athena Google BigQuery 커넥터 연산자는 조건자 푸시다운을 지원합니다.

  • 부울: AND, OR, NOT

  • 관계: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_DISTINCT_FROM, NULL_IF, IS_NULL

  • 산술: ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULUS, NEGATE

  • 기타: LIKE_PATTERN, IN

결합된 푸시다운 예제

쿼리 기능을 개선하기 위해 다음 예제와 같이 푸시다운 유형을 결합합니다.

SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') ORDER BY col_a DESC LIMIT 10;

패스스루 쿼리

Google BigQuery 커넥터는 패스스루 쿼리를 지원합니다. 패스스루 쿼리는 테이블 함수를 사용하여 실행을 위해 전체 쿼리를 데이터 소스로 푸시다운합니다.

Google BigQuery에서 패스스루 쿼리를 사용하려면 다음 구문을 사용합니다.

SELECT * FROM TABLE( system.query( query => 'query string' ))

다음 예제 쿼리는 Google BigQuery의 데이터 소스로 쿼리를 푸시다운합니다. 쿼리는 customer 테이블의 모든 열을 선택하여 결과를 10개로 제한합니다.

SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))

라이선스 정보

Amazon Athena Google BigQuery 커넥터 프로젝트는 Apache-2.0 라이선스에 따라 사용이 허가됩니다.

이 커넥터를 사용하면 이 커넥터에 대한 pom.xml 파일에서 목록을 찾을 수 있는 타사 구성 요소가 포함되어 있음을 인정하고 GitHub.com의 LICENSE.txt 파일에 제공된 해당 타사 라이선스의 조건에 동의하는 것으로 간주됩니다.

추가 리소스

이 커넥터에 대한 추가 정보를 알아보려면 GitHub.com의 해당 사이트를 참조하세요.