Amazon Athena Vertica 커넥터 - Amazon Athena

Amazon Athena Vertica 커넥터

Vertica는 클라우드 또는 온프레미스에 배포할 수 있는 열 형식 데이터베이스 플랫폼으로서 엑사바이트 규모의 데이터 웨어하우스를 지원합니다. 연합 쿼리에 Amazon Athena Vertica 커넥터를 사용하여 Athena에서 Vertica 데이터 원본을 쿼리할 수 있습니다. 예를 들어 Vertica의 데이터 웨어하우스와 Amazon S3의 데이터 레이크에 대해 분석 쿼리를 실행할 수 있습니다.

사전 조건

제한 사항

  • Athena Vertica 커넥터는 Amazon S3에서 내보낸 Parquet 파일을 읽기 때문에 커넥터의 성능이 느려질 수 있습니다. 큰 테이블을 쿼리할 때는 CREATE TABLE AS (SELECT ...) 쿼리와 SQL 조건자를 사용하는 것이 좋습니다.

  • 현재 Athena 연합 쿼리의 알려진 문제 때문에 커넥터로 인해 Vertica가 쿼리된 테이블의 모든 열을 Amazon S3로 내보내지만 쿼리된 열만 Athena 콘솔의 결과에 표시됩니다.

  • DDL 쓰기 작업은 지원되지 않습니다.

  • 모든 관련 Lambda 제한. 자세한 내용은 AWS Lambda 개발자 안내서에서 Lambda 할당량을 참조하십시오.

워크플로

다음 다이어그램은 Vertica 커넥터를 사용하는 쿼리의 워크플로를 보여줍니다.

Amazon Athena의 Vertica 쿼리 워크플로
  1. Vertica에 있는 하나 이상의 테이블에 대해 SQL 쿼리가 실행됩니다.

  2. 커넥터는 SQL 쿼리를 구문 분석하여 JDBC 연결을 통해 관련 부분을 Vertica로 보냅니다.

  3. 연결 문자열은 AWS Secrets Manager에 저장된 사용자 이름과 암호를 사용하여 Vertica에 액세스합니다.

  4. 커넥터는 다음 예와 같이 Vertica EXPORT 명령으로 SQL 쿼리를 래핑합니다.

    EXPORT TO PARQUET (directory = 's3://amzn-s3-demo-bucket/folder_name, Compression='Snappy', fileSizeMB=64) OVER() as SELECT PATH_ID, ... SOURCE_ITEMIZED, SOURCE_OVERRIDE FROM DELETED_OBJECT_SCHEMA.FORM_USAGE_DATA WHERE PATH_ID <= 5;
  5. Vertica는 SQL 쿼리를 처리하고 결과 세트를 Amazon S3 버킷으로 보냅니다. 처리량 향상을 위해 Vertica는 EXPORT 옵션을 사용하여 여러 Parquet 파일의 쓰기 작업을 병렬화합니다.

  6. Athena는 Amazon S3 버킷을 스캔하여 결과 세트에 대해 읽을 파일 수를 결정합니다.

  7. Athena는 Lambda 함수를 여러 번 호출하고 Amazon ArrowReader를 사용하여 결과 데이터 세트에서 Parquet 파일을 읽습니다. 여러 번의 호출을 통해 Athena는 Amazon S3 파일 읽기를 병렬화하고 초당 최대 100GB의 처리량을 달성할 수 있습니다.

  8. Athena는 데이터 레이크에서 스캔한 데이터로 Vertica에서 반환된 데이터를 처리하고 결과를 반환합니다.

용어

다음 용어는 Vertica 커넥터와 관련이 있습니다.

  • 데이터베이스 인스턴스 - Amazon EC2에 배포된 Vertica 데이터베이스의 모든 인스턴스.

  • 핸들러 - 데이터베이스 인스턴스에 액세스하는 Lambda 핸들러. 핸들러는 메타데이터 또는 데이터 레코드용일 수 있습니다.

  • 메타데이터 핸들러 - 데이터베이스 인스턴스에서 메타데이터를 검색하는 Lambda 핸들러.

  • 레코드 핸들러 - 데이터베이스 인스턴스에서 데이터 레코드를 검색하는 Lambda 핸들러.

  • 복합 핸들러 - 데이터베이스 인스턴스에서 메타데이터와 데이터 레코드를 모두 검색하는 Lambda 핸들러.

  • 속성 또는 파라미터 - 핸들러에서 데이터베이스 정보를 추출하는 데 사용되는 데이터베이스 속성. 이러한 속성을 Lambda 환경 변수로 구성합니다.

  • 연결 문자열 - 데이터베이스 인스턴스에 대한 연결을 설정하는 데 사용되는 텍스트 문자열.

  • 카탈로그 - connection_string 속성의 필수 접두사로서 Athena에 등록된 비 AWS Glue Glue 카탈로그.

파라미터

Amazon Athena Vertica 커넥터는 Lambda 환경 변수를 통해 구성 옵션을 제공합니다. 다음 Lambda 환경 변수를 사용하여 커넥터를 구성할 수 있습니다.

  • AthenaCatalogName – Lambda 함수 이름입니다.

  • ExportBucket – Vertica 쿼리 결과를 내보내는 Amazon S3 버킷입니다.

  • SpillBucket – 이 함수가 데이터를 유출할 수 있는 Amazon S3 버킷의 이름입니다.

  • SpillPrefix – 이 함수가 데이터를 유출할 수 있는 SpillBucket 위치의 접두사입니다.

  • SecurityGroupIds – Lambda 함수에 적용해야 하는 보안 그룹에 해당하는 하나 이상의 ID입니다(예: sg1, sg2 또는 sg3).

  • SubnetIds – Lambda 함수가 데이터 소스에 액세스하는 데 사용할 수 있는 서브넷에 해당하는 하나 이상의 서브넷 ID입니다(예: subnet1 또는 subnet2).

  • SecretNameOrPrefix – 이 함수가 액세스할 수 있는 Secrets Manager 이름 세트의 이름 또는 접두사입니다(예: vertica-*).

  • VerticaConnectionString – 카탈로그 관련 연결이 정의되지 않은 경우 기본적으로 사용할 Vertica 연결 세부 정보입니다. 문자열은 선택적으로 AWS Secrets Manager 구문(예: ${secret_name})을 사용할 수 있습니다.

  • VPC ID – Lambda 함수에 연결할 VPC ID입니다.

연결 문자열

다음 형식의 JDBC 연결 문자열을 사용하여 데이터베이스 인스턴스에 연결합니다.

vertica://jdbc:vertica://host_name:port/database?user=vertica-username&password=vertica-password

단일 연결 핸들러 사용

다음과 같은 단일 연결 메타데이터 및 레코드 핸들러를 사용하여 단일 Vertica 인스턴스에 연결할 수 있습니다.

핸들러 유형 Class
복합 핸들러 VerticaCompositeHandler
메타데이터 핸들러 VerticaMetadataHandler
레코드 핸들러 VerticaRecordHandler

단일 연결 핸들러 파라미터

파라미터 설명
default 필수 사항입니다. 기본 연결 문자열.

단일 연결 핸들러는 하나의 데이터베이스 인스턴스를 지원하며 default 연결 문자열 파라미터를 제공해야 합니다. 다른 연결 문자열은 모두 무시됩니다.

자격 증명 제공

JDBC 연결 문자열에서 데이터베이스의 사용자 이름과 암호를 제공하려면 연결 문자열 속성 또는 AWS Secrets Manager를 사용합니다.

  • 연결 문자열 - 사용자 이름과 암호를 JDBC 연결 문자열에 속성으로 지정할 수 있습니다.

    중요

    보안 모범 사례로, 환경 변수 또는 연결 문자열에서 하드 코딩된 보안 인증은 사용하지 않습니다. 하드 코딩된 보안 암호를 AWS Secrets Manager로 이동하는 방법에 대한 자세한 내용은 AWS Secrets Manager 사용 설명서하드 코딩된 보안 암호를 AWS Secrets Manager로 이동을 참조하세요.

  • AWS Secrets Manager - AWS Secrets Manager에서 Athena 연합 쿼리 기능을 사용하려면 Secrets Manager 연결을 위한 VPC 엔드포인트 또는 인터넷 액세스가 Lambda 함수에 연결된 VPC에 있어야 합니다.

    JDBC 연결 문자열에 AWS Secrets Manager의 보안 암호 이름을 입력할 수 있습니다. 커넥터는 암호 이름을 Secrets Manager의 usernamepassword 값으로 바꿉니다.

    Amazon RDS 데이터베이스 인스턴스의 경우 이 지원은 긴밀하게 통합됩니다. Amazon RDS를 사용하는 경우 AWS Secrets Manager 및 자격 증명 교체를 사용하는 것이 좋습니다. 데이터베이스에서 Amazon RDS를 사용하지 않는 경우 자격 증명을 다음 형식의 JSON으로 저장합니다.

    {"username": "${username}", "password": "${password}"}
보안 암호 이름이 있는 연결 문자열의 예제

다음 문자열의 보안 암호 이름은 ${vertica-username} 및 ${vertica-password}입니다.

vertica://jdbc:vertica://host_name:port/database?user=${vertica-username}&password=${vertica-password}

커넥터는 다음 예제와 같이 보안 암호 이름을 사용하여 보안 암호를 검색하고 사용자 이름과 암호를 제공합니다.

vertica://jdbc:vertica://host_name:port/database?user=sample-user&password=sample-password

현재 Vertica 커넥터는 vertica-usernamevertica-password JDBC 속성을 인식합니다.

유출 파라미터

Lambda SDK는 데이터를 Amazon S3로 유출할 수 있습니다. 동일한 Lambda 함수에서 액세스하는 모든 데이터베이스 인스턴스는 동일한 위치로 유출됩니다.

파라미터 설명
spill_bucket 필수 사항입니다. 유출 버킷 이름.
spill_prefix 필수 사항입니다. 유출 버킷 키 접두사.
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를 참조하세요.

데이터 형식 지원

다음 표에 Vertica 커넥터의 지원되는 데이터 형식이 나와 있습니다.

BigInt
Short
Integer
Long
Float
Double
날짜
Varchar
바이트
BigDecimal
TimeStamp as Varchar

성능

Lambda 함수는 프로젝션 푸시다운을 수행하여 쿼리에서 스캔되는 데이터를 줄입니다. LIMIT 절은 스캔되는 데이터의 양을 줄이지만 조건자가 제공되지 않으면 LIMIT 절을 포함하는 SELECT 쿼리가 최소 16MB의 데이터를 스캔할 것으로 예상해야 합니다. Vertica 커넥터는 동시성으로 인한 제한에 대한 복원력이 뛰어납니다.

패스스루 쿼리

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

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

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

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

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

라이선스 정보

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

추가 리소스

최신 JDBC 드라이버 버전 정보를 알아보려면 GitHub.com의 Vertica 커넥터용 pom.xml 파일을 참조하세요.

이 커넥터에 대한 추가 정보를 알아보려면 GitHub.com의 해당 사이트AWS Big Data Blog(빅 데이터 블로그)의 Querying a Vertica data source in Amazon Athena using the Athena Federated Query SDK(Athena 연합 쿼리 SDK를 사용하여 Amazon Athena에서 Vertica 데이터 소스 쿼리)를 참조하세요.