본문 바로가기
카테고리 없음

[Snowflake] Snowflake SnowPro Core 시험 Cheat Sheet 5 (데이터 변환)

by JustJunsu 2024. 10. 29.
반응형

5. 데이터 변환

5.1 표준 데이터로 작업하는 방법에 대해 설명하기

Snowflake에서 표준 데이터는 정형화된 테이블 형태의 데이터를 의미하며, 다양한 내장 함수와 명령어를 통해 이러한 데이터를 변환하고 분석할 수 있습니다. Snowflake는 특히 대규모 데이터셋을 효과적으로 처리할 수 있는 기능을 제공하여 성능을 높이고 데이터 관리에 효율성을 더합니다.

1) 추정 함수 (Approximation Functions)

 

  • 설명: 추정 함수는 데이터 집합에 대해 근사 계산을 수행하여 성능을 최적화하는 기능을 제공합니다. 큰 데이터 집합에서는 정확한 결과를 계산하는 데 많은 리소스와 시간이 소요될 수 있습니다. Snowflake의 추정 함수는 이를 효율적으로 처리하기 위해 근사값을 계산합니다. 성능이 중요한 상황에서는 정확도보다 속도를 우선하여 빠른 결과를 제공할 수 있습니다.
  • 예제 함수:
    • APPROX_COUNT_DISTINCT: 데이터 집합 내 고유 값 개수를 근사 계산합니다.

예제:

SELECT APPROX_COUNT_DISTINCT(column_name) FROM my_table;

 

이 함수는 COUNT(DISTINCT column_name)보다 빠르게 결과를 반환할 수 있으나, 정확도에서 약간의 차이가 있을 수 있습니다.

 

2) Sampling

샘플링은 데이터 분석을 위한 데이터 집합을 추출할 때 전체 데이터에서 일부만 선택하여 분석하는 방법으로, 대규모 데이터셋의 경우 특히 유용합니다. Snowflake는 SAMPLE 및 TABLESAMPLE 명령어를 사용하여 다양한 샘플링 방법을 제공합니다.

  • SAMPLE 명령어: 테이블에서 일정 비율의 데이터를 무작위로 선택하여 가져옵니다. 사용자가 지정한 비율에 따라 데이터를 샘플링합니다.
SELECT * FROM my_table SAMPLE (10);  -- 데이터의 약 10% 샘플링

 

  • TABLESAMPLE 명령어: SQL 표준을 따르는 샘플링 방식으로, 일정 비율 또는 개수를 지정하여 데이터를 선택합니다. 일반적으로 다른 데이터베이스에서도 사용하는 표준화된 방식입니다.
SELECT * FROM my_table TABLESAMPLE (10);  -- 10% 샘플링
  • Sampling 방법:
    • Fraction-based: 데이터의 일정 비율을 샘플링합니다. 예를 들어 SAMPLE (0.1)은 데이터의 약 10%를 무작위로 선택합니다.
    • Fixed-size: 샘플링할 데이터의 개수를 고정하여 지정할 수 있습니다. 예를 들어 SAMPLE (10 ROWS)는 데이터의 일부에서 10개의 행을 선택합니다. 이는 데이터를 일정 개수로 제한하여 더 작은 샘플로 작업해야 할 때 유용합니다.

3) 지원되는 함수 유형

Snowflake는 다양한 유형의 함수를 제공하여 데이터 처리를 효율적으로 수행할 수 있도록 합니다. 각 함수 유형은 고유의 특성을 가지며, 데이터 변환, 분석, 외부 연동 등에 활용됩니다.

  • 시스템 함수 (System Functions): Snowflake가 제공하는 기본적인 시스템 관련 함수로, 현재 시간과 같은 시스템 정보를 반환하는 CURRENT_TIMESTAMP와 같은 함수가 포함됩니다.
  • 테이블 함수 (Table Functions): 테이블 형식으로 데이터를 반환하는 함수로, 결과를 쿼리의 일부분으로 사용할 수 있습니다. 예를 들어, SPLIT_TO_TABLE 함수는 텍스트 데이터를 분할하여 각 분할된 값을 테이블 형식으로 반환할 수 있습니다.
SELECT * FROM TABLE(SPLIT_TO_TABLE('A,B,C', ',')) AS T(column1);

 

  • 외부 함수 (External Functions): Snowflake 외부에서 실행되는 함수로, AWS Lambda와 같은 외부 서비스와 연동하여 복잡한 계산이나 데이터를 호출할 수 있습니다. 외부 함수를 사용하면 Snowflake가 직접 수행하지 않는 복잡한 연산을 API를 통해 처리하고 결과를 Snowflake로 가져올 수 있습니다.
  • 사용자 정의 함수 (User-Defined Function, UDF): 사용자가 특정 데이터 처리 로직을 SQL 또는 JavaScript로 작성하여 재사용할 수 있는 함수입니다. 복잡한 계산을 캡슐화하여 코드 중복을 줄이고 가독성을 높입니다.

 

CREATE OR REPLACE FUNCTION my_udf(x INT)
RETURNS INT
LANGUAGE SQL
AS
$$
  x * 2
$$;

4) 저장 프로시저(Stored Procedure)

 

  • 설명: 저장 프로시저는 데이터베이스 내에서 복잡한 데이터 처리 로직을 절차적으로 작성하고, 여러 번 재사용할 수 있는 프로시저입니다. 조건문과 반복문을 사용해 다단계 데이터 변환 작업을 자동화하고, 필요할 때마다 호출할 수 있습니다.
  • 예제:
    • 아래 예제에서는 my_procedure라는 저장 프로시저를 생성하고 실행하는 방법을 보여줍니다. 이 프로시저는 간단히 "Hello, Snowflake!" 문자열을 반환합니다.
CREATE OR REPLACE PROCEDURE my_procedure()
RETURNS STRING
LANGUAGE SQL
AS 
$$
BEGIN
  RETURN 'Hello, Snowflake!';
END;
$$;
CALL my_procedure();

 

 

5) 스트림

 

  • 설명: 스트림은 테이블에서 발생한 데이터 변경 사항(추가, 삭제, 수정)을 추적하여 CDC(변경 데이터 캡처) 작업을 수행할 수 있도록 합니다. 이를 통해 데이터 변경 사항을 기반으로 증분 데이터를 추출하고 필요한 작업을 수행할 수 있습니다.
CREATE STREAM my_stream ON TABLE my_table;

 

 

스트림을 설정하면, my_table에서 데이터가 변경될 때마다 해당 변경 사항이 my_stream을 통해 기록됩니다. 이를 활용해 특정 시점 이후의 데이터 변경 사항을 추적할 수 있습니다.

6) 태스크

설명: 태스크는 주기적으로 SQL 명령어를 자동 실행하도록 설정할 수 있는 기능으로, 정해진 일정에 따라 데이터 변환, 분석, 업데이트 작업을 자동화합니다. 지정한 시간 간격이나 특정 이벤트에 따라 트리거될 수 있습니다.

사용 예제:

  • 아래 예제에서는 1시간마다 my_table의 데이터를 my_table_copy로 복사하는 작업을 수행하도록 태스크를 설정합니다.
CREATE TASK my_task
WAREHOUSE = my_warehouse
SCHEDULE = '1 hour'
AS
INSERT INTO my_table_copy SELECT * FROM my_table;

 

태스크가 생성되면 Snowflake가 이를 예약하여 자동으로 실행하며, 이를 통해 일정한 데이터 업데이트나 변환 작업을 지속적으로 수행할 수 있습니다.

5.2 반정형 데이터로 작업하는 방법에 대해 설명하기

Snowflake는 JSON, Avro, Parquet와 같은 반정형 데이터를 효율적으로 처리할 수 있는 다양한 기능을 제공하며, 특히 VARIANT 데이터 유형을 통해 이러한 데이터를 저장하고 쿼리할 수 있습니다. 반정형 데이터는 구조가 유연하고 중첩된 구조를 가지며, Snowflake의 다양한 함수와 명령어로 조작할 수 있습니다.

1) 지원되는 데이터 형식, 데이터 유형 및 크기

Snowflake는 여러 유형의 반정형 데이터를 지원하여 다양한 형태의 비정형 데이터를 저장하고 처리할 수 있습니다.

  • 지원되는 데이터 형식:
    • JSON: 웹 애플리케이션과 시스템 간 데이터 전송에 일반적으로 사용됩니다.
    • Avro: 주로 Hadoop 및 Kafka와 같은 빅데이터 플랫폼에서 사용되며, 스키마를 포함하는 바이너리 데이터 형식입니다.
    • Parquet: 열 형식의 저장소로, 대규모 분석에 최적화된 형식입니다.
    • ORC: Parquet과 유사하게 열 형식의 데이터 저장 방식으로, Hadoop 에코시스템에서 자주 사용됩니다.
  • 데이터 유형:
    • VARIANT: 반정형 데이터를 저장하는 주요 유형으로, JSON, Avro, Parquet 데이터를 저장할 수 있습니다.
    • OBJECT: 키-값 쌍을 저장하며, JSON 객체와 유사합니다.
    • ARRAY: 배열 형식의 데이터를 저장하며, JSON 배열과 유사합니다.
  • 데이터 크기:
    • Snowflake의 VARIANT 컬럼에는 최대 16MB 크기의 데이터를 저장할 수 있습니다. 데이터가 이 크기를 초과하면 오류가 발생하므로 대용량 반정형 데이터를 저장할 때는 데이터 크기를 고려해야 합니다.

2) VARIANT 컬럼

설명: VARIANT는 Snowflake에서 반정형 데이터를 저장하기 위한 컬럼 유형으로, JSON 및 기타 반정형 데이터 형식의 데이터 저장에 최적화되어 있습니다. Snowflake는 반정형 데이터를 원래 구조 그대로 저장할 수 있고, 쿼리를 통해 데이터를 평면화하여 읽어올 수 있습니다.

CREATE TABLE my_table (data VARIANT);

 

위 예제에서는 data 컬럼을 VARIANT 타입으로 정의하여 JSON 또는 반정형 데이터를 저장할 수 있습니다.

3) 중첩 구조 평면화

반정형 데이터는 중첩된 구조를 가지는 경우가 많으며, 이를 분석하려면 데이터를 평면화해야 할 때가 많습니다. Snowflake에서는 FLATTEN 명령어를 사용하여 중첩된 데이터를 평면화할 수 있습니다.

  • FLATTEN 명령어:
    • 중첩된 JSON 객체나 배열을 평면화하여 행 단위로 변환하는 명령어입니다.
    • FLATTEN을 통해 데이터의 특정 배열이나 중첩된 객체의 값을 추출하여 테이블 형식으로 변환할 수 있습니다.
    • 아래 쿼리는 my_table의 data 컬럼에 저장된 JSON 데이터의 중첩 배열을 평면화하여 테이블 형태로 변환합니다.
SELECT * 
FROM my_table, LATERAL FLATTEN(input => my_table.data);
  • LATERAL FLATTEN 명령어:
    • LATERAL 조인과 함께 FLATTEN을 사용하여 중첩된 데이터에서 배열과 객체를 평면화할 수 있습니다.
    • LATERAL FLATTEN은 쿼리의 나머지 부분과 동일한 레벨에서 평면화된 데이터를 반환하여, 여러 중첩된 배열이나 객체의 값을 조인하고 분석하는 데 유용합니다.

4) 반정형 데이터 함수

반정형 데이터 함수는 JSON 객체나 배열과 같은 데이터 구조를 다루고, 값을 추출하며 데이터 유형을 검사하는 데 유용합니다. Snowflake는 여러 내장 함수를 제공하여 이러한 작업을 간편하게 수행할 수 있습니다.

ARRAY 및 OBJECT 생성 및 조작:

  • Snowflake에서는 ARRAY와 OBJECT 함수를 사용해 반정형 데이터 내에서 배열과 객체를 생성하거나 조작할 수 있습니다.
SELECT ARRAY_AGG(column) FROM my_table;

 

 

위 예제에서는 column의 모든 값을 배열 형태로 변환하여 반환합니다.

  • 값 추출:
    • : 연산자를 사용하여 JSON 객체 내 특정 키의 값을 추출할 수 있습니다. 이 기능을 통해 JSON 데이터를 SQL 쿼리에서 편리하게 조작할 수 있습니다.

 

SELECT data:key FROM my_table;

 

위 예제는 data 컬럼에서 특정 키의 값을 추출하여 반환합니다.

 

형식 조건자:

  • Snowflake는 IS_ARRAY, IS_OBJECT 등 함수로 데이터의 형식을 검사하여 조건으로 활용할 수 있습니다. 이를 통해 데이터 유형에 따른 처리가 가능해지며, 반정형 데이터를 분석하고 변환하는 데 매우 유용합니다.
SELECT 
  CASE 
    WHEN IS_ARRAY(data) THEN 'Array'
    WHEN IS_OBJECT(data) THEN 'Object'
    ELSE 'Other'
  END AS data_type
FROM my_table;

 

위 예제는 data 컬럼이 배열인지 객체인지 확인하여 해당 형식을 반환합니다.

5.3 비정형 데이터로 작업하는 방법에 대해 설명하기

비정형 데이터는 Snowflake에서 디렉터리 테이블과 파일 함수를 통해 관리할 수 있으며, 일반적으로 이미지, 오디오, 비디오와 같은 파일 형식을 포함합니다.

1) 디렉터리 테이블의 정의 및 사용

 

  • 설명: 디렉터리 테이블은 비정형 데이터를 Snowflake 내에서 관리하기 위한 테이블 유형으로, 외부 파일과 연계하여 파일 메타데이터를 관리합니다.
  • 사용 상황: 이미지 파일, 문서 파일 등을 관리할 때 비정형 데이터를 처리하기 위해 디렉터리 테이블을 활용할 수 있습니다.

 

2) SQL 파일 함수

SQL 파일 함수는 Snowflake 내에서 파일을 조작하거나 불러오는 기능을 제공합니다.

  • 파일 액세스를 가능하게 하는 URL의 유형: Snowflake는 파일 액세스를 위해 Amazon S3, Google Cloud Storage, Microsoft Azure Blob Storage와 같은 외부 스토리지와 연동할 수 있습니다.
GET @my_stage/file.png file://local_directory/;

3) 데이터 분석용 User-Defined Function (UDF)의 목적에 대해 간략히 설명하기

비정형 데이터 분석을 위해 사용자 정의 함수(UDF)를 작성할 수 있으며, 이를 통해 특정 비정형 데이터의 특징을 추출하거나 전처리를 수행할 수 있습니다.

  • 설명: 데이터 분석용 UDF는 비정형 데이터의 특정 속성이나 패턴을 분석하는 데 사용됩니다.
CREATE FUNCTION my_udf(file VARIANT)
RETURNS STRING
LANGUAGE JAVASCRIPT
AS $$
  return "Processed Data";
$$;

Reference

https://docs.snowflake.com/ko/guides

 

가이드 - Snowflake 설명서

협업 다른 Snowflake 사용자와 데이터와 애플리케이션을 공유합니다. Snowflake Marketplace에서 데이터 제품 목록을 검색 및 게시하거나, 데이터 제품을 비공개로 공유하거나, 직접 공유를 사용하여 동

docs.snowflake.com

 

반응형