비정형 데이터 타입

비정형 데이터 타입 (Unstructured data types)

Snowflake가 지원하는 비정형 데이터(unstructured data) 처리를 다루는 문서예요. 비정형 데이터는 스키마가 없는 데이터(문서, 이미지, 오디오 등)를 말하며, Snowflake는 이를 위해 FILE 데이터 타입을 제공해요. FILE 값은 내부 또는 외부 스테이지에 저장된 파일에 대한 참조를 나타내며, 관련 파일 함수들을 함께 확인할 수 있어요.

출처: Snowflake SQL Reference

본문

Snowflake는 세 가지 종류의 데이터를 지원해요.

  • 정형 데이터(Structured data) (예: CSV 파일)는 엄격한 테이블 스키마를 따르며 SQL 테이블에 쉽게 로딩될 수 있어요.
  • 반정형 데이터(Semi-structured data) (예: JSON 또는 XML 파일)는 유연한 스키마를 가져요. Snowflake는 특수 함수를 사용해 반정형 데이터의 필드에 접근할 수 있지만, 정형 데이터만큼 쉽게 쿼리되지는 않아요. 반정형 데이터는 VARIANT 열을 사용해 SQL 테이블에 로딩될 수 있어요.
  • 비정형 데이터(Unstructured data) (예: 문서, 이미지, 오디오 파일)는 고유한 스키마가 없어요. 비정형 데이터는 여전히 내부 구조를 가질 수 있지만(예: PNG 이미지 파일은 문서화된 형식을 따라야 함), 그런 기술적 세부 사항은 파일의 정보와 일반적으로 관련이 없어요.

Snowflake는 AI COMPLETE 함수 같은 비정형 파일의 데이터에 접근하고 처리하는 방법을 제공해요.

Snowflake에서 비정형 데이터를 사용하려면 먼저 내부 또는 외부 스테이지에 저장되어야 해요. 비정형 데이터를 처리하는 Snowflake 함수는 거기서 그 데이터를 읽어요. 함수에 따라, 파일을 다음 중 하나 이상의 방법으로 지정해요.

FILE 데이터 타입

Snowflake는 비정형 데이터를 위한 FILE 데이터 타입을 제공해요. FILE 값은 내부 또는 외부 스테이지에 저장된 파일을 나타내지만, 파일의 데이터를 저장하지는 않고 참조만 저장해요. 다음 메타데이터를 포함해요.

  • STAGE: 파일이 있는 스테이지의 이름.
  • RELATIVE_PATH: 스테이지에서 파일의 상대 경로.
  • STAGE_FILE_URL: 스테이지 파일 URL.
  • SCOPED_FILE_URL: 스코프된 파일 URL.
  • CONTENT_TYPE: 파일의 MIME 타입.
  • SIZE: 파일의 바이트 크기.
  • ETAG: 파일 내용의 고유 해시.
  • LAST_MODIFIED: 파일이 마지막으로 수정된 타임스탬프.

이 필드들이 모두 필요한 것은 아니에요. FILE은 CONTENT_TYPE, SIZE, ETAG, LAST_MODIFIED 필드와 함께, STAGE + RELATIVE_PATH, STAGE_FILE_URL, 또는 SCOPED_FILE_URL로 지정되는 파일 위치를 가져야 해요.

스코프된 파일 URL, 스테이지와 경로, 또는 메타데이터 객체를 TO_FILE 또는 TRY_TO_FILE 함수에 전달해 파일을 만들 수 있어요.

FILE 함수

하위 카테고리 함수
생성자 (Constructors) TO_FILE, TRY_TO_FILE
접근자 (Accessors) FL_GET_CONTENT_TYPE, FL_GET_ETAG, FL_GET_FILE_TYPE, FL_GET_LAST_MODIFIED, FL_GET_RELATIVE_PATH, FL_GET_SCOPED_FILE_URL, FL_GET_SIZE, FL_GET_STAGE, FL_GET_STAGE_FILE_URL
유틸리티 함수 (Utility Functions) FL_IS_AUDIO, FL_IS_COMPRESSED, FL_IS_DOCUMENT, FL_IS_IMAGE, FL_IS_VIDEO

사용 참고 사항 (Usage notes)

  • FILE 값은 기본 스테이지된 파일과 불일치할 수 있어요. 기본 파일을 수정하거나 삭제해도 FILE 값은 업데이트되지 않아요. 반대로, 테이블에서 FILE 값이 삭제되어도 기본 파일은 영향을 받지 않아요.
  • 기본 파일에 대한 권한은 FILE을 만들 때 지정된 URL 유형에 의해 결정돼요. 스테이지 파일 URL과 스테이지/경로 조합은 관련 스테이지에 접근 권한이 있는 호출자에게 영구 권한을 부여해요. 스코프된 URL은 기본 파일에 대한 24시간 동안의 임시 사용자 기반 접근을 부여해요.

SQL을 통해 Snowflake에서 비정형 데이터 사용하기

FILE 열이 있는 테이블을 만들어요.

CREATE TABLE images_table(img FILE);

이미지 파일이 들어 있는 외부 스테이지 my_images에서 테이블로 데이터를 로딩해요. my_images는 내부 또는 외부 스테이지일 수 있어요.

참고: 이 과정은 스테이지의 디렉토리 테이블(directory table) 지원을 요구해요. 필요하다면 아래 SQL을 사용해 활성화하세요.

ALTER STAGE my_images DIRECTORY=(ENABLE=true);

Snowflake 테이블로 데이터를 로딩해요.

INSERT INTO images_table
    SELECT TO_FILE(file_url) FROM DIRECTORY(@my_images);

images_table에 대해 SQL 문을 실행해요. 예를 들어 다음 쿼리는 2021년 1월 1일과 2023년 1월 1일 사이에 마지막으로 수정된 테이블의 각 파일의 상대 경로를 반환해요.

SELECT FL_GET_RELATIVE_PATH(f)
    FROM images_table
    WHERE FL_GET_LAST_MODIFIED(f) BETWEEN '2021-01-01' and '2023-01-01';

알려진 제한 사항 (Known limitations)

FILE 데이터 타입은 현재 다음에서 사용할 수 없어요.

  • CLUSTER BY, GROUP BY, ORDER BY 절
  • 하이브리드 테이블(Hybrid tables), Iceberg 테이블, 외부 테이블
  • SnowScript
  • 보안 뷰(Secured views)
  • 바인드(Binds)
  • 검색 최적화(Search optimization)
  • Snowpark Python을 제외한 클라이언트와 커넥터

더 알아보기 (Learn more)