この記事では、AWS S3 上の Parquet ファイルを Snowflake にロードする際に必要なスキーマ確認やデータ操作手順を解説します。
実務で役立つ情報を備忘録としてまとめたものです。
外部ステージの確認
外部ステージ情報確認
Snowflake の外部ステージを利用して S3 に格納された Parquet ファイルを扱う前に、現在設定されているステージ情報を確認します。
show stages like 'S3_STAGE';
結果例:
created_on | name | database_name | schema_name | url | ...(省略)... |
---|---|---|---|---|---|
2024-12-09 01:11:23.789 +0900 | S3_STAGE | TEST_DB | TEST_SCHEMA | s3://test_bucket/import_data | ...(省略)... |
外部ステージの設定変更
S3 の URL が誤っている場合、以下のコマンドで修正できます。
alter stage S3_STAGE set url = 's3://test_bucket/export_data';
修正後、再度確認しましょう。
show stages like 'S3_STAGE';
結果例:
created_on | name | database_name | schema_name | url | ...(省略)... |
---|---|---|---|---|---|
2024-12-09 01:11:23.789 +0900 | S3_STAGE | TEST_DB | TEST_SCHEMA | s3://test_bucket/export_data | ...(省略)... |
S3 上のファイル確認
外部ステージに格納されているファイルを確認します。
list @test_db.test_schema.s3_stage;
結果例:
name | size | md5 | last_modified |
---|---|---|---|
s3://test_bucket/export_data/sales_data/LOAD00000001.parquet | 123456 | aaaa1234bbb56789 | Mon, 9 Dec 2024 01:12:34 GMT |
s3://test_bucket/export_data/sales_data/LOAD00000002.parquet | 234567 | jjj5678rrr123456bbd | Mon, 9 Dec 2024 01:12:36 GMT |
s3://test_bucket/export_data/sales_data/LOAD00000003.parquet | 345678 | bbb3456ccc789ddd | Mon, 9 Dec 2024 01:12:38 GMT |
Parquet ファイルのスキーマ確認
Parquet フォーマットの作成
スキーマ確認のため、まず Parquet フォーマットを作成します。
create or replace file format test_db.test_schema.parquet_format type = parquet;
parquet のスキーマ定義の参照
次に、infer_schema 関数を利用してファイルのスキーマを推測します。
select
*
from table(
infer_schema(
location=>'@test_db.test_schema.s3_stage/sales_data/part-0000-aaa123456.parquet'
, file_format=>'test_db.test_schema.parquet_format'
)
)
order by order_id
;
結果例:
COLUMN_NAME | TYPE | NULLABLE | EXPRESSION | FILENAMES | ORDER_ID |
---|---|---|---|---|---|
ID | TEXT | TRUE | $1:ID::TEXT | sales_data/LOAD00000001.parquet | 0 |
NAME | TEXT | TRUE | $1:NAME::TEXT | sales_data/LOAD00000001.parquet | 1 |
PRICE | NUMBER(10, 0) | TRUE | $1:PRICE::TEXT | sales_data/LOAD00000001.parquet | 2 |
UPDATE_DATE | DATE | TRUE | $1:UPDATE_DATE::DATE | sales_data/LOAD00000001.parquet | 3 |
Parquet ファイルのデータ確認
スキーマが確認できたら、データ内容を確認します。
select
$1:ID::TEXT as id
, $1:NAME::TEXT as name
, $1:PRICE::TEXT as price
, $1:UPDATE_DATE::DATE as update_date
from
@test_db.test_schema.s3_stage/sales_data
(
file_format=>'test_db.test_schema.parquet_format'
)
結果例:
id | name | price | update_date |
---|---|---|---|
0001 | name-1 | 1000 | 2024-12-01 11:22:33 |
0002 | name-2 | 2000 | 2024-12-01 20:44:55 |
0003 | name-3 | 3000 | 2024-12-02 12:23:34 |
まとめ
本記事では、AWS S3 の外部ステージを利用した Parquet ファイルのスキーマ確認とデータ操作について解説しました。これらの手順を実践すれば、Snowflake における Parquet ファイルの取り扱いがスムーズになります。
Tips:
-
infer_schema
はデータ構造の確認に非常に便利です。 - 大規模なデータセットを扱う場合は、各ファイル(またはその一部)から少量のデータを抽出して、スキーマやデータの内容を事前に確認したほうが効率的に運用できます。