Skip to main content

リリースノート 2023年10月

· 8 min read
崎本 育直

こんにちは! 2023 年 10 月のリリース情報をお届けします!

詳しくは以下をご覧ください。


1. データソース

1.1. 商品統合マスタ (Ref_ProductRepeatplus) テーブル を作成しました 🎉

Ref_ProductRepeatplus テーブルを新規に作成しました。

今回作成した Ref_ProductRepeatplusテーブルは、
Ref_Product, Ref_ProductBundle, Ref_ProductRepeatplus の 3 つのテーブルを活用しやすい形に加工したテーブルになります。

サンプルクエリ
はぐくみの2023年10月1日に注文された商品名ごとの購入数
select
b.variation_name,
sum(b.variation_quantity) as total_quantity
from dwh.RDW_Repeatplus_Order as o
left join dwh.RDW_Repeatplus_OrderItem as oi using(_HASHKEY_ORDER)
left join dwh.Ref_ProductRepeatplus as rpr
on oi._MULTI_TENANT_ID = rpr._TENANT_ID
and oi.product_id = rpr.product_id,
unnest(bundles) as b
where
o._MULTI_TENANT_ID = 'hugkumi'
and date(order_date) = '2023-10-01'
group by 1
order by 2 desc;

以前よりも利用しやすい形になっていますので、ぜひ活用ください。

ポイント

テーブル結合のキーについて 「ユーティリティ - ER 図(Repeatplus)」から!

1.2. O-PLUX データの ER 図を作成しました 🧰

O-PLUX のテーブル関係がわかる ER 図を作成しました。

ポイント

詳しくは 「ユーティリティ - ER 図(O-PLUX)」から!

1.3. 日付情報 (Ref_Calendar) テーブルを作成しました 🎉

日付に関する情報を持つ Ref_Calendar テーブルを作成しました。

日付データと結合することで日付に関する情報を参照することが簡単になりました。 例えば、ユーザーの誕生日から年代(10-19, 20-29, 30-39...)を出せたり、出荷日が何曜日になるかを出せたり、、、

サンプルクエリ
昨日新規注文したユーザーの年齢(10歳区切り)の分布
with first as (
select
RDW_Repeatplus_Order.order_id,
RDW_Repeatplus_Order.user_id,
date(RDW_Repeatplus_User.birth) as birth,
Ref_Calendar.generation_10,
from `enterprise-dw-376005.dwh.RDW_Repeatplus_Order` as RDW_Repeatplus_Order
left join `enterprise-dw-376005.dwh.BDW_Repeatplus_Order` as BDW_Repeatplus_Order
on RDW_Repeatplus_Order._HASHKEY = BDW_Repeatplus_Order._HASHKEY
left join `enterprise-dw-376005.dwh.RDW_Repeatplus_User` as RDW_Repeatplus_User
on RDW_Repeatplus_Order._HASHKEY_USER = RDW_Repeatplus_User._HASHKEY_USER
left join `enterprise-dw-376005.dwh.Ref_Calendar` as Ref_Calendar
on RDW_Repeatplus_User.birth = Ref_Calendar.date
where
date(RDW_Repeatplus_Order.order_date) = date_sub(current_date("Asia/Tokyo"), interval 1 day)
and
RDW_Repeatplus_Order._MULTI_TENANT_ID = "hugkumi"
and
BDW_Repeatplus_Order._number_of_orders = 1
)

select
generation_10,
count(*) as cnt,
from first
group by 1
order by 1

1.4. 新しいメタデータ _TRANSACTION_TS を追加しました 🎉

データ基盤のデータソース連携が正常に行われているかを検知するために _TRANSACTION_TS を追加しました。

例えば、Repeatplus の場合、Order に関連する OrderItem や OrderShipping などの同一トランザクションであるレコードが分かれて連携されているため、最新のトランザクションレコードを特定することが難しい場合があります。これを解決するために、レコードの基準日(order_date など)を定義し、同一トランザクションであるということを意味するカラムにしています。

ポイント

ビジネスユーザーが利用する場面としては、(OrderItem の場合)OrderItem の商品がいつ購入された商品かどうかを OrderItem テーブルの _TRANSACTION_TS を参照することで識別できるような運用が可能になりました。

2 その他

2.1 SQL フォーマッター(β 版)を作成しました 🧰

日々、SQL クエリを作成していただいているかと思いますが、グロースハックチームが定義した、見やすく、読みやすいクエリに変換できるツール「SQL フォーマッター( β 版)」を作成いたしました。

変換の一例

▼ 変換前のクエリ

WITH CustomerOrders AS (SELECT c.customer_id, c.customer_name, o.order_id, o.order_date, o.total_amount FROM `プロジェクト名.データセット名.customer_table` AS c JOIN `プロジェクト名.データセット名.orders_table` AS o ON c.customer_id = o.customer_id),
ProductSales AS (SELECT co.customer_id, co.customer_name, co.order_id, co.order_date, co.total_amount, p.product_name, p.unit_price, p.quantity FROM CustomerOrders AS co JOIN `プロジェクト名.データセット名.product_table` AS p ON co.order_id = p.order_id)
SELECT customer_id, customer_name, SUM(total_amount) AS total_sales FROM ProductSales GROUP BY customer_id, customer_name ORDER BY total_sales DESC;

▼ SQL フォーマッターの結果

with CustomerOrders as (
select
c.customer_id,
c.customer_name,
o.order_id,
o.order_date,
o.total_amount
from `プロジェクト名.データセット名.customer_table` as c inner join `プロジェクト名.データセット名.orders_table` as o on c.customer_id = o.customer_id
),

ProductSales as (
select
co.customer_id,
co.customer_name,
co.order_id,
co.order_date,
co.total_amount,
p.product_name,
p.unit_price,
p.quantity
from CustomerOrders as co inner join `プロジェクト名.データセット名.product_table` as p on co.order_id = p.order_id
)

select
customer_id,
customer_name,
sum(total_amount) as total_sales
from ProductSales group by customer_id, customer_name order by total_sales desc;

誰かにクエリをレビューしてもらいたい時、もっと綺麗なクエリにしたいと思った時などにご活用ください。
※ β 版のため、不具合や要望等ありましたら、グロースハック宛にご連絡いただけますと幸いです。

2.2 SLO ダッシュボードを作成しました 📊

日次、時次でさまざまなデータソースを連携しているデータ基盤ですが、各データソースが正しい時間に正しく連携できているかを確認するためのレポートを作成しました。

DATA CAPTURE STATUS

データ基盤を運用するにあたり、システム間の連携にて不具合が生じ、データ連携が正常にできない状況になる場合があります。 その状況をできる限り少なくしようという試みとして、初年度のグロースハックチームでは、SLO 95% 以上を目標に運用をしていきます。

目標達成のために、ビジネスユーザーの皆さんにご協力を仰ぐこともあるかもしません。その際は、ご協力の程よろしくお願いいたします。

SLO とは?

「Service Level Objective(サービスレベル目標)」の略であり、SLO はサービス提供者がユーザーに対して約束するサービスの品質や性能を定義したものです。
具体的には、データ基盤の可用性(データ連携に遅延がないか、連携できていないデータがないかなどのメトリクス)を基にした目標値や期待値を示します。


今回のリリース内容は以上です。
気になるリリースがございましたら、グロースハックチーム担当者までお気軽にご連絡くださいませ。 Happy Data Analysis!