JSON 데이터를 관계형 테이블에 로딩하기¶
JSON 데이터를 테이블에 업로드할 때 다음 옵션이 있습니다.
(자습서: COPY를 사용하여 로컬 파일 시스템에서 대량 로드하기 에 표시된 것처럼) JSON 오브젝트를 기본적으로 VARIANT 유형 열에 저장합니다.
(자습서: JSON 기초 에 표시된 것처럼) JSON 오브젝트를 기본적으로 중간 테이블에 저장한 다음 FLATTEN 함수를 사용하여 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"
}
데이터베이스, 테이블, 가상 웨어하우스 만들기¶
다음 명령은 이 자습서에서 특별히 사용하기 위한 오브젝트를 생성합니다. 자습서를 완료하면 오브젝트를 삭제할 수 있습니다.
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;
이러한 명령으로 임시 테이블을 생성합니다. 임시 테이블은 사용자 세션 기간에만 지속되며 다른 사용자에게는 표시되지 않습니다.
1단계: 파일 형식 오브젝트 생성¶
CREATE FILE FORMAT 명령을 실행하여 sf_tut_json_format
파일 형식을 만듭니다.
CREATE OR REPLACE FILE FORMAT sf_tut_json_format
TYPE = JSON;
TYPE = 'JSON'
은 원본 파일 형식 유형을 나타냅니다. CSV는 기본 파일 형식 유형입니다.
2단계: 스테이지 오브젝트 생성¶
CREATE STAGE 를 실행하여 내부 sf_tut_stage
스테이지를 생성합니다.
CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage FILE_FORMAT = sf_tut_json_format;
임시 테이블과 마찬가지로, 임시 스테이지는 세션이 끝나면 자동으로 삭제됩니다.
3단계: 데이터 파일 스테이징¶
PUT 명령을 실행하여 로컬 파일 시스템에서 명명된 스테이지로 JSON 파일을 업로드합니다.
Linux 또는 macOS
PUT file:///tmp/load/sales.json @sf_tut_stage AUTO_COMPRESS=TRUE;
Windows
PUT file://C:\temp\load\sales.json @sf_tut_stage AUTO_COMPRESS=TRUE;
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';
SELECT 쿼리의 $1은 JSON이 저장된 단일 열을 나타냅니다. 이 쿼리에서는 다음 함수도 사용합니다.
state_city JSON 키에서 도시 값과 주 값을 추출하는 SUBSTR , SUBSTRING 함수.
sale_date JSON 키 값을 타임스탬프로 캐스팅하는 TO_TIMESTAMP / TO_TIMESTAMP_*.
다음 쿼리를 실행하여 데이터가 복사되는지 확인합니다.
SELECT * from home_sales;
5단계: 성공적으로 복사한 데이터 파일 제거¶
스테이지에서 테이블로 데이터를 올바로 복사했는지 확인한 후 REMOVE 명령을 사용하여 내부 스테이지에서 데이터 파일을 제거하여 데이터 저장소 에 저장할 수 있습니다.
REMOVE @sf_tut_stage/sales.json.gz;
6단계: 정리¶
자습서를 시작하기 전의 상태로 시스템을 되돌리려면 다음 DROP <오브젝트> 명령을 실행합니다.
DROP DATABASE IF EXISTS mydatabase; DROP WAREHOUSE IF EXISTS mywarehouse;
데이터베이스를 삭제하면 테이블과 같은 모든 하위 데이터베이스 오브젝트가 자동으로 제거됩니다.