제퍼넷 로고

AWS Glue 및 Google BigQuery를 통해 확장 가능한 분석 활용 | 아마존 웹 서비스

시간

데이터 통합은 강력한 데이터 분석의 기초입니다. 여기에는 다양한 소스의 데이터 검색, 준비 및 구성이 포함됩니다. 현대 데이터 환경에서 다양한 소스의 데이터에 액세스하고, 통합하고, 변환하는 것은 데이터 중심 의사결정을 위한 필수적인 프로세스입니다. AWS 접착제서버리스 데이터 통합 ​​및 ETL(추출, 변환, 로드) 서비스인 는 이 프로세스를 혁신하여 더 쉽게 접근하고 효율적으로 만들었습니다. AWS Glue는 복잡성과 비용을 제거하여 조직이 몇 분 만에 데이터 통합 ​​작업을 수행하고 효율성을 높일 수 있도록 해줍니다.

이 블로그 게시물에서는 새로 발표 된 Google BigQuery용 관리형 커넥터를 소개하고 코드를 작성하지 않고도 AWS Glue Studio를 사용하여 최신 ETL 파이프라인을 구축하는 방법을 보여줍니다.

AWS Glue 개요

AWS 접착제 분석, 기계 학습(ML) 및 애플리케이션 개발을 위한 데이터를 더 쉽게 검색, 준비 및 결합할 수 있게 해주는 서버리스 데이터 통합 ​​서비스입니다. AWS Glue는 데이터 통합에 필요한 모든 기능을 제공하므로 몇 달이 아닌 몇 분 만에 데이터 분석을 시작하고 사용할 수 있습니다. AWS Glue는 데이터 통합을 더 쉽게 만들기 위해 시각적 및 코드 기반 인터페이스를 모두 제공합니다. 사용자는 다음을 사용하여 데이터를 보다 쉽게 ​​찾고 액세스할 수 있습니다. AWS Glue 데이터 카탈로그. 데이터 엔지니어와 ETL(추출, 변환 및 로드) 개발자는 몇 단계만 거치면 ETL 워크플로를 시각적으로 생성, 실행 및 모니터링할 수 있습니다. AWS 글루 스튜디오. 데이터 분석가와 데이터 과학자가 사용할 수 있는 AWS 글루 데이터브루 코드를 작성하지 않고도 데이터를 시각적으로 풍부하게 하고, 정리하고, 정규화합니다.

Google BigQuery Spark 커넥터 소개

다양한 데이터 통합 ​​사용 사례의 요구 사항을 충족하기 위해 AWS Glue는 이제 Google BigQuery용 기본 Spark 커넥터를 제공합니다. 이제 고객은 Spark용 AWS Glue 4.0을 사용하여 Google BigQuery의 테이블을 읽고 쓸 수 있습니다. 또한 전체 테이블을 읽거나 사용자 지정 쿼리를 실행하고 직접 및 간접 쓰기 방법을 사용하여 데이터를 쓸 수 있습니다. 안전하게 저장된 서비스 계정 사용자 인증 정보를 사용하여 BigQuery에 연결합니다. AWS 비밀 관리자.

Google BigQuery Spark 커넥터의 이점

  • 완벽한 통합: 기본 커넥터는 데이터 통합을 위한 직관적이고 효율적인 인터페이스를 제공하여 학습 곡선을 줄입니다.
  • 비용 효율성: 사용자 정의 커넥터를 구축하고 유지하는 데 비용이 많이 들 수 있습니다. AWS Glue에서 제공하는 기본 커넥터는 비용 효율적인 대안입니다.
  • 효율성: 이전에는 몇 주 또는 몇 달이 걸렸던 데이터 변환 작업을 이제 몇 분 안에 완료하여 효율성을 최적화할 수 있습니다.

솔루션 개요

이 예에서는 기본 Google BigQuery 커넥터와 함께 AWS Glue를 사용하여 두 개의 ETL 작업을 생성합니다.

  1. BigQuery 테이블을 쿼리하고 데이터를 다음 위치에 저장합니다. Amazon Simple Storage Service(Amazon S3) 마루 형식으로.
  2. 첫 번째 작업에서 추출된 데이터를 사용하여 Google BigQuery에 저장할 집계 결과를 변환하고 생성합니다.

솔루션 아키텍처

사전 조건

이 솔루션에 사용된 데이터 세트는 NCEI/WDS 글로벌 주요 지진 데이터베이스, 기원전 5,700년부터 현재까지 2150건 이상의 지진에 대한 전 세계 목록이 포함되어 있습니다. 이 공개 데이터를 Google BigQuery 프로젝트에 복사하거나 기존 데이터세트를 사용하세요.

BigQuery 연결 구성

AWS Glue에서 Google BigQuery에 연결하려면 다음을 참조하세요. BigQuery 연결 구성. Google Cloud Platform 자격 증명을 생성하여 Secrets Manager 비밀에 저장한 다음 해당 비밀을 Google BigQuery AWS Glue 연결과 연결해야 합니다.

Amazon S3 설정

Amazon S3의 모든 객체는 버킷에 저장됩니다. Amazon S3에 데이터를 저장하려면 먼저 다음을 수행해야 합니다. S3 버킷 생성 결과를 저장합니다.

S3 버킷을 생성하려면:

  1. AWS Management Console에서 아마존 S3선택한다.  버킷 만들기.
  2. 전역적으로 고유한 이름을 입력하세요. 성함 당신의 버킷을 위해; 예를 들어, awsglue-demo.
  3. 왼쪽 메뉴에서 버킷을 만듭니다.

AWS Glue ETL 작업을 위한 IAM 역할 생성

AWS Glue ETL 작업을 생성할 때 다음을 지정합니다. AWS 자격 증명 및 액세스 관리 (IAM) 작업에서 사용할 역할입니다. 역할은 Amazon S3(모든 소스, 대상, 스크립트, 드라이버 파일 및 임시 디렉터리용) 및 Secrets Manager를 포함하여 작업에 사용되는 모든 리소스에 대한 액세스 권한을 부여해야 합니다.

지침은 ETL 작업에 대한 IAM 역할 구성.

솔루션 연습

AWS Glue Studio에서 시각적 ETL 작업을 생성하여 Google BigQuery에서 Amazon S3로 데이터 전송

  1. 열기 AWS 접착제 콘솔.
  2. AWS Glue에서 다음으로 이동합니다. 비주얼 ETL 아래 ETL 작업 섹션을 만들고 다음을 사용하여 새 ETL 작업을 생성합니다. 시각 빈 캔버스로.
  3. 입력 성함 예를 들어, AWS Glue 작업의 경우 bq-s3-dataflow.
  4. 선택 구글 빅쿼리 데이터 소스로.
    1. 입력 name 예를 들어 Google BigQuery 소스 노드의 경우 noaa_significant_earthquakes.
    2. 를 선택 구글 빅쿼리 예를 들어 연결 bq-connection.
    3. 입력 부모의 예를 들어 프로젝트 bigquery-public-datasources.
    4. 선택 단일 테이블 선택 위한 BigQuery 소스.
    5. 입력 테이블 예를 들어 [dataset].[table] 형식으로 마이그레이션하려고 합니다. noaa_significant_earthquakes.earthquakes.
      bq에서 Amazon s3 데이터 흐름으로의 빅 쿼리 데이터 소스
  5. 다음으로 데이터 대상을 다음과 같이 선택하십시오. 아마존 S3.
    1. 입력 성함 예를 들어 지진과 같은 대상 Amazon S3 노드의 경우.
    2. 출력 데이터 선택 형성 as 나무 마루로.
    3. 선택 압축 유형 as 팔팔한.
    4. 다음 S3 대상 위치, 사전 요구 사항에서 생성된 버킷을 입력합니다. 예: s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/.
    5. 당신은 교체해야 <YourBucketName> 버킷 이름으로.
      bq에서 Amazon s3 데이터 흐름으로의 s3 대상 노드
  6. 다음으로 직업 세부 정보. 에서 IAM 역할, 사전 조건에서 IAM 역할을 선택합니다. 예를 들면 다음과 같습니다. AWSGlueRole.
    Amazon s3 데이터 흐름에 대한 bq의 IAM 역할
  7. 왼쪽 메뉴에서 찜하기.

작업 실행 및 모니터링

  1. ETL 작업이 구성된 후 작업을 실행할 수 있습니다. AWS Glue는 ETL 프로세스를 실행하여 Google BigQuery에서 데이터를 추출하고 이를 지정된 S3 위치에 로드합니다.
  2. AWS Glue 콘솔에서 작업 진행 상황을 모니터링합니다. 로그와 작업 실행 기록을 확인하여 모든 것이 원활하게 실행되는지 확인할 수 있습니다.

Amazon s3 데이터 흐름에 대한 bq 실행 및 모니터링

데이터 유효성 검사

  1. 작업이 성공적으로 실행된 후 S3 버킷의 데이터를 검증하여 예상과 일치하는지 확인합니다. 다음을 사용하여 결과를 볼 수 있습니다. 아마존 S3 셀렉트.

bq에서 s3 데이터 흐름 실행까지 Amazon s3에서 결과 검토

자동화 및 예약

  1. 필요한 경우 ETL 프로세스를 정기적으로 실행하도록 작업 일정을 설정합니다. AWS를 사용하면 ETL 작업을 자동화하여 S3 버킷이 Google BigQuery의 최신 데이터로 항상 최신 상태를 유지할 수 있습니다.

Google BigQuery에서 Amazon S3로 데이터를 전송하도록 AWS Glue ETL 작업을 성공적으로 구성했습니다. 다음으로 ETL 작업을 생성하여 이 데이터를 집계하고 Google BigQuery로 전송합니다.

AWS Glue Studio Visual ETL을 사용하여 지진 핫스팟 찾기.

  1. 엽니다 AWS 접착제 콘솔.
  2. AWS Glue에서 다음으로 이동합니다. 비주얼 ETL 아래 ETL 작업 섹션을 만들고 다음을 사용하여 새 ETL 작업을 생성합니다. 시각 빈 캔버스로.
  3. AWS Glue 작업의 이름을 제공합니다. 예를 들면 다음과 같습니다. s3-bq-dataflow.
  4. 왼쪽 메뉴에서 아마존 S3 데이터 소스로.
    1. 입력 성함 소스 Amazon S3 노드의 경우(예: 지진)
    2. 선택 S3 위치S3 소스 유형.
    3. 필수 구성 요소에서 생성된 S3 버킷을 S3 URL예를 들면, s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/.
    4. 당신은 교체해야 <YourBucketName> 버킷 이름으로.
    5. 선택 데이터 형식 as 나무 마루로.
    6. 선택 스키마 추론.
      s3에서 bq 데이터 흐름으로의 Amazon s3 소스 노드
  5. 다음으로 필드 선택 변환.
    1. 선택 earthquakes as 노드 부모.
    2. 필드 선택: id, eq_primary, and country.
      Amazon s3에서 bq 데이터 흐름으로의 필드 노드 선택
  6. 다음으로 집계 변환.
    1. 입력 성함예를 들어, Aggregate.
    2. 왼쪽 메뉴에서 Select Fields as 노드 부모.
    3. 왼쪽 메뉴에서 eq_primary and country그룹화 열.
    4. 추가 id골재 열과 count집계 함수.
      Amazon s3에서 bq 데이터 흐름으로의 집계 노드
  7. 다음으로 필드 이름 바꾸기 변환.
    1. 소스 Amazon S3 노드의 이름을 입력합니다. 예: Rename eq_primary.
    2. 왼쪽 메뉴에서 Aggregate as 노드 부모.
    3. 왼쪽 메뉴에서 eq_primary현재 필드 이름 들어가서 earthquake_magnitude새 필드 이름.
      Amazon s3의 eq_primary 필드 이름을 bq 데이터 흐름으로 바꿉니다.
  8. 다음으로 필드 이름 바꾸기 변환
    1. 소스 Amazon S3 노드의 이름을 입력합니다. 예: Rename count(id).
    2. 왼쪽 메뉴에서 Rename eq_primary as 노드 부모.
    3. 왼쪽 메뉴에서 count(id)현재 필드 이름 들어가서 number_of_earthquakes새 필드 이름.
      Amazon s3의 cound(id) 필드 이름을 bq 데이터 흐름으로 변경
  9. 다음으로 데이터 대상을 다음과 같이 선택하십시오. 구글 빅쿼리.
    1. Google BigQuery 소스 노드의 이름을 제공합니다. 예: most_powerful_earthquakes.
    2. 를 선택 구글 빅쿼리 연결예를 들면, bq-connection.
    3. 선택 상위 프로젝트예를 들면, bigquery-public-datasources.
    4. 의 이름을 입력하십시오 작업대 예를 들어 [dataset].[table] 형식으로 생성하려고 합니다. noaa_significant_earthquakes.most_powerful_earthquakes.
    5. 왼쪽 메뉴에서 직접쓰기 방식.
      Amazon s3에서 bq 데이터 흐름으로의 bq 대상
  10. 다음으로 직업 세부 정보 탭과 IAM 역할, 사전 조건에서 IAM 역할을 선택합니다. 예를 들면 다음과 같습니다. AWSGlueRole.
    Amazon s3에서 bq 데이터 흐름으로의 IAM 역할
  11. 왼쪽 메뉴에서 찜하기.

작업 실행 및 모니터링

  1. ETL 작업이 구성된 후 작업을 실행할 수 있습니다. AWS Glue는 ETL 프로세스를 실행하여 Google BigQuery에서 데이터를 추출하고 이를 지정된 S3 위치에 로드합니다.
  2. AWS Glue 콘솔에서 작업 진행 상황을 모니터링합니다. 로그와 작업 실행 기록을 확인하여 모든 것이 원활하게 실행되는지 확인할 수 있습니다.

Amazon s3에서 bq 데이터 흐름을 모니터링하고 실행합니다.

데이터 유효성 검사

  1. 작업이 성공적으로 실행된 후 Google BigQuery 데이터세트의 데이터를 검증합니다. 이 ETL 작업은 가장 강력한 지진이 발생한 국가 목록을 반환합니다. 이는 국가별로 특정 규모에 대한 지진 수를 계산하여 이를 제공합니다.

Amazon s3에서 bq 데이터 흐름으로의 집계 결과

자동화 및 예약

  1. ETL 프로세스를 정기적으로 실행하도록 작업 일정을 설정할 수 있습니다. AWS Glue를 사용하면 ETL 작업을 자동화하여 S3 버킷이 Google BigQuery의 최신 데이터로 항상 최신 상태를 유지할 수 있습니다.

그게 다야! Amazon S3에서 Google BigQuery로 데이터를 전송하기 위한 AWS Glue ETL 작업을 성공적으로 설정했습니다. 이 통합을 사용하면 두 플랫폼 간의 데이터 추출, 변환 및 로드 프로세스를 자동화하여 데이터를 분석 및 기타 애플리케이션에 쉽게 사용할 수 있습니다.

정리

요금이 부과되지 않도록 하려면 다음 단계를 완료하여 AWS 계정에서 이 블로그 게시물에 사용된 리소스를 정리하십시오.

  1. AWS Glue 콘솔에서 비주얼 ETL 탐색 창에서
  2. 작업 목록에서 해당 작업을 선택하세요. bq-s3-data-flow 그것을 삭제하십시오.
  3. 작업 목록에서 해당 작업을 선택하세요. s3-bq-data-flow 그것을 삭제하십시오.
  4. AWS Glue 콘솔에서 연결 아래의 탐색 창에서 데이터 카탈로그.
  5. 선택 BiqQuery 연결 생성하고 삭제했습니다.
  6. Secrets Manager 콘솔에서 생성한 보안 암호를 선택하고 삭제합니다.
  7. IAM 콘솔에서 역할 탐색 창에서 AWS Glue ETL 작업에 대해 생성한 역할을 선택하고 삭제합니다.
  8. Amazon S3 콘솔에서 생성한 S3 버킷을 검색하고  개체를 삭제한 다음 버킷을 삭제합니다.
  9. Google BigQuery 리소스가 포함된 프로젝트를 삭제하여 Google 계정의 리소스를 정리하세요. 설명서에 따라 Google 리소스 정리.

결론

AWS Glue와 Google BigQuery의 통합은 분석 파이프라인을 단순화하고, 통찰력을 얻는 시간을 단축하며, 데이터 기반 의사 결정을 촉진합니다. 이를 통해 조직은 데이터 통합 ​​및 분석을 간소화할 수 있습니다. AWS Glue의 서버리스 특성은 인프라 관리가 필요하지 않으며 작업이 실행되는 동안 소비된 리소스에 대해서만 비용을 지불한다는 것을 의미합니다. 조직이 의사 결정을 위해 데이터에 점점 더 의존함에 따라 이 기본 Spark 커넥터는 데이터 분석 요구 사항을 신속하게 충족할 수 있는 효율적이고 비용 효율적이며 민첩한 솔루션을 제공합니다.

AWS Glue에서 Google BigQuery의 테이블을 읽고 쓰는 방법에 관심이 있다면 단계별 설명을 살펴보세요. 동영상 자습서. 이 튜토리얼에서는 연결 설정부터 데이터 전송 흐름 실행까지 전체 프로세스를 안내합니다. AWS Glue에 대한 자세한 내용을 보려면 다음 사이트를 방문하세요. AWS 접착제.

충수

AWS Glue 콘솔 대신 코드를 사용하여 이 예제를 구현하려는 경우 다음 코드 조각을 사용하십시오.

Google BigQuery에서 데이터를 읽고 Amazon S3에 데이터 쓰기

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args) # STEP-1 Read the data from Big Query Table noaa_significant_earthquakes_node1697123333266 = ( glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "bq-connection", "parentProject": "bigquery-public-datasources", "sourceType": "table", "table": "noaa_significant_earthquakes.earthquakes", }, transformation_ctx="noaa_significant_earthquakes_node1697123333266", )
)
# STEP-2 Write the data read from Big Query Table into S3
# You should replace <YourBucketName> with the name of your bucket.
earthquakes_node1697157772747 = glueContext.write_dynamic_frame.from_options( frame=noaa_significant_earthquakes_node1697123333266, connection_type="s3", format="glueparquet", connection_options={ "path": "s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/", "partitionKeys": [], }, format_options={"compression": "snappy"}, transformation_ctx="earthquakes_node1697157772747",
) job.commit()

Amazon S3에서 데이터를 읽고 집계하고 Google BigQuery에 쓰기

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame
from awsglue import DynamicFrame
from pyspark.sql import functions as SqlFuncs def sparkAggregate( glueContext, parentFrame, groups, aggs, transformation_ctx
) -> DynamicFrame: aggsFuncs = [] for column, func in aggs: aggsFuncs.append(getattr(SqlFuncs, func)(column)) result = ( parentFrame.toDF().groupBy(*groups).agg(*aggsFuncs) if len(groups) > 0 else parentFrame.toDF().agg(*aggsFuncs) ) return DynamicFrame.fromDF(result, glueContext, transformation_ctx) args = getResolvedOptions(sys.argv, ["JOB_NAME"])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args["JOB_NAME"], args) # STEP-1 Read the data from Amazon S3 bucket
# You should replace <YourBucketName> with the name of your bucket.
earthquakes_node1697218776818 = glueContext.create_dynamic_frame.from_options( format_options={}, connection_type="s3", format="parquet", connection_options={ "paths": [ "s3://<YourBucketName>/noaa_significant_earthquakes/earthquakes/" ], "recurse": True, }, transformation_ctx="earthquakes_node1697218776818",
) # STEP-2 Select fields
SelectFields_node1697218800361 = SelectFields.apply( frame=earthquakes_node1697218776818, paths=["id", "eq_primary", "country"], transformation_ctx="SelectFields_node1697218800361",
) # STEP-3 Aggregate data
Aggregate_node1697218823404 = sparkAggregate( glueContext, parentFrame=SelectFields_node1697218800361, groups=["eq_primary", "country"], aggs=[["id", "count"]], transformation_ctx="Aggregate_node1697218823404",
) Renameeq_primary_node1697219483114 = RenameField.apply( frame=Aggregate_node1697218823404, old_name="eq_primary", new_name="earthquake_magnitude", transformation_ctx="Renameeq_primary_node1697219483114",
) Renamecountid_node1697220511786 = RenameField.apply( frame=Renameeq_primary_node1697219483114, old_name="`count(id)`", new_name="number_of_earthquakes", transformation_ctx="Renamecountid_node1697220511786",
) # STEP-1 Write the aggregated data in Google BigQuery
most_powerful_earthquakes_node1697220563923 = ( glueContext.write_dynamic_frame.from_options( frame=Renamecountid_node1697220511786, connection_type="bigquery", connection_options={ "connectionName": "bq-connection", "parentProject": "bigquery-public-datasources", "writeMethod": "direct", "table": "noaa_significant_earthquakes.most_powerful_earthquakes", }, transformation_ctx="most_powerful_earthquakes_node1697220563923", )
) job.commit()


저자 소개

카르티케이 카토르 Amazon Web Services(AWS)의 글로벌 생명과학 부문 솔루션 아키텍트입니다. 그는 AWS Analytics 서비스에 중점을 두고 고객의 요구 사항을 충족하기 위해 혁신적이고 확장 가능한 솔루션을 구축하는 데 열정을 쏟고 있습니다. 기술 분야 외에도 그는 열렬한 달리기 선수이며 하이킹을 즐깁니다.

가면 샤를란지예프가면 샤를란지예프 수석 빅 데이터 및 ETL 솔루션 설계자이자 Amazon AppFlow 전문가입니다. 그는 복잡한 데이터 통합 ​​문제에 직면한 고객의 삶을 더 편리하게 만드는 사명을 갖고 있습니다. 그의 비밀무기는? 최소한의 노력과 코딩 없이 작업을 완료할 수 있는 완전 관리형 로우 코드 AWS 서비스입니다.

안슐 샤르마안슐 샤르마 AWS Glue 팀의 소프트웨어 개발 엔지니어입니다. 그는 모든 데이터 소스(데이터 웨어하우스, 데이터 레이크, NoSQL 등)를 Glue ETL 작업에 연결하는 Glue 고객 기본 방법을 제공하는 연결 헌장을 주도하고 있습니다. 기술 분야 외에도 그는 크리켓과 축구를 좋아합니다.

spot_img

최신 인텔리전스

spot_img