データウェアハウスサービス (DWS) レイヤーは、データモデリング中の分析対象によって推進されます。上位レイヤーのアプリケーションとプロダクトのメトリック要件に基づいて、DWS レイヤーはファクトテーブルを作成して共通のメトリックを集計します。 DWS レイヤーのテーブルは、通常、少なくとも 1 つの派生メトリックに対応します。
DWS レイヤーでファクトテーブルを設計する
DWS レイヤーは、元の粒度でデータを集計します。 DWS レイヤーでは、データモデリングの分析対象に基づいてデータが集計されます。このチュートリアルでは、各省の過去 1 日間のカテゴリ (キッチン用品など) の売上高合計、このカテゴリで売上高ランキング上位 10 位のプロダクト名、および各省の顧客の購買力分布 (1 人当たりの消費量) を分析することを目的としています。これを達成するために、過去 1 日間の成功したトランザクションにおけるプロダクト、カテゴリ、購入者などの観点からデータを集計できます。データを集計する際には、次の点に注意してください。
データの集約によって、元のスキーマのディメンションとメジャーは変更されません。データは、元のスタースキーマに基づいて集計されます。元のスキーマに基づいて取得されたクエリ結果と一致するクエリ結果を取得できるように、データ集計後のディメンションとメジャーは元のスキーマのディメンションとメジャーと一致している必要があります。
データの集約はクエリのパフォーマンスを向上させますが、ETL (抽出、変換、ロード) ジョブの保守の難しさも増大させます。サブカテゴリの親カテゴリが変更された場合、集計テーブルに集計された既存のデータをそれに応じて調整する必要があります。
さらに、DWS レイヤーでファクトテーブルを設計する際には、次のルールに従う必要があります。
集計されたデータをサードパーティに提供できるかどうかを検討します。特定のディメンションに基づいて集計されたデータがデータ分析で頻繁に使用されているかどうかを確認できます。その場合は、詳細データを集計テーブルに集計する必要があります。
異なるデータドメインのデータを集計することは避けてください。データドメインとは、上位レベルでデータを集計する抽象エンティティです。データドメインは、ビジネスプロセスによって分類されます。たとえば、トランザクションはトランザクション ドメインに属し、新規および変更されたプロダクトはプロダクト ドメインに属します。
統計期間を指定します。各テーブル名には、データの統計期間を指定する必要があります。たとえば、_1d は過去 1 日間、_td は本日現在、_nd は過去 N 日間を示します。
DWS レイヤーの設計仕様に従う
DWS レイヤーのファクトテーブルの命名規則は、dws_{ビジネスユニット/pub の略称}_{データドメインの略称}_{統計粒度の略称}[_{カスタムテーブルタグの略称}]_{統計期間の略称} です。
統計期間の略称の場合、オフライン計算ではデフォルトで 3 つのテーブルが必要になります。_1d は過去 1 日間、_nd は過去 N 日間、_td は本日現在を示します。フィールドが多すぎるために _nd テーブルを分割する必要がある場合は、分割して、各分割テーブルに 1 つの統計期間のデータのみを格納できます。たとえば、テーブルは過去 7 日間 (_1w) に基づいて分割されます。分割テーブルには、複数の統計期間のデータを格納することはできません。
時間単位のテーブルは、データが毎日更新されるか毎時間更新されるかに関係なく、_hh で識別されます。
分単位のテーブルは、データが毎日更新されるか毎時間更新されるかに関係なく、_mm で識別されます。
次に例を示します。
dws_asale_trd_byr_subpay_1d: A 社の E コマース事業の過去 1 日間の購入者粒度で分割払いされたトランザクションのデータを集計します。
dws_asale_trd_byr_subpay_td: A 社の E コマース事業の本日現在の購入者粒度で分割払いされたトランザクションのデータを集計します。
dws_asale_trd_byr_cod_nd: A 社の E コマース事業の過去 N 日間の購入者粒度で代金引換で支払われたトランザクションのデータを集計します。
dws_asale_itm_slr_td: A 社の E コマース事業の本日現在の販売者粒度でプロダクト在庫のデータを集計します。
dws_asale_itm_slr_hh: A 社の E コマース事業の販売者粒度で時間単位でプロダクトのデータを集計します。
dws_asale_itm_slr_mm: A 社の E コマース事業の販売者粒度で分単位でプロダクトのデータを集計します。
テーブルを作成する
ビジネス要件を満たすために、次のステートメントを使用して DWS レイヤーにテーブルを作成できます。
CREATE TABLE IF NOT EXISTS dws_asale_trd_byr_ord_1d
(
buyer_id BIGINT COMMENT '購入者 ID',
buyer_nick STRING COMMENT '購入者ニックネーム',
mord_prov STRING COMMENT '受取人の都道府県',
cate_id BIGINT COMMENT 'プロダクトカテゴリ ID',
cate_name STRING COMMENT 'プロダクトカテゴリ名',
confirm_paid_amt_sum_1d DOUBLE COMMENT '過去 1 日間の注文で受領および確認されたプロダクトの収益合計'
)
COMMENT '過去 1 日間の購入者粒度ですべてのトランザクションのファクトテーブル'
PARTITIONED BY (ds STRING COMMENT 'パーティションフィールド: YYYYMMDD')
LIFECYCLE 36000;
CREATE TABLE IF NOT EXISTS dws_asale_trd_itm_ord_1d
(
item_id BIGINT COMMENT 'プロダクト ID',
item_title STRING COMMENT 'プロダクト名',
cate_id BIGINT COMMENT 'プロダクトカテゴリ ID',
cate_name STRING COMMENT 'プロダクトカテゴリ名',
mord_prov STRING COMMENT '受取人の都道府県',
confirm_paid_amt_sum_1d DOUBLE COMMENT '過去 1 日間の注文で受領および確認されたプロダクトの収益合計'
)
COMMENT '過去 1 日間のプロダクト粒度ですべてのトランザクションのファクトテーブル'
PARTITIONED BY (ds STRING COMMENT 'パーティションフィールド: YYYYMMDD')
LIFECYCLE 36000;