[Snowflake] Unstructured Data & File Functions

차지예·2026년 6월 11일

Snowflake

목록 보기
41/49
post-thumbnail

1️⃣ 비정형 데이터(Unstructured Data)란?

미리 정의된 구조/스키마가 없는 데이터

분류예시
Multi-mediaImage, Audio, Video
DocumentsPDF, Spreadsheet, Text

2️⃣ File Functions

Stage에 올린 비정형 파일에 접근하는 URL을 생성하는 함수들

비정형 파일 → PUT으로 STAGE에 적재 → File Function으로 URL 생성 → 파일 접근
PUT file://image.jpg @images_stage;
SELECT GET_PRESIGNED_URL(@images_stage, image.jpg);

🔥 3대 File Function (⭐⭐⭐)

함수URL 종류만료
BUILD_SCOPED_FILE_URLScoped URL24시간 후 만료
BUILD_STAGE_FILE_URLFile(Stage) URL만료 없음 (영구)
GET_PRESIGNED_URLPre-signed URL지정한 시간 후 만료

📍 공식 문서 추가: GET_PRESIGNED_URLBUILD_SCOPED_FILE_URLnon-deterministic,
BUILD_STAGE_FILE_URLdeterministic 함수


3️⃣ BUILD_SCOPED_FILE_URL

build_scoped_file_url( @<stage_name> , '<relative_file_path>' )

SELECT build_scoped_file_url(@images_stage, 'prod_z1c.jpg');

핵심 특징

  • Scoped URL: 인코딩되어 있고, 제한된 시간 동안만 접근 허용
  • URL 유효 시간: 24시간 (결과 캐시 만료까지)
  • query 또는 view에서 호출 / UDF·SP에 scoped URL 전달 가능

권한 (⭐)

호출 방식필요 권한
Query에서 직접 호출external stage → USAGE / internal stage → READ
UDF / SP / View에서 호출호출하는 role은 underlying stage 권한 불필요

직접 쿼리하면 stage 권한 필요, 객체(UDF/SP/View) 통해 호출하면 stage 권한 불필요

-- View로 감싸면 조회 role은 stage 권한 없이 접근 가능
CREATE VIEW PRODUCT_SCOPED_URL_VIEW AS
SELECT build_scoped_file_url(@images_stage, 'prod_z1c.jpg') AS scoped_file_url;

SELECT * FROM PRODUCT_SCOPED_URL_VIEW;

4️⃣ BUILD_STAGE_FILE_URL

build_stage_file_url( @<stage_name> , '<relative_file_path>' )

SELECT build_stage_file_url(@images_stage, 'prod_z1c.jpg');

핵심 특징

  • File URL은 만료되지 않음 (does not expire) → 영구 접근
  • query, UDF, SP에서 호출 가능
  • 출력 URL 형태: .../api/files/DB/SCHEMA/STAGE/파일명 (경로가 그대로 노출)

권한 (Scoped와 차이점! ⭐)

호출 방식이 query/UDF/SP/View 무엇이든 관계없이
항상 underlying stage 권한 필요
→ external stage: USAGE / internal stage: READ

Scoped는 "객체로 감싸면 권한 불필요"였지만,
Stage URL은 언제나 stage 권한 필요가 핵심 차이!


5️⃣ GET_PRESIGNED_URL

get_presigned_url( @<stage_name> , '<relative_file_path>' , [ <expiration_time> ] )

SELECT get_presigned_url(@images_stage, 'prod_z1c.jpg', 600);  -- 600초 후 만료

핵심 특징

  • Pre-signed URL: 별도 인증/토큰 없이 웹 브라우저로 바로 접근 가능
  • expiration_time(초) 지정 가능
    • 기본값: 3600초 (60분)
    • 최대값: 604800초 (7일) ※ AWS IAM role 사용 stage는 최대 3600초
  • 파일이 stage에 존재하지 않아도 URL 생성됨

권한 (BUILD_STAGE_FILE_URL과 동일 ⭐)

query/UDF/SP/View 무엇이든 항상 stage 권한 필요
external: USAGE / internal: READ

활용 패턴 (JSON 메타데이터 + 카탈로그)

-- 1. 메타데이터 테이블 생성
CREATE TABLE document_metadata (
  relative_path string, author string,
  published_on date, topics array
);

-- 2. JSON 메타데이터 COPY INTO
COPY INTO document_metadata
FROM (SELECT $1:relative_path, $1:author, $1:published_on::date, $1:topics
      FROM @documents_stage/document_metadata.json)
FILE_FORMAT = (type = json);

-- 3. presigned_url 포함 카탈로그 view
CREATE VIEW document_catalog AS (
  SELECT author, published_on,
         get_presigned_url(@documents_stage, relative_path) as presigned_url,
         topics
  FROM documents_table
);

3대 함수 최종 비교표 (⭐⭐⭐)

항목BUILD_SCOPEDBUILD_STAGEGET_PRESIGNED
만료24시간만료 없음(영구)지정 시간(기본3600s/최대7일)
객체로 감쌀 때 stage 권한불필요필요필요
직접 쿼리 stage 권한필요필요필요
브라우저 직접 접근REST API 필요REST API 필요가능
결정성non-deterministicdeterministicnon-deterministic

0개의 댓글