Amazon Athena Google Cloud Storage 커넥터 - Amazon Athena

Amazon Athena Google Cloud Storage 커넥터

Amazon Athena Google Cloud Storage 커넥터를 사용하면 Amazon Athena가 Google Cloud Storage(GCS) 버킷에 저장된 Parquet 및 CSV 파일에 대해 쿼리를 실행할 수 있습니다. GCS 버킷의 분할되지 않은 폴더나 분할된 폴더에서 하나 이상의 Parquet 또는 CSV 파일을 그룹화한 후 AWS Glue 데이터베이스 테이블에서 구성할 수 있습니다.

계정에서 Lake Formation을 활성화한 경우 AWS Serverless Application Repository에 배포한 Athena 페더레이션형 Lambda 커넥터의 IAM 역할은 Lake Formation에서 AWS Glue Data Catalog에 대한 읽기 액세스 권한을 가지고 있어야 합니다.

필수 조건

제한 사항

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

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

  • 현재 커넥터는 파티션 열(AWS Glue 테이블 스키마의 string 또는 varchar)에 대해 VARCHAR 유형만 지원합니다. 다른 파티션 필드 유형은 Athena에서 쿼리할 때 오류가 발생합니다.

용어

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

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

  • 메타데이터 핸들러 - GCS 버킷에서 메타데이터를 검색하는 Lambda 핸들러입니다.

  • 레코드 핸들러 - GCS 버킷에서 데이터 레코드를 검색하는 Lambda 핸들러입니다.

  • 복합 핸들러 - GCS 버킷에서 메타데이터와 데이터 레코드를 모두 검색하는 Lambda 핸들러입니다.

지원되는 파일 형식

GCS 커넥터는 Parquet 및 CSV 파일 형식을 지원합니다.

참고

동일한 GCS 버킷 또는 경로에 CSV 및 Parquet 파일을 모두 배치하지 않도록 합니다. 그렇게 하면 Parquet 파일을 CSV로 읽거나 그 반대로 읽으려고 할 때 런타임 오류가 발생할 수 있습니다.

파라미터

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

  • 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를 사용하여 키 생성). 유출 암호화를 비활성화하면 특히 유출 위치가 서버 측 암호화를 사용하는 경우 성능이 향상될 수 있습니다.

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

AWS Glue에서 데이터베이스 및 테이블 설정

GCS 커넥터의 기본 제공 스키마 추론 기능은 제한적이기 때문에 메타데이터에 AWS Glue를 사용하는 것이 좋습니다. 다음 절차는 Athena에서 액세스할 수 있는 AWS Glue에서 데이터베이스와 테이블을 생성하는 방법을 보여줍니다.

AWS Glue에서 데이터베이스 생성

AWS Glue 콘솔을 사용하여 GCS 커넥터와 함께 사용할 데이터베이스를 생성할 수 있습니다.

AWS Glue 데이터베이스 사용자를 생성하려면 다음을 수행하세요.
  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

  2. 탐색 창에서 Databases(데이터베이스)를 선택합니다.

  3. 데이터베이스 추가(Add database)를 선택합니다.

  4. Name(이름)에 GCS 커넥터와 함께 사용할 데이터베이스 이름을 입력합니다.

  5. Location(위치)에 s3://google-cloud-storage-flag.를 지정합니다. 이 위치는 AWS Glue 데이터베이스에 Athena에서 쿼리할 GCS 데이터용 테이블이 포함되어 있음을 GCS 커넥터에 알립니다. 커넥터는 Athena에서 이 플래그가 있는 데이터베이스를 인식하고 그렇지 않은 데이터베이스는 무시합니다.

  6. 데이터베이스 생성를 선택합니다.

AWS Glue에서 테이블 생성

이제 데이터베이스용 테이블을 생성할 수 있습니다. GCS 커넥터와 함께 사용할 AWS Glue 테이블을 생성할 때 추가 메타데이터를 지정해야 합니다.

AWS Glue 콘솔에서 테이블을 생성하려면 다음을 수행하세요.
  1. AWS Glue 콘솔의 탐색 창에서 Tables(테이블)를 선택합니다.

  2. Tables(테이블) 페이지에서 Add table(테이블 추가)을 선택합니다.

  3. Set table properties(테이블 속성 설정) 페이지에 다음 정보를 입력합니다.

    • Name(이름) – 테이블의 고유한 이름입니다.

    • Database(데이터베이스) – GCS 커넥터용으로 생성한 AWS Glue 데이터베이스를 선택합니다.

    • Include path(포함 경로) – Data store(데이터 스토어) 섹션에서 Include path(포함 경로)에 gs://로 시작하는 GCS의 URI 위치를 입력합니다(예: gs://gcs_table/data/). 파티션 폴더가 하나 이상 있는 경우 해당 폴더를 경로에 포함하지 마세요.

      참고

      s3://가 아닌 테이블 경로를 입력하면 AWS Glue 콘솔에 오류가 표시됩니다. 이 오류는 무시할 수 있습니다. 테이블이 성공적으로 생성됩니다.

    • Data format(데이터 형식) – Classification(분류)에서 CSV 또는 Parquet를 선택합니다.

  4. [Next]를 선택합니다.

  5. Choose or define schema(스키마 선택 또는 정의) 페이지에서 테이블 스키마를 정의하는 것이 좋지만 필수는 아닙니다. 스키마를 정의하지 않으면 GCS 커넥터가 스키마 추론을 시도합니다.

    다음 중 하나를 수행하십시오.

    • GCS 커넥터가 스키마 추론을 시도하도록 하려면 Next(다음)를 선택한 다음 Create(생성)를 선택합니다.

    • 스키마를 직접 정의하려면 다음 섹션의 단계를 따르세요.

AWS Glue에서 테이블 스키마 정의

AWS Glue에서 테이블 스키마를 정의하려면 더 많은 단계가 필요하지만 테이블 생성 프로세스를 더 잘 제어할 수 있습니다.

AWS Glue에서 테이블의 스키마를 정의하려면 다음을 수행하세요.
  1. Choose or define schema(스키마 선택 또는 정의) 페이지에서 Add(추가)를 선택합니다.

  2. Add schema entry(스키마 항목 추가) 대화 상자를 사용하여 열 이름과 데이터 유형을 제공할 수 있습니다.

  3. 열을 파티션 열로 지정하려면 Set as partition key(파티션 키로 설정) 옵션을 선택합니다.

  4. Save(저장)를 선택하여 열을 저장합니다.

  5. Add(추가)를 선택하여 열을 추가합니다.

  6. 열 추가를 마치면 Next(다음)를 선택합니다.

  7. Review and create(검토 및 생성) 페이지에서 테이블을 검토한 다음 Create(생성)를 선택합니다.

  8. 스키마에 파티션 정보가 포함된 경우 다음 섹션의 단계에 따라 AWS Glue에서 테이블 속성에 파티션 패턴을 추가합니다.

AWS Glue에서 테이블 속성에 파티션 패턴 추가

GCS 버킷에 파티션이 있는 경우 AWS Glue에서 테이블 속성에 파티션 패턴을 추가해야 합니다.

AWS Glue에서 테이블 속성에 파티션 정보를 추가하려면 다음을 수행하세요.
  1. AWS Glue에서 생성한 테이블의 세부 정보 페이지에서 Actions(작업), Edit table(테이블 편집)을 선택합니다.

  2. Edit table(테이블 편집) 페이지에서 Table properties(테이블 속성) 세션이 나타날 때까지 아래로 스크롤합니다.

  3. Add(추가)를 선택하여 파티션 키를 추가합니다.

  4. 키(Key)partition.pattern를 입력합니다. 이 키는 폴더 경로 패턴을 정의합니다.

  5. Value(값)에 StateName=${statename}/ZipCode=${zipcode}/와 같은 폴더 경로 패턴을 입력합니다. 여기서 ${}로 묶인 statenamezipcode는 파티션 열 이름입니다. GCS 커넥터는 Hive 및 비Hive 파티션 구성표를 모두 지원합니다.

  6. 작업을 마쳤으면 저장을 선택합니다.

  7. 방금 생성한 테이블 속성을 보려면 Advanced properties(고급 속성) 탭을 선택합니다.

이제 Athena 콘솔로 이동할 수 있습니다. AWS Glue에서 생성한 데이터베이스와 테이블은 Athena에서 쿼리할 수 있습니다.

데이터 형식 지원

다음 표에 CSV 및 Parquet에 대해 지원되는 데이터 형식이 나와 있습니다.

CSV

데이터의 특성 추론된 데이터 형식
데이터가 숫자처럼 보임 BIGINT
데이터가 문자열처럼 보임 VARCHAR
데이터가 부동 소수점(float, double 또는 decimal)처럼 보임 DOUBLE
데이터가 날짜처럼 보임 Timestamp
데이터에 true/false 값이 포함됨 BOOL

PARQUET

PARQUET Athena(Arrow)
BINARY VARCHAR
BOOLEAN BOOL
DOUBLE DOUBLE
ENUM VARCHAR
FIXED_LEN_BYTE_ARRAY DECIMAL
FLOAT FLOAT(32비트)
INT32
  1. INT32

  2. DATEDAY(Parquet 열 논리적 유형이 DATE인 경우)

INT64
  1. INT64

  2. TIMESTAMP(Parquet 열 논리적 유형이 TIMESTAMP인 경우)

INT96 Timestamp
MAP MAP
STRUCT STRUCT
LIST LIST

필수 권한

이 커넥터에 필요한 IAM 정책에 대한 자세한 내용을 알아보려면 athena-gcs.yaml 파일의 Policies 섹션을 검토하세요. 다음 목록에 필요한 권한이 요약되어 있습니다.

  • Amazon S3 쓰기 액세스 - 대규모 쿼리의 결과 유출을 위해서는 커넥터에 Amazon S3 위치에 대한 쓰기 액세스 권한이 필요합니다.

  • Athena GetQueryExecution - 커넥터는 업스트림 Athena 쿼리가 종료된 경우 이 권한을 사용하여 빠른 실패를 수행합니다.

  • AWS Glue Data Catalog - 스키마 정보를 가져오기 위해 GCS 커넥터에 AWS Glue Data Catalog에 대한 읽기 전용 액세스 권한이 필요합니다.

  • CloudWatch Logs - 로그를 저장하기 위해 커넥터 CloudWatch Logs에 대한 액세스 권한이 필요합니다.

성능

테이블 스키마에 파티션 필드가 포함되어 있고 partition.pattern 테이블 속성이 올바르게 구성된 경우 쿼리의 WHERE 절에 파티션 필드를 포함할 수 있습니다. 이러한 쿼리의 경우 GCS 커넥터는 파티션 열을 사용하여 GCS 폴더 경로를 구체화하고 GCS 폴더에서 불필요한 파일을 스캔하지 않도록 합니다.

Parquet 데이터 세트의 경우 열 하위 세트를 선택하면 스캔되는 데이터가 줄어듭니다. 이로 인해 일반적으로 열 프로젝션이 적용될 때 쿼리 실행 런타임이 짧아집니다.

CSV 데이터 세트의 경우 열 프로젝션이 지원되지 않으며 스캔되는 데이터의 양을 줄이지 않습니다.

LIMIT 절은 스캔되는 데이터의 양을 줄이지만 조건자를 제공하지 않으면 LIMIT 절을 포함하는 SELECT 쿼리가 최소 16MB의 데이터를 스캔할 것으로 예상해야 합니다. GCS 커넥터는 적용된 LIMIT 절에 관계없이 작은 데이터 세트보다 큰 데이터 세트에 대해 더 많은 데이터를 스캔합니다. 예를 들어, 쿼리 SELECT * LIMIT 10000은 더 작은 기본 데이터 세트보다 더 큰 기본 데이터 세트에 대해 더 많은 데이터를 스캔합니다.

라이선스 정보

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

다음 사항도 참조하십시오.

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