見出し画像

SnowflakeのSchemaDetection機能を試してみた

分析屋の中田(ナカタ)です。
SnowflakeのSchemaDetection機能を使ってみました。


SchemaDetectionとは

読み方:スキーマディテクション
Snowflakeの機能で、テーブルの元データファイルから
スキーマ情報(列定義など)を自動認識する仕組みです。

対応ファイルは以下の通りです。
Apache Parquet
Apache Avro
ORC
CSV(※プレビュー)
JSON(※プレビュー)

INFER_SCHEMA | Snowflake Documentation

今回やること

クラウドのストレージに元データファイルを配置します。
テーブルの定義を自動で認識させ、テーブルを作成します。

環境

Snowflakeのエディション:ビジネスクリティカル版(トライアル期間)
外部ステージ名:sample_stage
クラウド:AWS(東京リージョン)
ストレージサービス:Amazon S3
元データファイル:CSV形式(文字コード:Shift_JIS)

環境の準備

サンプルのメタデータファイルを作成し、S3に配置します。
今回は以下のCSVファイルを使用します。

S3にアップロードしました。

まだS3とSnowflakeの連携が終わっていない場合は、事前に設定しておく必要があります。
手順が多いため、別記事で紹介することにします。

CSVファイルの読み込み

CSVのフォーマット形式オブジェクトを作成します。

-- ファイルフォーマット作成
CREATE OR REPLACE FILE FORMAT my_csv_format
  TYPE = 'CSV'
  SKIP_HEADER = 1
;

以下のクエリを実行し、S3のCSVファイルからスキーマ情報を自動認識させ
空テーブルを作成します。

-- テーブル作成
CREATE OR REPLACE TABLE source_table
  USING TEMPLATE (
    SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*))
    FROM TABLE(
        INFER_SCHEMA(
          LOCATION => '@sample_stage/table1.csv',
          FILE_FORMAT => 'my_csv_format'
        )
    )
  )
;


※INFER_SCHEMA関数がスキーマ情報を取得している部分です。

作成した空テーブルに対して、CSVデータをロードします。

COPY INTO source_table
FROM @sample_stage/table1.csv
  FILE_FORMAT = (FORMAT_NAME = my_csv_format)
;

無事、ロードできました。

以下のクエリでテーブル定義を確認します。

DESC TABLE source_table;


最後に

関連する機能で、SchemaEvolutionという機能があります。
こちらは、カラム定義が変わった場合に、テーブル側の定義を合わせてくれる機能です。
別途検証する予定です。

スキーマの自動認識は、元データの変更に柔軟に対応できるという見方もできる一方で不正なデータを受け入れてしまうという危険性もあります。

使いどころは慎重に判断すべき機能です。


ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!

晴れてシリーズ化となりました。これまでの記事はこちらから!

株式会社分析屋について

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。

この記事が参加している募集

#やってみた

37,428件