Chapter 3. 웨어하우스 스케일업(Lab)

Snowflake SE·2024년 12월 26일
0

Zero to Snowflake

목록 보기
6/21

0. 실습 시나리오

웨어하우스의 크기를 변경하면서 raw_pos 스키마의 fact 테이블을 추가로 적재합니다. 웨어하우스 크기에 따라 적재 성능의 변화를 확인해 봅니다.
시나리오

1. 테이블 생성

  1. Projects > Worksheets 에서 +를 클릭하여 새 SQL Worksheet를 만듭니다
  2. 타임스탬프로 만들어진 worksheet 에서 ...을 클릭하여 RENAME합니다
    • 이름 변경 : Lab3. Scale-Up
  3. Snowsight UI또는 다음과 같은 SQL로 worksheet 컨텍스트를 설정합니다
    // 컨텍스트 설정
    USE ROLE sysadmin ;
    USE WAREHOUSE demo_build_wh ;
    USE DATABASE tasty_db ;
    USE SCHEMA raw_pos ;
  4. 테이블을 생성합니다
    // order_header 테이블 생성
    CREATE OR REPLACE TABLE order_header
    (
        order_id NUMBER(38,0),
        truck_id NUMBER(38,0),
        location_id FLOAT,
        customer_id NUMBER(38,0),
        discount_id VARCHAR(16777216),
        shift_id NUMBER(38,0),
        shift_start_time TIME(9),
        shift_end_time TIME(9),
        order_channel VARCHAR(16777216),
        order_ts TIMESTAMP_NTZ(9),
        served_ts VARCHAR(16777216),
        order_currency VARCHAR(3),
        order_amount NUMBER(38,4),
        order_tax_amount VARCHAR(16777216),
        order_discount_amount VARCHAR(16777216),
        order_total NUMBER(38,4)
    );
    // order_detail 테이블 생성
    CREATE OR REPLACE TABLE order_detail 
    (
        order_detail_id NUMBER(38,0),
        order_id NUMBER(38,0),
        menu_item_id NUMBER(38,0),
        discount_id VARCHAR(16777216),
        line_number NUMBER(38,0),
        quantity NUMBER(5,0),
        unit_price NUMBER(38,4),
        price NUMBER(38,4),
        order_item_discount_amount VARCHAR(16777216)
    );
  5. Database 탭에서 생성된 테이블 목록을 확인합니다
    • Database : TASTY_DB
    • Schema : RAW_POS
    • Table : ORDER_HEADER, ORDER_DETAIL
      테이블생성

2. 웨어하우스 크기 변경

  1. 현재 웨어하우스 조회

    // 웨어하우스 조회
    SHOW WAREHOUSES LIKE 'demo%' ;
  2. 웨어하우스 크기 변경 (XSMALL -> SMALL)

    // 웨어하우스 크기 변경
    ALTER WAREHOUSE demo_build_wh 
      SET warehouse_size = 'small' ;
    • 위에서 실행한 SHOW WAREHOUSES 구문을 다시 실행해서 결과를 확인합니다

3. 데이터 적재

  1. 데이터 적재 전에 데이터 검증만 수행할 수 있습니다

    // order_header 데이터 검증
    COPY INTO order_header
    FROM @public.s3load/raw_pos/order_header/
         file_format = (format_name = 'public.csv_ff')
         validation_mode=return_all_errors
    ;
    • 아무런 결과가 출력되지 않는 것은 데이터 오류가 없다는 의미입니다
  2. 이제는 데이터를 적재하고 수행 시간을 확인합니다

    // order_header 데이터 적재
    COPY INTO order_header
    FROM @public.s3load/raw_pos/order_header/
         file_format = (format_name = 'public.csv_ff')
    ;
    • 각 데이터 파일별로 적재된 데이터 행이 출력됩니다
    • rows_loaded 컬럼값을 드래그하여 모두 선택하면 오른쪽에 전체합과 평균값이 계산됩니다
      적재결과

4. 웨어하우스 크기 변경 후 재적재

  1. 웨어하우스 크기 변경 (SMALL -> MEDIUM)

    // 웨어하우스 크기 변경
    ALTER WAREHOUSE demo_build_wh 
      SET warehouse_size = 'medium' ;
    
    // 웨어하우스 조회
    SHOW WAREHOUSES LIKE 'demo%' ;
  2. 테이블 truncate

    // order_header 테이블 truncate
    TRUNCATE TABLE order_header ;
  3. 데이터 적재

    // order_header 데이터 적재
    COPY INTO order_header
    FROM @public.s3load/raw_pos/order_header/
         file_format = (format_name = 'public.csv_ff')
    ;

5. 파일 및 테이블 크기 확인

  1. LIST 구문을 이용하여 S3의 파일 목록을 확인합니다

    // 데이터 파일 목록 조회
    LIST @public.s3load/raw_pos/order_header/ ;
  2. 위의 실행 결과를 이용하여 파일의 크기를 계산합니다

    // 데이터 파일 크기 계산
    SELECT floor(sum($2) / power(1024, 3), 1) as total_compressed_storage_gb,
           floor(avg($2) / power(1024, 2), 1) as avg_file_size_mb,
           count(*) as num_files
      FROM table(result_scan(last_query_id()))
    ;

    쿼리 결과는 result cache에 저장되고 이를 활용하여 웨어하우스의 컴퓨팅 필요없이 다시 조회할 수 있습니다. 즉, 위의 쿼리가 실행될 때는 suspend된 demo_build_wh는 다시 활성화되지 않습니다

  3. 테이블의 상태 확인

    // order_header 테이블 조회
    SHOW TABLES LIKE 'order%'; 

6. 나머지 테이블 적재

앞의 실습 과정과 같이 웨어하우스를 한 단계 더 scale-up하고 데이터 적재를 수행합니다

  1. 웨어하우스 크기 변경 (MEDIUM -> LARGE)

    // 웨어하우스 크기 변경
    ALTER WAREHOUSE demo_build_wh 
      SET warehouse_size = 'large' ;
    
    // 웨어하우스 조회
    SHOW WAREHOUSES LIKE 'demo%' ;
  2. 데이터 적재

    // order_detail 데이터 적재
    COPY INTO order_detail
    FROM @public.s3load/raw_pos/order_detail/
         file_format = (format_name = 'public.csv_ff')
    ;
  3. 테이블의 상태 확인

    // order_header 테이블 조회
    SHOW TABLES LIKE 'order%'; 
  4. 웨어하우스 크기에 따라 데이터 적재 속도의 변화를 확인합니다

    • Monitoring > Query History
    • 상단의 Filters를 클릭하여 다음 필터 조건을 추가합니다
      • SQL Text : copy into
      • Warehouse : DEMO_BUILD_WH
      • Duration : 5 Seconds
        Apply Filters를 클릭하여 필터 조건을 적용합니다
    • 우측 상단의 Columns를 열어 WAREHOUSE_SIZEROWS를 추가로 선택합니다
      적재결과
profile
Snowflake Korea SE

0개의 댓글