インフォメーション・マートのテーブルをオブジェクト・ストレージで実装する(1)

 
重要:個人情報や機密情報の使用に関する注意喚起(必ずお読みください)
 当検証で紹介している技術やサービスの使用は、読者の皆様自身の判断と責任で行ってください。特に、個人情報や機密情報を含むデータの取り扱いについては、最大限の注意を払い、適切なセキュリティ対策を講じることが不可欠です。
 検証や実際の利用を行う際には、常にプライバシー保護の法律、規制、およびベストプラクティスを遵守するよう心掛けてください。また、第三者のデータを使用する場合は、必要な同意を得ること、及びそのデータの使用が法律に準じていることを確認することが重要です。
 本ブログや筆者、所属する団体は、紹介する技術を用いて行われるいかなる活動から生じる直接的または間接的な損害に対して、責任を負いかねます。技術を使用することによって生じ得るリスクを理解し、自己の責任で慎重にご活用ください。
 ご不明点や懸念がある場合は、クラウドベンダーや専門家に相談することをお勧めします。
 当検証の情報を活用することで、読者の皆様が新たな知識やスキルを安全に身に付け、ビジネスでの活用をすすめていただければ幸いです。

検証概要

 
 この検証では、ビジネスインテリジェンスにおけるインフォメーション・マートのテーブルをオブジェクトストレージを使った外部テーブルで実装する手法と、それに伴いデータベースネイティブのテーブルと比較して現れる性能の差を評価します。
オブジェクトストレージを使った外部テーブル実装イメージ
オブジェクトストレージを使った外部テーブル実装イメージ
 
 データ分析基盤のデータウェアハウスやインフォメーションマートのストレージとしてオブジェクトストレージを用いることのメリットは次のとおりです。
  1. ビッグデータの分析 オブジェクトストレージは大量のデータを格納するのに適しており、データウェアハウスやビッグデータプラットフォームと連携して、外部テーブル経由で直接アクセスすることが可能です。この方式を利用することで、大規模なログデータやセンサーデータの分析が容易になります。
  1. コスト効率とスケーラビリティ 物理的なデータベースサーバーの容量を超えるデータを扱う場合、オブジェクトストレージはコスト効率が良く、拡張も容易です。外部テーブルを利用することで、データを移動させずにクエリを実行できるため、ストレージと計算のコストを最適化できます。
  1. データの可用性と耐久性 オブジェクトストレージは通常、高い可用性と耐久性を提供します。これにより、重要なデータが損失するリスクを減少させつつ、外部テーブルを通じて常にアクセス可能な状態を維持できます。
  1. パイプラインの簡略化 データをデータベースにロードする従来のETLプロセスは時間がかかり、リソースを大量に消費します。オブジェクトストレージにデータを直接置き、外部テーブルを介してクエリすることで、パイプラインを簡略化し、リアルタイムでのデータアクセスを実現することができます。

検証の環境

 
 環境は、Google Cloud PlatformのBig Query + Cloud Storageを使用し、次のパターンで実施します。
  • オブジェクトストレージ(CSVテキストファイル[圧縮なし])を使用する外部テーブル(GCS+CSV+圧縮なし)
  • オブジェクトストレージ(CSVテキストファイル[圧縮あり])を使用する外部テーブル(GCS+CSV+圧縮なし)
  • オブジェクトストレージ(parquetファイル)を使用する外部テーブル(GCS+PARQUET)
  • Big Queryのネイティブ・テーブル(パーティションなし)(BQ+NOPARTITION)
 

検証用データモデルと実装

 

検証用データモデル

 検証で使用するデータモデルは次の通りです。
 中心のファクトテーブルに該当する部分を上記「検証環境」の4つのパターンに変えながら検証を実施します。

検証用モデルの実装 

 
 実装した各テーブルの件数は次の通りです。
テーブル件数備考
カレンダー532日別
営業組織13
顧客5,312
商品25
売上600,000,0006か月分の売上データ。100,000,000件/月
 また、ファクトテーブルで使用している、ネイティブテーブルと外部テーブルのストレージは次のように使用しています。
ストレージパターン格納形式概要とテーブルの作成
GCS+CSV+圧縮なし1か月分のデータを200のCSVファイルに分割。計1200ファイルで構成。 [ストレージの構成] gs://ext_table_202404/csv/nozip/sales_2023_04_000000000000.csv gs://ext_table_202404/csv/nozip/sales_2023_04_000000000100.csv gs://ext_table_202404/csv/nozip/sales_2023_05_000000000000.csv gs://ext_table_202404/csv/nozip/sales_2023_05_000000000100.csv ・・・・
[テーブルの作成] CREATE OR REPLACE EXTERNAL TABLE trial_ext_tables.ext_sales_csv_nozip ( sale_date DATE ,order_no STRING ,order_type STRING ,dept_cd STRING ,cust_cd STRING ,item_cd STRING ,order_qty INT ,unit_price INT ,order_amt NUMERIC ) OPTIONS ( format = 'CSV', uris = ['gs://ext_table_202404/csv/nozip/sales_*.csv'] );
GCS+CSV+圧縮あり1か月分のデータを200のCSVファイルに分割+圧縮。計1200ファイルで構成。 gs://ext_table_202404/csv/zip/sales_2023_04_000000000000.gz gs://ext_table_202404/csv/zip/sales_2023_04_000000000100.gz gs://ext_table_202404/csv/zip/sales_2023_05_000000000000.gz gs://ext_table_202404/csv/zip/sales_2023_05_000000000100.gz ・・・・
[テーブルの作成] CREATE OR REPLACE EXTERNAL TABLE trial_ext_tables.ext_sales_csv_gzip ( sale_date DATE ,order_no STRING ,order_type STRING ,dept_cd STRING ,cust_cd STRING ,item_cd STRING ,order_qty INT ,unit_price INT ,order_amt NUMERIC ) OPTIONS ( format = 'CSV', uris = ['gs://ext_table_202404/csv/gzip/sales_*.gz'] );
GCS+PARQUET1か月分のデータを200のParquetファイルに分割。計1200ファイルで構成。 gs://ext_table_202404/parquet/sales_2023_04_000000000000.parquet gs://ext_table_202404/parquet/sales_2023_04_000000000100.parquet gs://ext_table_202404/parquet/sales_2023_05_000000000000.parquet gs://ext_table_202404/parquet/sales_2023_05_000000000100.parquet ・・・・
[テーブルの作成] CREATE OR REPLACE EXTERNAL TABLE trial_ext_tables.ext_sales_parquet ( sale_date DATE ,order_no STRING ,order_type STRING ,dept_cd STRING ,cust_cd STRING ,item_cd STRING ,order_qty INT ,unit_price INT ,order_amt NUMERIC ) OPTIONS ( format = 'PARQUET', uris = ['gs://ext_table_202404/parquet/sales_*.parquet'] );
BQ+NOPARTITION[テーブルの作成] CREATE OR REPLACE TABLE trial_ext_tables.int_sales ( sale_date date ,order_no STRING ,order_type STRING ,dept_cd STRING ,cust_cd STRING ,item_cd STRING ,order_qty INT ,unit_price INT ,order_amt NUMERIC );

次回の検証内容

 本投稿では、テーマに基づいたデータの設計およびオブジェクトの作成、データの準備を行いました。次回は、準備した環境を活用して、具体的なユースケースを用いたデータの集計結果と性能を検証します。