기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Athena를 사용하여 SQL로 파일 쿼리
엔터프라이즈 시스템은 NFS 또는 SMB 파일 공유에 도달하는 로그 내보내기, 트랜잭션 추출, 인벤토리 스냅샷, 시스템 간 파일 삭제 등 파일 기반 출력을 생성하는 경우가 많습니다.
Amazon Athena는 FSx for ONTAP 볼륨에 연결된 Amazon S3 액세스 포인트를 사용하여 파일을 쿼리합니다. FSx 애플리케이션과 사용자는 항상 있는 방식으로 NFS 또는 SMB를 통해 볼륨에 계속 쓰고, 분석가는 액세스 포인트를 통해 해당 데이터에 대해 표준 SQL을 실행합니다. FSx for ONTAP 볼륨은 NFS, SMB 및 Amazon S3 API를 통해 동시에 액세스할 수 있으므로 한 프로토콜에서 동일한 파일을 생성하고 복사본 없이 다른 프로토콜에서 사용할 수 있습니다.
이 자습서에서는 Amazon S3 액세스 포인트를 통해 샘플 데이터 세트를 FSx for ONTAP 볼륨에 업로드 AWS Glue Data Catalog하고에 등록한 다음 Amazon Athena로 쿼리합니다.
참고
이 자습서를 완료하는 데 약 20~30분이 걸립니다. AWS 서비스 사용한 에는 생성한 리소스에 대한 요금이 발생합니다. 정리 섹션을 포함하여 모든 단계를 즉시 완료하면 미국 동부(버지니아 북부)에서 예상 비용이 1 USD 미만입니다 AWS 리전. 이 견적에는 FSx for ONTAP 볼륨 자체에 대한 지속적인 요금은 포함되지 않습니다.
사전 조건
시작하기 전에 다음 항목이 준비되었는지 확인합니다.
Amazon S3 액세스 포인트가 연결된 FSx for ONTAP 볼륨입니다. 액세스 포인트에는 인터넷 네트워크 오리진이 있어야 합니다. 액세스 포인트 생성에 대한 지침은 섹션을 참조하세요액세스 포인트 생성.
쿼리 결과 위치로 구성된 Athena 작업 그룹입니다. Athena는 FSx for ONTAP 볼륨이 아닌 Amazon S3 버킷에 쿼리 결과를 기록합니다. 작업 그룹이 없는 경우
primary작업 그룹을 사용하고 Athena 콘솔의 설정에서 결과 위치를 구성할 수 있습니다. 자세한 내용은 Amazon Athena 사용 설명서의 작업 그룹 관리를 참조하세요.AWSGlueServiceRole관리형 정책 AWS Glue 이 연결된에 대한 IAM 역할과 Amazon S3 액세스 포인트에 대한 액세스 권한을 부여하는 인라인 정책입니다. 없는 경우 다음 단계를 사용합니다.다음 신뢰 정책을 로 저장합니다
glue-trust-policy.json. 이를 통해가 역할을 수임 AWS Glue 할 수 있습니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "glue.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }다음 권한 정책을 로 저장합니다
glue-s3-policy.json. 액세스 포인트에 대한 액세스 권한을 부여합니다.,region및account-id를 값으로 바꿉니다.access-point-name{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:region:account-id:accesspoint/access-point-name", "arn:aws:s3:region:account-id:accesspoint/access-point-name/object/*" ] } ] }역할을 생성하고 정책을 연결합니다.
$aws iam create-role \ --role-namefsxn-tutorial-glue-role\ --assume-role-policy-document file://glue-trust-policy.json aws iam attach-role-policy \ --role-namefsxn-tutorial-glue-role\ --policy-arn arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole aws iam put-role-policy \ --role-namefsxn-tutorial-glue-role\ --policy-name s3-access-point-policy \ --policy-document file://glue-s3-policy.json
Athena 쿼리를 실행하고 AWS Glue 데이터 카탈로그에 액세스할 수 있는 IAM 권한.
중요
Amazon S3 액세스 포인트는 인터넷 네트워크 오리진을 사용해야 합니다. Athena는 VPC가 아닌 관리형 인프라에서 Amazon S3에 액세스합니다. VPC 네트워크 오리진이 있는 액세스 포인트는 Athena의 요청을 거부합니다.
1단계: FSx for ONTAP 볼륨에 샘플 데이터 업로드
이 자습서에서는 뉴욕시에서 공개적으로 사용 가능한 택시 여행 데이터 세트인 NYC Taxi and Limousine Commission(TLC) 여행 레코드 데이터를
한 달 분량의 노란색 택시 이동 데이터를 다운로드하여 Amazon S3 액세스 포인트를 통해 FSx for ONTAP 볼륨에 업로드합니다.
$curl -O https://d37ci6vzurychx.cloudfront.net/trip-data/yellow_tripdata_2024-01.parquet
액세스 포인트 별칭을 사용하여 FSx for ONTAP 볼륨에 파일을 업로드합니다. 를 액세스 포인트 별칭으로 바꿉니다.my-ap-alias-ext-s3alias
$aws s3 cp yellow_tripdata_2024-01.parquet \ s3://my-ap-alias-ext-s3alias/taxi-data/yellow_tripdata_2024-01.parquet
액세스 포인트를 통해 파일에 액세스할 수 있는지 확인합니다.
$aws s3 ls s3://my-ap-alias-ext-s3alias/taxi-data/2024-01-23 02:18:13 49961641 yellow_tripdata_2024-01.parquet
2단계:에서 데이터베이스 생성 AWS Glue Data Catalog
에서 테이블 메타데이터 AWS Glue Data Catalog 를 보관할 데이터베이스를 생성합니다. AWS Glue 콘솔, Athena 쿼리 편집기 또는를 사용하여 데이터베이스를 생성할 수 있습니다 AWS CLI.
AWS Glue console
https://console.aws.amazon.com/glue/
AWS Glue 콘솔을 엽니다. 탐색 창의 데이터 카탈로그에서 데이터베이스를 선택합니다.
데이터베이스 추가(Add database)를 선택합니다.
이름에
를 입력합니다.fsxn_taxi_demo데이터베이스 생성을 선택합니다.
Athena 쿼리 편집기 또는 AWS CLI
$aws athena start-query-execution \ --query-string "CREATE DATABASE IF NOT EXISTSfsxn_taxi_demo" \ --work-groupprimary
3단계:에 데이터 등록 AWS Glue Data Catalog
Athena에서 AWS Glue 크롤러(권장) 또는 수동 CREATE EXTERNAL TABLE 문을 사용하여 데이터를 등록할 수 있습니다.
옵션 A: AWS Glue 크롤러 사용(권장)
AWS Glue 크롤러는 데이터의 스키마를 자동으로 검색하고에 테이블을 생성합니다 AWS Glue Data Catalog. 크롤러가 Parquet 파일 메타데이터에서 올바른 열 유형을 유추하기 때문에 권장되는 접근 방식입니다.
액세스 포인트 별칭을 가리키는 크롤러를 생성합니다.
를 액세스 포인트 별칭으로 바꾸고를 AWS Glue IAM 역할의 ARNmy-ap-alias-ext-s3alias으로 바꿉니다.my-glue-role-arn$aws glue create-crawler \ --namefsxn-taxi-crawler\ --rolemy-glue-role-arn\ --database-namefsxn_taxi_demo\ --targets '{"S3Targets": [{"Path": "s3://my-ap-alias-ext-s3alias/taxi-data/"}]}'크롤러를 실행합니다.
$aws glue start-crawler --namefsxn-taxi-crawler크롤러 상태를 확인합니다. 크롤러는 일반적으로 1~2분 내에 완료됩니다.
$aws glue get-crawler --namefsxn-taxi-crawler\ --query "Crawler.{State:State,Status:LastCrawl.Status}"크롤러가 완료되면 상태는
READY이고 상태는 입니다SUCCEEDED. 크롤러는fsxn_taxi_demo데이터베이스에taxi_data(폴더 이름에서 파생된) 테이블을 생성합니다.
옵션 B: Athena에서 수동으로 테이블 생성
데이터의 스키마를 이미 알고 있는 경우 CREATE EXTERNAL TABLE 문을 사용하여 Athena에서 직접 테이블을 생성할 수 있습니다. LOCATION 절에서 액세스 포인트 별칭을 사용합니다.
CREATE EXTERNAL TABLE fsxn_taxi_demo.yellow_taxi_trips ( VendorID bigint, tpep_pickup_datetime timestamp, tpep_dropoff_datetime timestamp, passenger_count bigint, trip_distance double, RatecodeID bigint, store_and_fwd_flag string, PULocationID bigint, DOLocationID bigint, payment_type bigint, fare_amount double, extra double, mta_tax double, tip_amount double, tolls_amount double, improvement_surcharge double, total_amount double, congestion_surcharge double, Airport_fee double ) STORED AS PARQUET LOCATION 's3://my-ap-alias-ext-s3alias/taxi-data/'
참고
열 유형은 Parquet 파일의 유형과 일치해야 합니다. 이 데이터 세트의 경우 passenger_count 및와 같은 필드는 VendorID가 아닌 Parquet 파일에 bigint (INT64)로 저장됩니다double. 유형이 일치하지 않으면 Athena는 HIVE_BAD_DATA 오류를 반환합니다. AWS Glue 크롤러(옵션 A)를 사용하면 크롤러가 올바른 유형을 자동으로 유추하기 때문에이 문제를 피할 수 있습니다.
4단계: 데이터 쿼리
Athena 쿼리 편집기를 열거나 AWS CLI 를 사용하여 FSx for ONTAP 데이터에 대해 SQL 쿼리를 실행합니다. 다음 예제에서는 AWS Glue 크롤러()에서 생성한 테이블을 사용합니다taxi_data. 테이블을 수동으로 생성한 경우를 taxi_data로 바꿉니다yellow_taxi_trips.
총 주행 수 계산 및 평균 계산
SELECT COUNT(*) AS total_trips, ROUND(AVG(trip_distance), 2) AS avg_distance_miles, ROUND(AVG(total_amount), 2) AS avg_total_usd, ROUND(AVG(passenger_count), 1) AS avg_passengers FROM fsxn_taxi_demo.taxi_data
출력 예시:
| 총_트립 | 평균_거리_마일 | avg_total_usd | avg_passengers |
|---|---|---|---|
| 2964624 | 3.65 | 26.80 | 1.3 |
가장 바쁜 픽업 시간 찾기
SELECT HOUR(tpep_pickup_datetime) AS pickup_hour, COUNT(*) AS trip_count, ROUND(AVG(total_amount), 2) AS avg_fare FROM fsxn_taxi_demo.taxi_data GROUP BY HOUR(tpep_pickup_datetime) ORDER BY trip_count DESC LIMIT 5
가장 높은 수익의 픽업 위치 찾기
SELECT PULocationID AS pickup_location, COUNT(*) AS trip_count, ROUND(SUM(total_amount), 2) AS total_revenue FROM fsxn_taxi_demo.taxi_data GROUP BY PULocationID ORDER BY total_revenue DESC LIMIT 10
고려 사항
읽기 전용 액세스. Athena는 액세스 포인트를 통해 FSx for ONTAP 볼륨에서 데이터를 읽습니다. Athena 쿼리 결과는 FSx for ONTAP 볼륨이 아닌 Amazon S3 결과 버킷에 기록됩니다.
인터넷 오리진이 필요합니다. Athena는 VPC 외부의 관리형 인프라에서 Amazon S3에 액세스합니다.
aws:SourceVpc및aws:SourceVpce조건 키는 Athena 요청에 사용할 수 없습니다. 인터넷 오리진 액세스 포인트를 사용해야 합니다.파일 형식. Athena는 Parquet, ORC, JSON, CSV 및 기타 형식을 지원합니다. Athena는 쿼리에서 참조된 열만 읽기 때문에 Parquet 및 ORC와 같은 열 형식은 최상의 쿼리 성능을 제공합니다.
파일 시스템 사용자 권한. 액세스 포인트와 연결된 파일 시스템 사용자는 쿼리 중인 파일에 대한 읽기 권한이 있어야 합니다.
AWS Glue Data Catalog 테이블은 재사용할 수 있습니다. 에 테이블을 등록하면 Amazon Redshift Spectrum AWS Glue Data Catalog, Amazon EMR 및 AWS Glue ETL 작업 AWS Glue Data Catalog과 같이와 통합되는 다른 AWS 분석 서비스에서 테이블을 사용할 수 있습니다.
정리
요금이 계속 부과되지 않도록 하려면이 자습서에서 생성한 리소스를 삭제합니다.
Athena 테이블과 데이터베이스를 삭제합니다.
DROP TABLE IF EXISTS fsxn_taxi_demo.taxi_data; DROP TABLE IF EXISTS fsxn_taxi_demo.yellow_taxi_trips; DROP DATABASE IF EXISTS fsxn_taxi_demo CASCADE;AWS Glue 크롤러를 삭제합니다.
$aws glue delete-crawler --namefsxn-taxi-crawlerFSx for ONTAP 볼륨에서 샘플 데이터를 삭제합니다.
$aws s3 rm s3://my-ap-alias-ext-s3alias/taxi-data/yellow_tripdata_2024-01.parquet