AWS 기술 블로그

Amazon Redshift 스트리밍 수집을 이용한 실시간 분석

Amazon Redshift는 빠르고 확장이 쉽고 안전한 완전 관리형 클라우드 데이터 웨어하우스로, 표준 SQL을 사용하여 데이터를 간단하고 비용 효율적으로 분석할 수 있는 서비스입니다. Amazon Redshift는 다른 클라우드 데이터 웨어하우스보다 더 나은 가격 대비 성능을 제공하고 있고 이미 수만 고객이 Amazon Redshift를 사용하여 하루에 엑사바이트 규모의 데이터를 처리하고 있으며 고성능 BI 보고서, 대시보드, 데이터 탐색 및 분석과 같은 분석 워크로드에 동력을 제공하고 있습니다.

본 블로그에서 소개할 Amazon Redshift 스트리밍 수집 기능은 Redshift가 Amazon Simple Storage Service(S3)에 데이터를 저장하지 않고 Amazon Kinesis Data Stream에서 직접 데이터를 수집할 수 있는 기능입니다.

본 블로그에서는 Kinesis Data Streams 을 생성하고, 스트리밍 데이터를 발생시켜 적재하고, 구체화된 뷰를 생성하고, 스트림을 쿼리하여 결과를 시각화하는 과정을 안내합니다. 또한 스트리밍 수집의 이점과 일반적인 사용 사례를 소개합니다.

스트리밍 수집의 필요성

그동안 많은 고객으로부터 배치 작업 스타일의 분석 과정을 낮은 지연 시간의 스트리밍 처리 방식으로 신속하게 처리할 수 있게 해달라는 요청이 있었습니다.

Amazon Redshift 스트리밍 수집이 등장하기 전까지는, Amazon Kinesis Stream의 데이터를 Amazon Redshift에 적재하기까지 몇 단계를 거쳐야 했습니다. 즉 Amazon Kinesis Data Firehose에 연결하여 스트림 데이터를 Amazon S3에 저장하고 이를 다시 Amazon Redshift로 적재해야 했기 때문에, Amazon Redshift를 이용한 분석작업을 시작하기까지 지연 시간이 있었습니다.

Amazon Redshift 스트리밍 수집의 이용 사례는, 지속해서 생성되고, 생성 후 짧은 시간 내에 처리되어야 하는 데이터 작업이 해당합니다. 데이터 소스의 범위는, IoT 장치부터 원격 측정 시스템까지, 그리고 유틸리티 서비스 사용이나 디바이스 위치정보 등에 이르기까지 다양합니다.

솔루션 개요

Amazon Redshift 스트리밍 수집을 사용하면 Amazon S3에 데이터를 내리고 클러스터에 적재할 때 발생하는 적재 지연 시간과 복잡성 없이 Kinesis Data Streams에 직접 연결할 수 있습니다. SQL을 사용하여 스트림 데이터에 연결하고 접근할 수 있으며 스트림을 기반으로 구체화된 뷰를 생성하므로 데이터 파이프라인이 단순해집니다. 구체화된 뷰는 ELT(Extract(추출), Load(적재) 및 Transform(변환)) 파이프라인의 일부로 SQL을 이용한 데이터 변환도 할 수 있습니다.

구체화된 뷰를 정의한 후 뷰 새로 고침으로 최신 스트림 데이터를 쿼리할 수 있습니다. 즉, 추가 비용 없이 SQL을 사용하여 스트리밍 데이터의 다운스트림 처리 및 변환을 수행하고, 실시간 분석을 위해 기존 BI 및 분석 도구를 사용할 수 있습니다.

Amazon Redshift 스트리밍 수집은 스트림 소비자 역할을 수행합니다. 구체화된 뷰는 스트림에서 꺼내진 데이터가 처음 도착하는 곳입니다. 구체화된 뷰를 새로 고치면(Refresh) Amazon Redshift 컴퓨팅 노드가 각 데이터 샤드를 컴퓨팅 슬라이스에 할당합니다. 각 슬라이스는 구체화된 뷰가 패리티(스트림 데이터의 끝)에 도달할 때까지 할당된 샤드의 데이터를 할당 받습니다. 구체화된 뷰의 첫 번째 새로 고침은 스트림의 TRIM_HORIZON (스트림으로 아직 소비되지 않은 영역을 가리킴)에서 데이터를 가져옵니다. 후속 새로 고침은 이전 새로 고침의 마지막 SEQUENCE_NUMBER (시퀀스 번호는 각 레코드의 공유 식별자)에서부터 스트림 데이터의 패리티에 도달할 때까지 데이터를 읽습니다. 다음 다이어그램은 이 워크플로를 설명합니다.

Amazon Redshift에서 스트리밍 수집 설정은 2단계 프로세스로 구성됩니다. 먼저 Kinesis Data Streams에 매핑할 외부 스키마를 생성한 다음 스트림에서 데이터를 가져오기 위한 구체화된 뷰를 생성합니다.

Kinesis 데이터 스트림 생성

먼저 스트리밍 데이터를 수신할 Kinesis 데이터 스트림을 만듭니다.

  1. Amazon Kinesis 콘솔에서 데이터 스트림을 선택합니다.
  2. 데이터 스트림 생성’을 선택합니다.
  3. 데이터 스트림 이름ev_stream_data를 입력합니다.
  4. 용량 모드는 ‘온디맨드’를 선택합니다.
  5. 데이터 스트림을 생성하는 데 필요한 나머지 구성을 제공합니다.

Kinesis Data Generator로 스트리밍 데이터 생성

Amazon Kinesis Data Generator(KDG) 유틸리티와 아래 템플릿에 명시된 규칙에 따라 JSON 형식의 데이터를 만들 수 있으며 템플릿은 다음과 같습니다.

{
   "_id" : "{{random.uuid}}",
   "clusterID": "{{random.number(
        {   "min":1,
            "max":50
        }
    )}}", 
    "connectionTime": "{{date.now("YYYY-MM-DD HH:mm:ss")}}",
    "kWhDelivered": "{{commerce.price}}",
    "stationID": "{{random.number(
        {   "min":1,
            "max":467
        }
    )}}",
      "spaceID": "{{random.word}}-{{random.number(
        {   "min":1,
            "max":20
        }
    )}}",
   "timezone": "America/Los_Angeles",
   "userID": "{{random.number(
        {   "min":1000,
            "max":500000
        }
    )}}"
}

아래 스크린샷은 Kinesis Data Generator 콘솔의 템플릿입니다.

참조 데이터 적재

앞 단계에서는 Kinesis Data Generator를 사용하여 만든 데이터를 스트림에 적재하는 방법을 보여드렸습니다. 이 섹션에서는 전기 자동차 충전소와 관련된 참조 데이터를 적재합니다. 적재 후 스트림 데이터와 조인할 것입니다.

Austin 시의 개방형 데이터 포털에서 Plug-In EVerywhere Charging Station Network 데이터를 다운로드합니다. 데이터 세트의 위도와 경도 값을 분할하고 테스트를 위한 임의의 siteid 값을 추가하여 이 테이블에 적재합니다.

CREATE TABLE ev_station
  (
     siteid                INTEGER,
     station_name          VARCHAR(100),
     address_1             VARCHAR(100),
     address_2             VARCHAR(100),
     city                  VARCHAR(100),
     state                 VARCHAR(100),
     postal_code           VARCHAR(100),
     no_of_ports           SMALLINT,
     pricing_policy        VARCHAR(100),
     usage_access          VARCHAR(100),
     category              VARCHAR(100),
     subcategory           VARCHAR(100),
     port_1_connector_type VARCHAR(100),
     voltage               VARCHAR(100),
     port_2_connector_type VARCHAR(100),
     latitude              DECIMAL(10,6),
     longitude             DECIMAL(10,6),
     pricing               VARCHAR(100),
     power_select          VARCHAR(100)
  ) DISTSTYLE ALL

구체화된 뷰 (Materialized View) 생성

SQL을 사용하여 데이터 스트림에 접근하고 바로 구체화된 뷰를 생성함으로써 데이터 파이프라인을 단순하게 만들 수 있습니다. 다음의 구현을 해보시기를 바랍니다.

  1. 외부 스키마를 만들어서 Kinesis Data Stream에서 Amazon Redshift Object로 매핑합니다.
    CREATE EXTERNAL SCHEMA evdata FROM KINESIS
    IAM_ROLE ‘arn:aws:iam::0123456789:role/redshift-streaming-role';
  2. AWS Identity and Access Management (IAM) 역할을 생성하고 스트리밍 수집 시작하기를 참고하여 정책을 설정합니다. 이제 구체화된 뷰를 생성하여 스트림 데이터를 사용할 수 있습니다. SUPER 데이터타입을 사용하여 페이로드를 JSON 형식 그대로 저장하거나 Amazon Redshift JSON 함수를 사용하여 JSON 데이터를 개별적인 열로 구문 분석하도록 선택할 수 있습니다. 스키마가 잘 정의되어 있으므로 본 블로그에서는 두 번째 방법을 사용합니다.
  3. 스트림의 UUID 값을 기준으로 데이터가 분산되고 approximatearrivaltimestamp 값에 따라 정렬이 되도록 구체화된 뷰를 생성합니다.
    CREATE MATERIALIZED VIEW ev_station_data_extract DISTKEY(5) sortkey(1) AS
        SELECT approximatearrivaltimestamp,
        partitionkey,
        shardid,
        sequencenumber,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'_id')::character(36) as ID,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'clusterID')::varchar(30) as clusterID,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'connectionTime')::varchar(20) as connectionTime,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'kWhDelivered')::DECIMAL(10,2) as kWhDelivered,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'stationID')::DECIMAL(10,2) as stationID,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'spaceID')::varchar(100) as spaceID,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'timezone')::varchar(30) as timezone,
        json_extract_path_text(from_varbyte(data, 'utf-8'),'userID')::varchar(30) as userID
        FROM evdata."ev_stream_data";
  4. 구체화된 뷰를 새로 고침 합니다.
    REFRESH MATERIALIZED VIEW ev_station_data_extract;

구체화된 뷰는 ‘프리뷰’ 기간에는 자동 새로 고침이 지원되지 않으므로 구체화된 뷰를 1분에 한 번씩 새로 고치기 위해서는 Amazon Redshift에서 쿼리를 예약해야 합니다. 자세한 방법은 Scheduling SQL queries on your Amazon Redshift data warehouse를 참조하십시오.

스트림에 쿼리하기

이제 충전소 사용 통계를 보기 위해 구체화된 뷰에 쿼리를 수행합니다.

SELECT to_timestamp(connectionTime, 'YYYY-MM-DD HH24:MI:SS') AS connectiontime
,SUM(kWhDelivered) AS Energy_Consumed
,COUNT(distinct userID) AS #Users
FROM ev_station_data_extract
GROUP BY to_timestamp(connectionTime, 'YYYY-MM-DD HH24:MI:SS')
ORDER BY 1 DESC;

쿼리 결과는 아래와 같은 형식으로 나옵니다.

다음으로 구체화된 뷰를 참조 데이터와 결합하여 지난 5분간 충전소 소비 데이터를 분석하고 충전소 범주별로 분류할 수 있습니다.

SELECT to_timestamp(connectionTime, 'YYYY-MM-DD HH24:MI:SS') AS connectiontime
,SUM(kWhDelivered) AS Energy_Consumed
,count(distinct userID) AS #Users
,st.category
FROM ev_station_data_extract ext
JOIN ev_station st
ON ext.stationID = st.siteid
WHERE approximatearrivaltimestamp > current_timestamp -interval '5 minutes'
GROUP BY to_timestamp(connectionTime, 'YYYY-MM-DD HH24:MI:SS'),st.category
ORDER BY 1 DESC, 2 DESC;

아래와 같이 결과를 볼 수 있습니다.

connectiontime energy_consumed #users category
2022-10-28 04:03:31+00 3312 7 Workplace
2022-10-28 04:03:31+00 855 1 Workplace
2022-10-28 04:03:31+00 643 1 Parking
2022-10-28 04:03:31+00 291 1 Multifamily Commercial
2022-10-28 04:03:30+00 1732 5 Workplace
2022-10-28 04:03:30+00 1243 2 Multifamily Commercial
2022-10-28 04:03:30+00 902 1 Parking
2022-10-28 04:03:30+00 823 1 Parking
2022-10-28 04:03:30+00 311 1 Healthcare
2022-10-28 04:03:28+00 1682 2 Multifamily Commercial
2022-10-28 04:03:28+00 1079 2 Parking
2022-10-28 04:03:28+00 690 3 Workplace
2022-10-28 04:03:28+00 640 1 Municipal
2022-10-28 04:03:28+00 557 1 Workplace
2022-10-28 04:03:28+00 163 1 Retail

시각화

Amazon QuickSight를 이용해서 간단하게 시각화를 할 수 있습니다. Quick start: Create an Amazon QuickSight analysis with a single visual using sample data를 참고해서 만듭니다. QuickSight에서 구체화된 뷰를 충전소 참조 데이터와 조인하여 데이터 세트를 만듭니다.

그런 다음 시간 경과에 따른 에너지 소비 및 연결된 사용자 수를 보여주는 대시보드를 만듭니다. 대시보드에는 카테고리별로 지도의 위치 목록도 표시됩니다.

스트리밍 수집의 혜택

이번 섹션에서는 스트리밍 수집의 혜택에 대해 알아보겠습니다.

저지연 고대역폭 성능

Amazon Redshift는 Kinesis Data Streams에서 초당 수 기가 바이트의 데이터를 처리할 수 있습니다. (처리량은 데이터 스트림의 샤드 수와 Amazon Redshift 클러스터 구성에 따라 다릅니다) 이를 통해 스트리밍 데이터를 사용할 때 짧은 지연 시간과 높은 대역폭을 경험할 수 있으므로 수 분이 아닌 수 초 만에 데이터에서 통찰력을 얻을 수 있습니다.

앞서 언급했듯이 Amazon Redshift에서 직접 수집 풀 방식을 사용할 때의 주요 장점은 짧은 지연 시간(초 단위)입니다. 이 방식은, 스트리밍 데이터를 사용하는 프로세스를 생성하고, Amazon S3에서 데이터를 내린 다음, COPY 명령을 실행하여 데이터를 Amazon Redshift로 적재하는 접근 방식과 대비됩니다. 이 접근 방식은 데이터 처리와 관련된 여러 단계를 거쳐야 하므로 수 분의 대기 시간이 발생합니다.

직접적인 구성

쉽게 시작할 수 있습니다. Amazon Redshift의 모든 설정 및 구성은 대부분의 클라우드 데이터 웨어하우스 사용자가 이미 익숙한 SQL을 사용합니다. 복잡한 파이프라인을 관리하지 않고도 수 초 만에 실시간 통찰력을 얻을 수 있습니다. Kinesis Data Streams이 포함된 Amazon Redshift는 완전 관리형이므로 인프라 관리 없이 스트리밍 애플리케이션을 실행할 수 있습니다.

향상된 생산성

새로운 기술이나 언어를 배울 필요 없이 Amazon Redshift 내에서 스트리밍 데이터와 기존의 친숙한 SQL을 사용하여 풍부한 분석을 수행할 수 있습니다. 다른 구체화된 뷰 또는 구체화된 뷰에 대한 뷰(View)를 생성하고 SQL을 작성하여 Amazon Redshift 내에서 대부분의 ELT 데이터 파이프라인 변환 작업을 수행할 수 있습니다.

스트리밍 수집의 사용 사례

스트리밍 데이터에 대한 실시간 분석으로 다양한 산업 분야 애플리케이션을 만들 수 있습니다. 다음은 많은 애플리케이션 사용 사례 중 일부입니다.

  1. 게임 경험 향상 – 게이머의 실시간 데이터를 분석하여 인 앱 구매율, 플레이어 잔존율 및 게임 경험 최적화에 집중할 수 있습니다.
  2. 온라인 광고에 대한 클릭스트림 사용자 데이터 분석 – 평균적인 고객은 단일 세션에서 수십 개의 웹사이트를 방문하지만, 마케터는 일반적으로 자신의 웹사이트만 분석합니다. 웨어하우스로 수집된 승인된 클릭스트림 데이터를 분석하여 고객의 이동 경로와 행동을 평가하고 적시에 고객에게 광고를 타겟팅할 수 있습니다.
  3. 스트림화된 POS 데이터에 대한 실시간 소매 분석 – 실시간 분석, 보고서 및 시각화를 위해 모든 글로벌 POS(판매 시점 데이터) 소매 판매 거래 데이터를 바로 사용하여 시각화할 수 있습니다.
  4. 실시간 애플리케이션 통찰력 제공 – 애플리케이션 로그 파일 및 네트워크 로그에서 스트리밍 데이터에 접근하고 분석하는 기능을 통해 개발자와 엔지니어는 실시간으로 문제를 해결하고 더 나은 제품과 예방 조치를 위한 경고 시스템을 제공할 수 있습니다.
  5. IoT 데이터 실시간 분석 – Amazon Redshift 스트리밍 수집기능은 위치 및 센서 데이터, 애플리케이션 모니터링, 사기 탐지, 라이브 리더보드와 같은 속성이나 디바이스 상태를 다루는 실시간 애플리케이션에 사용할 수 있습니다. Kinesis Data Streams를 사용하여 스트리밍 데이터를 수집하고, Amazon Kinesis Data Analytics를 사용하여 처리하고, Kinesis Data Streams를 사용하여 다양한 데이터 저장소나 애플리케이션에 결과를 전송할 수 있습니다.

결론

이 블로그는 Amazon Redshift 스트리밍 수집을 사용하여 Kinesis Data Streams에서 데이터를 수집하기 위해 Amazon Redshift 구체화된 뷰를 생성하는 방법을 설명하였습니다. 이 기능을 사용하면 데이터 파이프라인을 쉽게 구축하고 유지 관리하여 짧은 대기 시간과 높은 처리량으로 스트리밍 데이터를 수집하고 분석할 수 있습니다.

이제 Amazon Redshift를 사용할 수 있는 모든 AWS 리전에서 스트리밍 수집 ‘미리 보기’를 사용할 수 있습니다. Amazon Redshift 스트리밍 수집을 시작하려면 Amazon Redshift 클러스터를 프로비저닝하고 클러스터에서 버전 1.0.35480 이상을 실행 중인지 확인하십시오.

자세한 내용은 스트리밍 수집(미리 보기)을 참조하고 YouTube에서 Real-time Analytics with Amazon Redshift Streaming Ingestion을 확인하십시오.

원문 : https://aws.amazon.com/ko/blogs/big-data/real-time-analytics-with-amazon-redshift-streaming-ingestion/

SeongHee Kang

SeongHee Kang

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