AWS 기술 블로그

AWS Glue DataBrew와 Amazon QuickSight를 이용한 반정형 중첩 JSON 데이터 분석

이 글은 AWS Big Data Blog에 게시된 Simplify semi-structured nested JSON data analysis with AWS Glue DataBrew and Amazon QuickSight by Sriharsh Adari, Amogh Gaikwad, and Rahul Sonawane을 한국어 번역 및 편집을 하였습니다.

산업이 성장하고 데이터양이 늘어나면서 빅데이터 분석이 데이터 분석이나 기계 학습(ML)에서 공통으로 사용되고 있습니다. 데이터는 정형, 반정형 및 비정형 형식의 다양한 소스에서 발생합니다. 반구조화된 데이터의 일반적인 경량 파일 형식 중 하나가 JSON입니다. 그런데 반정형 데이터의 속성상 JSON은 중첩된 키-값 구조가 되기도 합니다. 다른 한편으로 분석가는 데이터 분석이나 데이터 프로파일링을 하기 위해 사용이 쉬운 그래픽 인터페이스를 선호하고 있습니다.

AWS Glue DataBrew는 350개 이상의 데이터 변환 함수를 내장하고 있으며 사용하기 쉬운 시각적 데이터 전처리 기능을 제공합니다. DataBrew를 사용하면 코딩으로 변환하는데 수일 또는 수주가 소요되는 복잡한 중첩 JSON 파일을 쉽게 분석할 수 있습니다. 그런 다음에는 Amazon QuickSight를 이용하여 데이터 분석 및 시각화를 할 수 있습니다.

본 블로그에서는 중첩 JSON 객체를 다루기 위해 어떻게 DataBrew를 구성하고 QuickSight로 시각화하는지 알아보겠습니다.

솔루션 개요

본 솔루션을 구현하기 위해 DataBrew 프로젝트와 데이터 중첩을 푸는 DataBrew 작업을 생성합니다. 그리고 DataBrew에서 중첩이 해제된 데이터를 프로파일링하고 QuickSight에서 데이터를 분석합니다. 아래 다이어그램은 본 솔루션의 아키텍처입니다.

사전 요구사항

시작하기에 앞서, 다음의 사전 요구 사항들이 준비되었는지 확인합니다.

데이터 준비

중첩 JSON 파일을 다루는 DataBrew의 기능을 설명하기 위해 공개 이용할 수 있는 고객 주문 상세 내용에 관한 JSON 데이터 세트 샘플을 사용하겠습니다.

데이터를 준비하기 위해 다음의 작업을 완료해야 합니다.

  1. AWS Management Console에 접속합니다.
  2. Amazon S3 콘솔에서 공개 이용할 수 있는 데이터 세트를 찾아봅니다.
  3. 첫 데이터 세트(customer_1.json)를 선택하고 다운로드하여 로컬 컴퓨터에 저장합니다.
  4. 나머지 2개의 JSON 파일도 저장합니다.
    아래 스크린 캡처처럼 로컬 컴퓨터에서 문서 편집기를 이용해 샘플 데이터를 확인합니다.
  5. S3 버킷을 만들고 입력을 위한 nestedjson 하위 디렉터리와 출력을 위한 outputjson 하위 디렉터리를 생성합니다.
  6. 업로드를 선택하여 다운로드받은 3개의 JSON 파일을 nestedjson 하위 디렉터리에 올립니다.

DataBrew 프로젝트 생성

S3 연결을 위해 아래의 단계를 완료합니다.

  1. DataBrew 콘솔의 내비게이션 창에서 프로젝트를 선택합니다.
  2. 프로젝트 생성을 선택합니다.
  3. 프로젝트 이름Glue-DataBew-NestedJSON-Blog를 입력합니다.
  4. 새 데이터 세트를 선택합니다.
  5. 데이터 세트 이름Glue-DataBew-NestedJSON-Dataset를 입력합니다.
  6. S3에서 소스 입력nestedjson 폴더의 경로를 입력합니다.
  7. 전체 폴더 선택을 선택해서 모든 파일을 선택합니다.
  8. 추가 구성에서 파일 형식으로 JSON 선택 후 JSON 문서를 선택합니다.
  9. 권한 섹션에서, 사용할 수 있는 역할이 이미 있는 경우 기존 IAM 역할 선택을 선택하거나 또는 새 IAM 역할 생성을 선택합니다. 본 블로그에서는 새로 생성하였습니다. (참고 : 새 IAM 역할 생성 시 혹시 오류가 발생한다면 다시 시도해봅니다.)
  10. 프로젝트 생성을 선택합니다.
  11. 프로젝트 준비가 끝나기를 기다립니다. 아래 스크린 캡처에서 볼 수 있는 것처럼 3개의 JSON 파일이 S3 버킷에 업로드되었기 때문에 3개의 고객 주문 상세 내용 데이터가 적재되었습니다. orders 열에 중첩이 있습니다. DataBrew를 이용하여 열이나 행을 평탄화하기 위한 중첩 변환작업이나 중첩 해제 변환작업을 할 수 있습니다.
  12. 메뉴 아이콘(점 3개)을 선택하고 Nest-unnest(중첩-중첩 해제)를 선택합니다.
  13. 중첩 처리 목적에 맞게 중첩 또는 중첩 해제를 선택할 수 있는데 여기서는 처음에 열로 중첩 해제를 선택해서 예제 JSON 파일의 평탄화를 시작합니다.적용을 선택합니다.
  14. (Orders 칼럼에서) 중첩 해제를 반복해가면서 (열로 중첩 해제 또는 행으로 중첩 해제) 실행할 때마다 아래와 같이 DataBrew 레시피가 생성됩니다. DataBrew는 평탄화를 위한 레시피 단계들을 만들고 데이터를 업데이트합니다.
  15. 작업 생성을 선택합니다.
  16. 작업 이름Glue-DataBew-NestedJSON-job으로 하고
  17. S3 위치outputjson의 경로로 지정합니다.
  18. 권한역할 이름은 사전에 생성 또는 앞 9단계에서 새로 생성한 IAM 역할을 선택합니다.
  19. 작업 생성 및 실행을 선택합니다.작업 페이지에서 해당 작업을 선택하면 작업 실행 기록, 작업 세부 정보데이터 계보를 볼 수 있습니다.

DataBrew를 이용한 프로파일링

S3 출력 버킷에 평탄화된 파일을 만들었으면 이제 DataBrew를 사용하여 평탄화된 데이터의 분석 및 프로파일링을 할 수 있습니다. 다음 단계를 완료하십시오.

  1. 데이터 세트 페이지에서 새 데이터 세트 연결을 선택합니다.
  2. 데이터 세트 이름을 Unneted-data라 입력하고, 앞서 outputjon 밑에 생성된 평탄화된 JSON 들을 선택하고 데이터 세트 생성을 선택합니다.
  3. 새로 추가된 데이터 소스를 선택하면 나타나는 아래 화면에서 데이터 프로파일 개요 탭을 선택하고 데이터 프로파일 실행을 선택합니다.
  4. 작업 페이지의, 작업 생성 메뉴에서 작업 이름을 지정하고 작업 출력 설정에서 프로파일 결과를 저장할 S3 경로를 정합니다.
  5. 작업 생성 및 실행을 선택합니다.
    작업을 완료하고 변경된 정보를 보여주는 데까지 약 2분이 걸립니다. 데이터 프로파일 개요열 통계 탭에서 데이터를 추가로 탐색할 수 있습니다.

QuickSight로 시각화하기

S3 출력 버킷에 DataBrew가 생성한 출력 파일이 만들어지면 QuickSight를 사용하여 JSON 데이터를 쿼리할 수 있습니다. QuickSight는 클라우드 네이티브 서비스로 확장이 쉽고 서버리스 형태로 제공되고 애플리케이션에 쉽게 임베드할 수 있는 ML 기반 비즈니스 인텔리전스(BI) 서비스입니다. QuickSight를 이용하면 ML을 이용해 통찰력을 제공하는 대화형 BI 대시보드를 쉽게 만들고 게시할 수 있습니다. QuickSight 대시보드는 다양한 기기를 통해 접근할 수 있으며 애플리케이션, 포털 및 웹사이트에 원활하게 임베드할 수 있습니다.

QuickSight 시작

콘솔 검색바에서 QuickSight를 찾아 선택합니다.

QuickSight 시작 페이지가 표시됩니다. QuickSight에 등록하지 않은 경우 등록 마법사를 통한 등록을 완료해야 합니다. 자세한 내용은 Amazon QuickSight 구독 가입하기를 참조하십시오.

Amazon S3 접근 권한 부여

Amazon S3 접근 권한을 부여하려면 다음의 절차를 따릅니다.

  1. QuickSight 콘솔에서 사용자 이름을 선택하고 QuickSight 관리를 선택하고 보안 및 권한을 선택합니다.
  2. AWS 서비스에 대한 QuickSight 액세스관리를 선택합니다.
  3. 체크박스가 선택돼있지 않으면 Amazon S3를 선택합니다.
  4. S3 버킷 선택을 선택합니다.
  5. QuickSight에서 접근할 버킷을 선택하고 저장합니다.
    혹시 이 과정에서 첫 번째 단계에서 리전이 변경되었다면 사용하고 싶은 리전으로 다시 변경합니다.

데이터 세트 생성

QuickSight가 구동되었고 이제 데이터 세트를 만들 수 있습니다. 다음의 절차를 따라 하십시오.

  1. 먼저 QuickSight 콘솔 좌측 내비게이션 창에서 데이터 세트를 선택합니다.
  2. 새 데이터 세트를 선택합니다. QuickSight는 여러 데이터 소스를 지원하는데, 전체 목록은 소스데이터 지원 목록을 확인하십시오.
  3. DataBrew에서 평탄화한 데이터를 소스로 사용하기 위해 S3 를 선택합니다. S3는 데이터 소스 이름과 매니페스트 파일이 필요합니다.
  4. 사용자 로컬컴퓨터에서 텍스트 편집기를 이용하여 아래와 같은 구조의 BlogGlueDataBrew.manifest 매니페스트 파일을 만듭니다 (파일 내부에 지정한 출력 버킷 이름은 환경에 맞게 적절히 수정해야 합니다).
    {
        "fileLocations": [
            {
                "URIPrefixes": [
                    "s3://<output bucket명>/outputjson/"
                ]
            }
        ],
        "globalUploadSettings": {
            "format": "CSV",
            "delimiter": ","
        }
    }

    매니페스트 파일은 DataBrew 프로젝트에서 생성한 폴더를 가리킵니다. 더 자세한 설명은 Amazon S3 매니페스트 파일 지원 형식을 참고하십시오.

  5. 업로드를 선택하여 매니페스트 파일을 찾아 선택합니다.
  6. 연결을 선택해서 데이터를 SPICE에 올립니다. SPICE는 QuickSight가 빠른 성능을 내기 위한 내장된 인메모리 데이터베이스입니다.
  7. 시각화를 선택합니다.
    이제 필드를 추가하면서 시각화할 수 있습니다. (아래 예는 피벗 테이블을 이용한 예 입니다. commitdate, c_name, c_mktsegment는 행, quantity는 값으로 지정합니다.)대시보드 작성에 대해 더 학습하려면 QuickSight Author Workshop을 확인하십시오.

자원 정리

테스트 후 요금이 발생하지 않도록 하려면 다음 조치가 필요합니다

  1. DataBrew 콘솔, 내비게이션 창에서 프로젝트를 선택합니다.
  2. 생성한 프로젝트를 선택하고 작업 메뉴에서 삭제를 선택합니다.
  3. 내비게이션 창에서 작업을 선택합니다.
  4. 생성한 작업을 찾아서 선택하고 작업에서 삭제를 선택합니다.
  5. 내비게이션 창에서 레시피를 선택합니다.
  6. 생성한 레시피를 선택하고 작업에서 삭제를 선택합니다.
  7. QuickSight 대시보드에서 애플리케이션 바 위의 username 을 선택하고 QuickSight 관리를 선택합니다.
  8. 계정 설정을 선택하고, 계정 삭제를 선택합니다.
  9. 계정 삭제 버튼을 클릭합니다.
  10. 확인을 입력하고 계정 삭제를 선택합니다.

결론

이 블로그에서는 중첩된 JSON 객체를 처리하기 위해 DataBrew 작업을 구성하는 단계와 데이터 시각화를 위해 QuickSight를 이용하는 과정을 안내하였습니다. Glue DataBrew를 이용하여 JSON 파일의 중첩을 해제하고 데이터를 프로파일링한 다음 QuickSight를 이용하여 추가 분석을 위한 대시보드 및 시각화를 생성하였습니다.

SeongHee Kang

SeongHee Kang

강성희 Partner SA 는 데이터 베이스 제품 엔지니어와 대용량 정보계 시스템 / 빅데이터 플랫폼 솔루션 엔지니어로 다양한 인더스트리에서 구축과 프리세일즈를 모두 경험하였으며 현재는 AWS Partner Core 팀에서 파트너사 엔지니어들의 Analytic 서비스 역량 강화를 위해 일하고 있습니다.