Parquet 데이터 로딩 및 언로딩¶
이 자습서에서는 COPY INTO <테이블> 명령을 사용하여 스테이징된 Parquet 파일의 요소를 테이블 열로 직접 변환하여 Parquet 데이터를 업로드하는 방법을 설명합니다. 이 자습서에서는 COPY INTO <위치> 명령을 사용하여 테이블 데이터를 Parquet 파일로 언로드하는 방법도 설명합니다.
이 항목의 내용:
전제 조건¶
이 자습서에서는 다음을 수행해야 합니다.
Snowflake에서 제공하는 Parquet 데이터 파일을 다운로드합니다.
데이터베이스, 테이블, 가상 웨어하우스를 만듭니다.
데이터베이스, 테이블, 가상 웨어하우스는 대부분의 Snowflake 활동에 필요한 기본 Snowflake 오브젝트입니다.
샘플 데이터 파일 다운로드하기¶
샘플 Parquet 데이터 파일을 다운로드하려면 cities.parquet
을 클릭하십시오. 또는 마우스 오른쪽 버튼을 클릭하고 링크를 마우스 오른쪽 버튼으로 클릭하고 링크/파일을 로컬 파일 시스템에 저장합니다.
이 자습서에서는 다음 디렉터리에 파일의 압축을 푼 것으로 가정합니다.
Linux/macOS:
/tmp/load
Windows:
C:\tempload
Parquet 데이터 파일에는 샘플 대륙 데이터가 포함되어 있습니다. 다음은 대표적인 예입니다.
{
"continent": "Europe",
"country": {
"city": [
"Paris",
"Nice",
"Marseilles",
"Cannes"
],
"name": "France"
}
}
데이터베이스, 테이블, 가상 웨어하우스 만들기¶
다음 명령은 이 자습서에서 특별히 사용하기 위한 오브젝트를 생성합니다. 자습서를 완료하면 이러한 오브젝트를 삭제할 수 있습니다.
create or replace database mydatabase;
use schema mydatabase.public;
create or replace temporary table cities (
continent varchar default null,
country varchar default null,
city variant default null
);
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_parquet_format
파일 형식을 만듭니다.
CREATE OR REPLACE FILE FORMAT sf_tut_parquet_format
TYPE = parquet;
TYPE = 'parquet'
은 원본 파일 형식 유형을 나타냅니다. CSV는 기본 파일 형식 유형입니다.
2단계: 스테이지 오브젝트 생성¶
CREATE STAGE 명령을 실행하여 내부 sf_tut_stage
스테이지를 만듭니다.
CREATE OR REPLACE TEMPORARY STAGE sf_tut_stage
FILE_FORMAT = sf_tut_parquet_format;
임시 테이블과 마찬가지로, 임시 스테이지는 세션이 끝나면 자동으로 삭제됩니다.
3단계: 데이터 파일 스테이징¶
PUT 명령을 실행하여 로컬 파일 시스템에서 명명된 스테이지로 Parquet 파일을 업로드합니다.
Linux 또는 macOS
PUT file:///tmp/load/cities.parquet @sf_tut_stage;
Windows
PUT file://C:\temp\load\cities.parquet @sf_tut_stage;
4단계: 데이터를 대상 테이블로 복사¶
cities.parquet
스테이징된 데이터 파일을 CITIES
테이블에 복사합니다.
copy into cities
from (select $1:continent::varchar,
$1:country:name::varchar,
$1:country:city::variant
from @sf_tut_stage/cities.parquet);
다음 사항을 참고하십시오.
SELECT 쿼리의
$1
은 Parquet 데이터가 저장된 단일 열을 나타냅니다.이 쿼리는 검색하는 각 Parquet 요소 값을 특정한 열 유형으로 캐스팅합니다.
다음 쿼리를 실행하여 데이터가 복사되는지 확인합니다.
SELECT * from cities;
쿼리에서 반환되는 결과는 다음과 같습니다.
+---------------+---------+-----------------+
| CONTINENT | COUNTRY | CITY |
|---------------+---------+-----------------|
| Europe | France | [ |
| | | "Paris", |
| | | "Nice", |
| | | "Marseilles", |
| | | "Cannes" |
| | | ] |
|---------------+---------+-----------------|
| Europe | Greece | [ |
| | | "Athens", |
| | | "Piraeus", |
| | | "Hania", |
| | | "Heraklion", |
| | | "Rethymnon", |
| | | "Fira" |
| | | ] |
|---------------+---------+-----------------|
| North America | Canada | [ |
| | | "Toronto", |
| | | "Vancouver", |
| | | "St. John's", |
| | | "Saint John", |
| | | "Montreal", |
| | | "Halifax", |
| | | "Winnipeg", |
| | | "Calgary", |
| | | "Saskatoon", |
| | | "Ottawa", |
| | | "Yellowknife" |
| | | ] |
+---------------+---------+-----------------+
5단계: 테이블 언로드¶
CITIES
테이블을 다른 Parquet 파일로 언로드합니다.
참고
기본적으로 Snowflake는 모든 값을 허용하는 가장 작은 전체 자릿수를 설정하여 언로드된 Parquet 데이터 파일의 테이블 열을 최적화합니다. “논리적” 열 데이터 타입(즉, 언로드 SQL 쿼리 또는 소스 테이블의 타입)에 의해 결정되는 일정한 출력 파일 스키마를 원하는 경우에는 ENABLE_UNLOAD_PHYSICAL_TYPE_OPTIMIZATION 세션 매개 변수를 FALSE로 설정하십시오.
copy into @sf_tut_stage/out/parquet_
from (select continent,
country,
c.value::string as city
from cities,
lateral flatten(input => city) c)
file_format = (type = 'parquet')
header = true;
다음 사항을 참고하십시오.
file_format = (type = 'parquet')
는 스테이지에 있는 데이터 파일의 형식으로 parquet를 지정합니다. Parquet 파일 형식을 지정한 경우COPY INTO <location>
명령은 기본적으로 단일 열로 데이터를 언로딩합니다.header=true
옵션을 지정하면 이 명령을 실행할 때 출력 파일에 열 이름이 유지됩니다.중첩된 SELECT 쿼리에서:
FLATTEN 함수는 먼저
city
열 배열 요소를 별도의 열로 평면화합니다.LATERAL 한정자는 FLATTEN 함수의 출력을 오브젝트 외부 정보(이 예에서는
continent
및country
)와 조인합니다.
다음 쿼리를 실행하여 데이터가 스테이징된 Parquet 파일로 복사되는지 확인합니다.
select t.$1 from @sf_tut_stage/out/ t;
쿼리는 다음 결과를 반환합니다(결과는 일부만 표시됨).
+---------------------------------+
| $1 |
|---------------------------------|
| { |
| "CITY": "Paris", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Nice", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
|---------------------------------|
| { |
| "CITY": "Marseilles", |
| "CONTINENT": "Europe", |
| "COUNTRY": "France" |
| } |
+---------------------------------+
6단계: 성공적으로 복사한 데이터 파일 제거¶
스테이지에서 테이블로 데이터를 올바로 복사했는지 확인한 후 REMOVE 명령을 사용하여 내부 스테이지에서 데이터 파일을 제거하여 데이터 저장소 에 저장할 수 있습니다.
REMOVE @sf_tut_stage/cities.parquet;
7단계: 정리¶
자습서를 시작하기 전의 상태로 시스템을 되돌리려면 다음 DROP <오브젝트> 명령을 실행합니다.
DROP DATABASE IF EXISTS mydatabase;
DROP WAREHOUSE IF EXISTS mywarehouse;
데이터베이스를 삭제하면 테이블과 같은 모든 하위 데이터베이스 오브젝트가 자동으로 제거됩니다.