JSON 데이터를 관계형 테이블에 로딩하기

JSON 데이터를 테이블에 업로드할 때 다음 옵션이 있습니다.

이 자습서의 COPY 명령은 SELECT 문을 사용하여 스테이징된 JSON 파일의 개별 요소를 쿼리합니다.

이 자습서에서 예시로 제공하는 명령에는 PUT 문이 포함되어 있습니다. PUT 명령을 지원하는 SnowSQL에서 이러한 명령을 실행하는 것이 좋습니다. Snowsight 및 Classic Console 와 같은 클라이언트는 PUT 명령을 지원하지 않습니다.

이 항목의 내용:

전제 조건

이 자습서에서는 다음을 수행해야 합니다.

  • Snowflake에서 제공하는 JSON 데이터 파일을 다운로드합니다.

  • 이 자습서에 따라 실습하기 위한 데이터베이스, 테이블, 가상 웨어하우스를 만듭니다.

데이터베이스, 테이블, 가상 웨어하우스는 대부분의 Snowflake 활동에 필요한 기본 Snowflake 오브젝트입니다.

로드할 데이터 파일

샘플 JSON 데이터 파일을 다운로드하려면 sales.json 을 클릭하십시오. 링크를 클릭해도 파일이 다운로드되지 않으면, 링크를 마우스 오른쪽 버튼으로 클릭하고 링크/파일을 로컬 파일 시스템에 저장합니다.

이 자습서에서는 다음 디렉터리에 JSON 데이터 파일의 압축을 푼 것으로 가정합니다.

  • Linux/macOS: /tmp/load

  • Windows: C:\tempload

데이터 파일에는 주택 판매 JSON 데이터 샘플이 포함되어 있습니다. 다음과 같이 예시 JSON 오브젝트가 표시됩니다.

{
   "location": {
      "state_city": "MA-Lexington",
      "zip": "40503"
   },
   "sale_date": "2017-3-5",
   "price": "275836"
}
Copy

데이터베이스, 테이블, 가상 웨어하우스 만들기

다음 명령은 이 자습서에서 특별히 사용하기 위한 오브젝트를 생성합니다. 자습서를 완료하면 오브젝트를 삭제할 수 있습니다.

 create or replace database mydatabase;

 use schema mydatabase.public;

CREATE OR REPLACE TEMPORARY TABLE home_sales (
  city STRING,
  zip STRING,
  state STRING,
  type STRING DEFAULT 'Residential',
  sale_date timestamp_ntz,
  price STRING
  );

create or replace warehouse mywarehouse with
  warehouse_size='X-SMALL'
  auto_suspend = 120
  auto_resume = true
  initially_suspended=true;

use warehouse mywarehouse;
Copy

이러한 명령으로 임시 테이블을 생성합니다. 임시 테이블은 사용자 세션 기간에만 지속되며 다른 사용자에게는 표시되지 않습니다.

1단계: 파일 형식 오브젝트 생성

CREATE FILE FORMAT 명령을 실행하여 sf_tut_json_format 파일 형식을 만듭니다.

CREATE OR REPLACE FILE FORMAT sf_tut_json_format
  TYPE = JSON;
Copy

TYPE = 'JSON' 은 원본 파일 형식 유형을 나타냅니다. CSV는 기본 파일 형식 유형입니다.

2단계: 스테이지 오브젝트 생성

CREATE STAGE 를 실행하여 내부 sf_tut_stage 스테이지를 생성합니다.

CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage
 FILE_FORMAT = sf_tut_json_format;
Copy

임시 테이블과 마찬가지로, 임시 스테이지는 세션이 끝나면 자동으로 삭제됩니다.

3단계: 데이터 파일 스테이징

PUT 명령을 실행하여 로컬 파일 시스템에서 명명된 스테이지로 JSON 파일을 업로드합니다.

  • Linux 또는 macOS

    PUT file:///tmp/load/sales.json @sf_tut_stage AUTO_COMPRESS=TRUE;
    
    Copy
  • Windows

    PUT file://C:\temp\load\sales.json @sf_tut_stage AUTO_COMPRESS=TRUE;
    
    Copy

4단계: 데이터를 대상 테이블로 복사

sales.json.gz 스테이징된 데이터 파일을 home_sales 테이블에 로드합니다.

COPY INTO home_sales(city, state, zip, sale_date, price)
   FROM (SELECT SUBSTR($1:location.state_city,4),
                SUBSTR($1:location.state_city,1,2),
                $1:location.zip,
                to_timestamp_ntz($1:sale_date),
                $1:price
         FROM @sf_tut_stage/sales.json.gz t)
   ON_ERROR = 'continue';
Copy

SELECT 쿼리의 $1은 JSON이 저장된 단일 열을 나타냅니다. 이 쿼리에서는 다음 함수도 사용합니다.

다음 쿼리를 실행하여 데이터가 복사되는지 확인합니다.

SELECT * from home_sales;
Copy

5단계: 성공적으로 복사한 데이터 파일 제거

스테이지에서 테이블로 데이터를 올바로 복사했는지 확인한 후 REMOVE 명령을 사용하여 내부 스테이지에서 데이터 파일을 제거하여 데이터 저장소 에 저장할 수 있습니다.

REMOVE @sf_tut_stage/sales.json.gz;
Copy

6단계: 정리

자습서를 시작하기 전의 상태로 시스템을 되돌리려면 다음 DROP <오브젝트> 명령을 실행합니다.

DROP DATABASE IF EXISTS mydatabase;
DROP WAREHOUSE IF EXISTS mywarehouse;
Copy

데이터베이스를 삭제하면 테이블과 같은 모든 하위 데이터베이스 오브젝트가 자동으로 제거됩니다.