Object Storage Scanner の使用例

Prev Next

VPC環境で利用できます。

シナリオの概要

Object Storage Bucketを対象にスキャナーを作成してユーザーが希望するソースデータのスキーマを推論し、テーブルを作成するプロセスを説明します。

ソースデータ

Object Storageに保存されているソースデータは大気汚染の測定データとして日時、測定所名、オゾン濃度、亜硫酸ガス濃度など、様々な測定情報があります。Hadoop File Systemで使うパーティション構造で保存し、ファイルは年/月別に区分して保存されています。

フォルダ構造

/atmosphere-data
├── year=2022
│   ├── month=10
│   │   └── atomosphere_data_2022.10.csv
│   ├── month=11
│   │   └── atomosphere_data_2022.11.csv
│   └── month=12
│       └── atomosphere_data_2022.12.csv
└── year=2023
    ├── month=01
    │   └── atomosphere_data_2023.01.csv
    ├── month=02
    │   └── atomosphere_data_2023.02.csv
    └── month=03
        └── atomosphere_data_2023.03.csv

ファイル構造

  • すべてのファイルは同じスキーマで構成され、以下はスキーマとデータのサンプルです。
date area_code area_name measure_center_code measure_center_name fine_dust_per_hour fine_dust_per_day ultrafine_dust_per_day ozone_ppm nitrogen_dioxide_concentration_ppm carbon_monoxide_concentration_ppm sulfurous_acid_gas_concentration_ppm
202210302300 100 downtown 111123 junggu 69 59 49 0.013 0.064 0.8 0.004
202210302300 100 downtown 111121 junggu-2 82 59 56 0.008 0.074 0.8 0.003
202210302300 100 downtown 111131 yongsangu 68 58 64 0.028 0.037 0.7 0.003

スキャナー作成と実行

コネクション作成

 名前: (atmosphere-bucket-connection)
 データタイプ: (Object Storage)
 バケット: (保存したバケット名)

スキャナー作成

   データタイプ: (Object Storage)
   コネクション: (atmosphere-bucket-connection)
   パス: (未入力)
   実行周期: (オンデマンド)
   パターン: (含む:*.csv)
   分類子: (未入力)
   データベース: (default)
   prefix: (未入力)
   出力データ: (テーブル定義アップデート)
   名前: atmosphere-scanner
  • パターン: パターンに含む/除外のファイル形式を使用すると目的のファイルのみスキャンが可能で、使用しない場合はすべてのファイルをスキャンします。
  • 分類子: 分類子を指定(選択)しない場合は Data Catalog内部の分類子によってスキーマを決定し、ユーザーが定義した分類子を追加する場合は追加した分類子を優先してスキーマ推論を試みます。
  • パス: バケット内の特定のパスを指定すると、そのサブパスのデータ基準でスキーマを推論します。入力しない場合はサブバケットのすべてのパスをスキャンします。
参考

Object Storage暗号化バケットを使用するには、暗号化バケットを新規作成してパスを指定した場合のカタログを Reloadする必要があります。(初回1回)

スキャナー実行

  • 実行待機中のスキャナーの [実行] ボタンを押してスキャンを開始します。
  • 実行を開始する ステータスのスキャナーは、スキャン完了と同時に実行待機 ステータスに変更されます。
  • 実行履歴タブで結果を確認でき、スキーマは Tableメニューで確認できます。

スキャン動作時のテーブル/パーティションの選定方法

  • スキャナーはユーザーが指定した Object Storage内のバケット/パス上のファイルにアクセスしてファイルの一部を読み取り、ファイルの形式と内部スキーマを類推して meta dataを作成します。

スキャン処理ルール

  1. ファイルパースとスキーマを類推
  • ユーザーが指定したバケット/パス上のすべてのファイルに対して順次アクセスし、ファイルの最初の1MBを読み取ります。
  • parquet、xml、json、csvなどのシステムの Classifierを介してファイルをパースし、内部スキーマを類推します。
  • ただし、 ユーザー定義 Classifierを Scannerに設定した場合、ユーザー定義 Classifierをシステム Classifierより優先してパースを試行します。
  • ファイルパースに失敗した場合は以下の1MBを読み取り、同様にパースを試行します。最大10MBまでファイルを読み取ります。
  1. 個別ファイルをディレクトリ単位でマージ
  • 複数の個別ファイルのスキーマが類似する場合、類似したスキーマの割合が70%以上の場合
  • 複数の個別ファイルのタイプが同様
  • 類似したスキーマ間のカラムはマージし、類似しないスキーマのカラムは無視する

obj_scanner_scan_policy

  1. 個別ディレクトリを上位ディレクトリ単位でマージ
  • 複数の個別ディレクトリのパス情報に含まれたパーティション情報を有効にする
  • 複数の個別ディレクトリのスキーマが類似する場合、類似したスキーマの割合が70%以上の場合
  • 複数の個別ディレクトリのタイプが同様
  • 類似したスキーマ間のカラムはマージし、類似しないスキーマのカラムは無視する

obj_scanner_foler_merge_policy

スキャナーの実行結果

追加テーブル 追加パーティション スキーマ
atmosphere-data atmosphere_data:partition_0/year/month date (bigint ) date (bigint )
area_code (double)
area_name (string)
measure_center_code (double)
measure_center_name (string)
fine_dust_per_hour (double)
fine_dust_per_day (double)
ultrafine_dust_per_day (double)
ozone_ppm (double)
nitrogen_dioxide_concentration_ppm (double)
carbon_monoxide_concentration_ppm (double)
sulfurous_acid_gas_concentration_ppm (double)

スキャンサポートのファイルタイプ

  • Object Storageスキャナーでサポートするファイル Content-Typeは、以下の通りです
text/csv
text/tab-separated-values
text/xml
application/xml
application/json
application/x-ndjson
application/octet-stream
binary/octet-stream
application/parquet
application/x-parquet
application/orc
application/x-orc
application/avro
application/vnd.apache.avro
application/gzip
application/x-gzip
application/x-bzip2