👋
Snowflake Parquetファイルのロード
前回はJSONファイルのロードを紹介しましたが今回はParquetファイルです。
Parquetファイルとは?
Apache Parquetは、効率的なデータの保存と検索のために設計された、
オープンソースの列指向データファイル形式です。
複雑なデータを一括処理するための効率的なデータ圧縮と符号化方式を提供し、
パフォーマンスを向上させます。
Parpuetのロード
準備
まずはロードするための準備を行います。
Parquetフォーマットファイルの作成
CREATE OR REPLACE FILE FORMAT MANAGE_DB.FILE_FORMATS.PARQUET_FORMAT
TYPE = 'parquet';
外部ステージ作成
CREATE OR REPLACE STAGE MANAGE_DB.EXTERNAL_STAGES.PARQUETSTAGE
url = 's3://snowflakeparquetdemo'
FILE_FORMAT = MANAGE_DB.FILE_FORMATS.PARQUET_FORMAT;
Parquetのファイルの中身を確認してみる
SELECT * FROM @MANAGE_DB.EXTERNAL_STAGES.PARQUETSTAGE;
見た感じJSONに似たキーとバリューの関係性を持ったファイルっぽいです。
いくつかの問題
問題①:カラム名がスマートでない
問題②:フィールド内のダブルクォーテーションが邪魔
問題③:日付がおかしい
などなど
それらの問題を修正しスマートに表示する
SELECT
$1:__index_level_0__::int as index_level,
$1:cat_id::VARCHAR(50) as category,
DATE($1:date::int ) as Date,
$1:"dept_id"::VARCHAR(50) as Dept_ID,
$1:"id"::VARCHAR(50) as ID,
$1:"item_id"::VARCHAR(50) as Item_ID,
$1:"state_id"::VARCHAR(50) as State_ID,
$1:"store_id"::VARCHAR(50) as Store_ID,
$1:"value"::int as value
FROM @MANAGE_DB.EXTERNAL_STAGES.PARQUETSTAGE;
Parquetデータのロード
テーブルの作成
CREATE OR REPLACE TABLE OUR_FIRST_DB.PUBLIC.PARQUET_DATA (
ROW_NUMBER int,
index_level int,
cat_id VARCHAR(50),
date date,
dept_id VARCHAR(50),
id VARCHAR(50),
item_id VARCHAR(50),
state_id VARCHAR(50),
store_id VARCHAR(50),
value int,
Load_date timestamp default TO_TIMESTAMP_NTZ(current_timestamp))
データのロード
COPY INTO OUR_FIRST_DB.PUBLIC.PARQUET_DATA
FROM (SELECT
METADATA$FILE_ROW_NUMBER,
$1:__index_level_0__::int,
$1:cat_id::VARCHAR(50),
DATE($1:date::int ),
$1:"dept_id"::VARCHAR(50),
$1:"id"::VARCHAR(50),
$1:"item_id"::VARCHAR(50),
$1:"state_id"::VARCHAR(50),
$1:"store_id"::VARCHAR(50),
$1:"value"::int,
TO_TIMESTAMP_NTZ(current_timestamp)
FROM @MANAGE_DB.EXTERNAL_STAGES.PARQUETSTAGE);
テーブルの確認
SELECT * FROM OUR_FIRST_DB.PUBLIC.PARQUET_DATA;
Discussion