CREATE PIPE

Snowpipe 가 수집 큐에서 테이블로 데이터를 로딩하는 데 사용하는 COPY INTO <테이블> 문을 정의하기 위해 시스템에 새 파이프를 만듭니다.

참고 항목:

ALTER PIPE, DROP PIPE , SHOW PIPES , DESCRIBE PIPE

구문

CREATE [ OR REPLACE ] PIPE [ IF NOT EXISTS ] <name>
  [ AUTO_INGEST = [ TRUE | FALSE ] ]
  [ ERROR_INTEGRATION = <integration_name> ]
  [ AWS_SNS_TOPIC = '<string>' ]
  [ INTEGRATION = '<string>' ]
  [ COMMENT = '<string_literal>' ]
  AS <copy_statement>
Copy

필수 매개 변수

name

파이프에 대한 식별자로, 파이프가 생성된 스키마에 대해 고유한 식별자여야 합니다.

식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

copy_statement

큐에 대기 중인 파일에서 Snowflake 테이블로 데이터를 로딩하는 데 사용되는 COPY INTO <테이블> 문입니다. 이 문은 파이프에 대한 텍스트/정의의 역할을 하며 SHOW PIPES 출력에 표시됩니다.

참고

현재로서는 Snowpipe의 copy_statement 에 다음 기능을 사용하지 않는 것이 좋습니다.

  • CURRENT_DATE

  • CURRENT_TIME

  • CURRENT_TIMESTAMP

  • GETDATE

  • LOCALTIME

  • LOCALTIMESTAMP

  • SYSDATE

  • SYSTIMESTAMP

이러한 함수를 사용하여 삽입된 시간 값이 COPY_HISTORY 함수 또는 COPY_HISTORY 뷰 에서 반환된 LOAD_TIME 값보다 몇 시간 빠를 수 있다는 것은 이미 알려진 문제입니다.

대신 레코드 로딩을 더 정확히 표시해주는 METADATA$START_SCAN_TIME 을 쿼리하는 것이 좋습니다.

선택적 매개 변수

AUTO_INGEST = TRUE | FALSE

구성된 메시지 서비스에서 이벤트 알림을 수신할 때 다음과 같이 지정된 외부 스테이지 및 선택적 경로에서 데이터 파일을 자동으로 로딩할지 여부를 지정합니다.

  • TRUE 로 설정하면 자동 데이터 로딩이 활성화됩니다.

    Snowpipe는 외부 스테이지(Amazon S3, Google Cloud Storage 또는 Microsoft Azure)에서의 로딩을 지원합니다.

  • FALSE 로 설정하면 자동 데이터 로딩이 비활성화됩니다. 데이터 파일을 로딩하려면 Snowpipe REST API 엔드포인트를 호출해야 합니다.

    Snowpipe는 내부 스테이지(즉, 사용자 스테이지가 아니라 Snowflake에서 명명한 스테이지 또는 테이블 스테이지) 또는 외부 스테이지(Amazon S3, Google Cloud Storage 또는 Microsoft Azure)에서의 로딩을 지원합니다.

ERROR_INTEGRATION = 'integration_name'

클라우드 메시징 서비스에 대한 오류 알림을 보내도록 Snowpipe를 구성할 때만 필요합니다.

메시징 서비스와 통신하는 데 사용되는 알림 통합의 이름을 지정합니다. 자세한 내용은 Snowpipe 오류 알림 섹션을 참조하십시오.

AWS_SNS_TOPIC = 'string'

SNS를 사용하여 Amazon S3 스테이지에 대해 AUTO_INGEST를 구성하는 경우에만 필요합니다.

S3 버킷의 SNS 항목에 대한 Amazon 리소스 이름(ARN)을 지정합니다. CREATE PIPE 문은 지정된 SNS 항목에 대한 Amazon SQS(Simple Queue Service) 큐를 구독합니다. 파이프는 SNS 항목을 통한 이벤트 알림으로 트리거된 수집 큐에 파일을 복사합니다. 자세한 내용은 Amazon S3용 Snowpipe 자동화하기 섹션을 참조하십시오.

INTEGRATION = 'string'

Google Cloud Storage 또는 Microsoft Azure 스테이지에 대해 AUTO_INGEST를 구성할 때만 필요합니다.

저장소 큐에 액세스하는 데 사용되는 기존 알림 통합을 지정합니다. 자세한 내용은 다음을 참조하십시오.

통합 이름은 모두 대문자로 입력해야 합니다.

COMMENT = 'string_literal'

파이프에 대한 설명을 지정합니다.

기본값: 값 없음

사용법 노트

  • 이 SQL 명령에는 다음과 같은 최소 권한이 필요합니다.

    권한

    오브젝트

    참고

    CREATE PIPE

    스키마

    USAGE

    파이프 정의에서의 스테이지

    외부 스테이지만

    READ

    파이프 정의에서의 스테이지

    내부 스테이지만

    SELECT, INSERT

    파이프 정의의 테이블

    스키마 오브젝트에 대한 SQL 작업에는 오브젝트를 포함하는 데이터베이스와 스키마에 대한 USAGE 권한도 필요합니다.

  • 다음을 제외한 모든 COPY INTO <테이블> 복사 옵션이 지원됩니다.

    • FILES = ( 'file_name1' [ , 'file_name2', ... ] )

    • ON_ERROR = ABORT_STATEMENT

    • SIZE_LIMIT = num

    • PURGE = TRUE | FALSE (즉, 로딩 중 자동 제거)

    • FORCE = TRUE | FALSE

      (파일이 로딩된 후) REMOVE 명령을 사용하여 내부(즉, Snowflake) 스테이지에서 파일을 수동으로 제거할 수 있습니다.

    • RETURN_FAILED_ONLY = TRUE | FALSE

    • VALIDATION_MODE = RETURN_n_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS

  • PATTERN = 'regex_pattern' 복사 옵션은 정규식을 사용하여 로딩할 파일 세트를 필터링합니다. 패턴 일치는 AUTO_INGEST 매개 변수 값에 따라 다음과 같이 동작합니다.

    • AUTO_INGEST = TRUE: 이 정규식은 COPY INTO <테이블> 문에서 스테이지와 선택적 경로(즉, 클라우드 저장소 위치)의 파일 목록을 필터링합니다.

    • :AUTO_INGEST = FALSE: 이 정규식은 Snowpipe REST API insertFiles 엔드포인트에 대한 호출에서 제출된 파일 목록을 필터링합니다.

    Snowpipe는 저장소 위치에서 스테이지 정의의 경로 세그먼트를 모두 자르고 나머지 경로 세그먼트와 파일 이름에 정규식을 적용함에 유의하십시오. 스테이지 정의를 보려면 스테이지에 대해 DESCRIBE STAGE 명령을 실행하십시오. URL 속성은 버킷 또는 컨테이너 이름과 0개 또는 그 이상의 경로 세그먼트로 구성됩니다. 예를 들어 COPY INTO <테이블> 문에서 FROM 위치가 @s/path1/path2/ 이고 스테이지 @s 의 URL 값이 s3://mybucket/path1/ 인 경우, Snowpipe는 FROM 절의 저장소 위치에서 /path1/ 을 자르고 경로에서 path2/ 와 파일 이름에 정규식을 적용합니다.

    중요

    비용, 이벤트 노이즈, 대기 시간을 줄이기 위해 Snowpipe에 대해 클라우드 이벤트 필터링을 사용하는 것이 좋습니다. PATTERN 옵션은 클라우드 공급자의 이벤트 필터링 기능이 충분하지 않을 때만 사용하십시오. 각 클라우드 공급자의 이벤트 필터링 구성에 대한 자세한 내용은 다음 페이지를 참조하십시오.

  • 열 다시 정렬, 열 생략, 캐스트(즉, 로딩 중 데이터 변환)에 대한 COPY 문의 소스로 쿼리를 사용하는 기능이 지원됩니다. 사용 예는 로드 중 데이터 변환하기 을 참조하십시오. 간단한 SELECT 문만 지원됩니다. WHERE 절을 사용한 필터링은 지원되지 않습니다.

  • 파이프 정의는 동적이지 않습니다(즉, 스테이지/테이블의 이름 바꾸기 또는 삭제와 같이 기본 스테이지 또는 테이블이 변경되는 경우 파이프가 자동으로 업데이트되지 않음). 대신, 새 파이프를 만들고 앞으로의 Snowpipe REST API 호출에서 이 파이프 이름을 제출해야 합니다.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

  • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.

중요

(CREATE OR REPLACE PIPE 구문을 사용하여) 파이프를 다시 만드는 경우 관련 고려 사항과 모범 사례에 대해서는 파이프 다시 만들기 섹션을 참조하십시오.

mystage 스테이지에서 스테이징된 파일에서 mytable 로 모든 데이터를 로딩하는 현재 스키마에서 파이프 만들기:

create pipe mypipe as copy into mytable from @mystage;
Copy

이전 예와 똑같지만, 데이터 변환을 수행합니다. 스테이징된 파일의 4번째 및 5번째 열에서 데이터만 역순으로 로딩하기:

create pipe mypipe2 as copy into mytable(C1, C2) from (select $5, $4 from @mystage);
Copy

메시징 서비스에서 받은 이벤트 알림을 사용한 데이터의 자동 로딩을 위해 현재 스키마에 파이프 만들기:

Amazon S3

create pipe mypipe_s3
  auto_ingest = true
  aws_sns_topic = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket'
  as
  copy into snowpipe_db.public.mytable
  from @snowpipe_db.public.mystage
  file_format = (type = 'JSON');
Copy

Google Cloud Storage

create pipe mypipe_gcs
  auto_ingest = true
  integration = 'MYINT'
  as
  copy into snowpipe_db.public.mytable
  from @snowpipe_db.public.mystage
  file_format = (type = 'JSON');
Copy

Microsoft Azure

create pipe mypipe_azure
  auto_ingest = true
  integration = 'MYINT'
  as
  copy into snowpipe_db.public.mytable
  from @snowpipe_db.public.mystage
  file_format = (type = 'JSON');
Copy