Data Lake Formation (DLF) は、メタデータ抽出およびデータ探索機能を提供します。本チュートリアルでは、OSS への CSV データセットのアップロード、スキーマの自動検出を実行するメタデータ抽出タスクの実行、および DLF データ探索エディター内での SQL を用いた結果テーブルのクエリまで、タオバオユーザー行動データのエンドツーエンド分析手順を説明します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Object Storage Service (OSS) バケットが存在すること。詳細については、「バケットの作成」をご参照ください。
学習内容
本チュートリアルに従うことで、以下の操作を実行できます。
サンプル CSV データセットを OSS にアップロードします。
DLF メタデータディスカバリーを使用して、スキーマを自動検出し、メタデータテーブルを作成します。
DLF データ探索エディター内で SQL クエリを実行し、ユーザー行動、ファネルメトリック、および商品人気度を分析します。
データセットの概要
本チュートリアルでは、Alibaba Cloud 天池コンペティションで公開されたタオバオユーザー行動データセットの一部を抽出したバージョンを使用します。このデータセットは、CSV 形式のユーザー行動記録および商品データを含み、2014 年 12 月 1 日~7 日の期間を対象としています。
完全なデータセットについては、「天池データセット #46」をご参照ください。
データセットには、ユーザーの個別行動を追跡する user テーブルと、商品情報を記述する item テーブルの 2 つのテーブルが含まれます。
user テーブル
user テーブルの各行は、1 件のユーザー行動を表します。サンプル行は以下のとおりです。
user_id, item_id, behavior_type, user_geohash, item_category, time
98047837, 232431562, 1, 9q9hr, 4245, 2014-12-06 02| カラム | 説明 | 備考 |
|---|---|---|
| user_id | ユーザー ID | サンプリングおよび非識別化済み。実際の ID ではありません。 |
| item_id | 商品 ID | 非識別化済み。実際の ID ではありません。 |
| behavior_type | ユーザー行動の種類 | 有効な値:1、2、3、4。1 はクリック、2 はお気に入り登録、3 はカート追加、4 は支払いを意味します。 |
| user_geohash | 行動発生時のユーザーの地理的位置。値が空の場合があります。 | ユーザーの緯度・経度に基づき、機密アルゴリズムで生成されます。 |
| item_category | 商品のカテゴリ ID | 非識別化済み。実際の ID ではありません。 |
| time | 行動発生時刻 | 時間単位(最も近い時刻)まで正確です。 |
item テーブル
item テーブルの各行は、1 つの商品を表します。サンプル行は以下のとおりです。
item_id, item_geohash, item_category
100003064, 93rbz7, 5894| カラム | 説明 | 備考 |
|---|---|---|
| item_id | 商品 ID | サンプリングおよび非識別化済み。実際の ID ではありません。 |
| item_geohash | 行動発生時の商品の地理的位置。値が空の場合があります。 | 商品の緯度・経度に基づき、機密アルゴリズムで生成されます。 |
| item_category | 商品のカテゴリ ID | 非識別化済み。実際の ID ではありません。 |
操作手順
ステップ 1:DLF および OSS の有効化
DLF コンソール にログインします。
DLF および OSS を有効化し、必要な権限を付与します。すでに両サービスを有効化済みの場合は、このステップをスキップしてください。
DLF がまだ有効化されていない場合、初回ログイン時に有効化を促すメッセージが表示されます。Data Lake Formation を無料で有効化 をクリックします。
有効化後、DLF コンソールのホームページに戻ります。有効化 をクリックして OSS を有効化し、DLF が依存データソースにアクセスできるよう、必要な権限を付与します。
DLF コンソールのホームページ が開きます。
ステップ 2:データファイルを OSS にアップロード
サンプルデータをダウンロード し、ローカルディスクに保存します。パッケージを展開します。
user_behavior_dataフォルダには、itemおよびuserの 2 つのサブフォルダが含まれており、それぞれ CSV データファイルを格納しています。本チュートリアルでは、userフォルダに焦点を当てます。以下の図に、フォルダ内の一部のデータを示します。
user_behavior_dataフォルダを OSS にアップロードします。詳細については、「シンプルアップロード」をご参照ください。以下の図に、OSS 内の結果となるディレクトリ構造を示します。itemおよびuserのサブフォルダは、それぞれ 2 つのテーブルに対応しています。説明アップロード前に、両方のフォルダから .DS_Store ファイルを削除してください。

ステップ 3:メタデータの抽出
DLF コンソール にログインします。
データベースを作成します。
左側ナビゲーションウィンドウで、メタデータ > メタデータ を選択します。
データベース タブをクリックし、カタログ一覧 のドロップダウンリストからカタログを選択し、データベースの作成 をクリックします。
以下のパラメーターを設定し、OK をクリックします。
パラメーター 説明 カタログ カタログを選択します。 データベース名 データベース名を入力します。 データベースの説明 任意項目です。説明を入力します。 パスの選択 ステップ 2 で user_behavior_dataをアップロードした OSS パスを選択します。データベースが一覧に表示されることを確認します。

メタデータ抽出タスクを実行します。
左側ナビゲーションウィンドウで、メタデータ > メタデータディスカバリー を選択します。
メタデータディスカバリーページで、抽出タスクの作成 をクリックします。パラメーターの全リファレンスについては、「メタデータディスカバリー」をご参照ください。
抽出ソースの設定 セクションを構成し、次へ をクリックします。

宛先データベース パラメーターを設定し、次へ をクリックします。

以下の設定で 抽出タスクの設定 セクションを構成します。
パラメーター 値 備考 RAM ロール AliyunDLFWorkFlowDefaultRole 有効化時に事前に付与済みです。 実行ポリシー 手動 要求に応じて即座にタスクを実行します。 抽出ポリシー すべて抽出 すべてのファイルをスキャンしてメタデータを抽出します。サンプリングよりも正確ですが、大規模データセットでは処理時間が長くなります。 
構成内容を確認し、保存して実行 をクリックします。

DLF がメタデータディスカバリーページに戻り、タスクが自動的に開始されます。ステータス列の疑問符アイコンにマウスを合わせると、2 つのメタデータテーブル(
itemおよびuser各 1 つ)が作成されたことが確認できます。
抽出されたテーブルを検証します。
データベース リンクをクリックし、テーブル一覧 タブをクリックして、データベース内に作成されたテーブルを確認します。

テーブル名をクリックし、抽出されたスキーマが期待されるカラムと一致することを確認します。

ステップ 4:ユーザー行動データの分析
本チュートリアルにおけるデータ分析は、以下の 3 段階で構成されます。
データのプレビューおよび確認。
データの前処理。
ユーザー関与度、ファネル、および商品人気度の分析。
左側ナビゲーションウィンドウで、データ探索 をクリックして SQL エディターを開きます。
データのプレビューおよび確認
以下のステートメントを実行して、生データを確認し、レコード数をカウントします。SET spark.sql.legacy.timeParserPolicy=LEGACY により、Spark SQL のレガシ日付フォーマットパーサーを使用して time カラムを正しく解析します。
SET spark.sql.legacy.timeParserPolicy=LEGACY;
-- 生データのプレビュー
SELECT * FROM `demo_db`.`user` LIMIT 10;
SELECT * FROM `demo_db`.`item` LIMIT 10;
-- ユニークユーザー数のカウント
SELECT COUNT(DISTINCT user_id) FROM `demo_db`.`user`;
-- ユニーク商品数のカウント
SELECT COUNT(DISTINCT item_id) FROM `demo_db`.`item`;
-- 行動レコードの合計数のカウント
SELECT COUNT(*) FROM `demo_db`.`user`;以下の図に結果を示します。

データの前処理
生の user テーブルでは、行動タイプが数値コード(1~4)で格納されており、日付と時刻が 1 つのカラムに結合されています。以下のステートメントにより、この生データを分析に適した形式に変換します。
USING PARQUETにより、出力をカラム指向 Parquet 形式で保存します。これは CSV と比較してデータ圧縮率が高く、分析クエリの実行速度も向上します。PARTITIONED BY (date)により、クエリで特定の日付をフィルターする際に Spark が日付パーティション全体をスキップできるようになります。CASE WHENブロックにより、数値の行動コードを読みやすいラベル(click、collect、cart、pay)に変換します。date_formatにより、timeカラムを分離し、date、hour、day_of_weekの各カラムを作成します。これにより、後続のクエリで日付単位および時間単位の分析が可能になります。
CREATE TABLE `demo_db`.`user_log`
USING PARQUET
PARTITIONED BY (date)
AS SELECT
user_id,
item_id,
-- 数値の行動コードを読みやすいラベルに変換
CASE
WHEN behavior_type = 1 THEN 'click'
WHEN behavior_type = 2 THEN 'collect'
WHEN behavior_type = 3 THEN 'cart'
WHEN behavior_type = 4 THEN 'pay'
END AS behavior,
item_category,
time,
date_format(time, 'yyyy-MM-dd') AS date, -- パーティションキーとして使用
date_format(time, 'H') AS hour,
date_format(time, 'u') AS day_of_week -- 1=月曜日 ... 7=日曜日
FROM `dlf_demo`.`user`;
-- 結果の確認
SELECT * FROM `demo_db`.`user_log` LIMIT 10;以下の図に結果を示します。

ユーザー行動の分析
以下に示す 3 つの分析は、すべて前ステップで作成した user_log テーブルを対象にクエリを実行します。
ファネル分析:データセット全体において、ユーザーが各行動タイプを実行した回数をカウントします。これにより、クリック → お気に入り登録 → カート追加 → 支払いというファネルにおけるユーザー離脱箇所が明らかになります。
-- 実行時間:約 13 秒 SELECT behavior, COUNT(*) AS total FROM `demo_db`.`user_log` GROUP BY behavior ORDER BY total DESC;以下の図に結果を示します。

日次関与度分析:ユニークビジター(UV)および行動回数を日付および曜日ごとに集計します。これにより、アクティビティが平日または週末にピークを迎えるかを把握できます。
説明本チュートリアル用にデータセットが抽出されているため、曜日のパターンは実際のタオバオトラフィックを反映していない可能性があります。クエリ構文自体は正しいため、有意義なトレンドを得るには完全なデータセットに対して適用してください。
-- 実行時間:約 14 秒 SELECT date, day_of_week, COUNT(DISTINCT(user_id)) AS uv, SUM(CASE WHEN behavior = 'click' THEN 1 ELSE 0 END) AS click, SUM(CASE WHEN behavior = 'cart' THEN 1 ELSE 0 END) AS cart, SUM(CASE WHEN behavior = 'collect' THEN 1 ELSE 0 END) AS collect, SUM(CASE WHEN behavior = 'pay' THEN 1 ELSE 0 END) AS pay FROM `demo_db`.`user_log` GROUP BY date, day_of_week ORDER BY date;人気上位商品カテゴリ:
itemテーブルとuser_logを結合し、購入回数が最も多い上位 10 商品カテゴリを特定します。behavior = 'pay'でフィルターすることで、閲覧活動ではなく実際の購入のみを対象とします。-- 実行時間:約 1 分 10 秒 SELECT item.item_category, COUNT(*) AS times FROM `demo_db`.`item` item JOIN `demo_db`.`user_log` log ON item.item_id = log.item_id WHERE log.behavior = 'pay' GROUP BY item.item_category ORDER BY times DESC LIMIT 10;(任意)結果のダウンロード:クエリ結果を CSV ファイルとして保存します。
データ探索 ページの右上隅にある パス設定 をクリックします。[OSS パスの選択] ダイアログボックスで、結果保存パス を既存のフォルダに設定するか、新しいフォルダを作成します。

クエリを実行した後、実行履歴 タブに移動し、[操作] 列の ダウンロード をクリックして結果ファイルをダウンロードします。ファイルは OSS コンソールからもアクセス可能です。
(任意)SQL ステートメントの保存:保存 をクリックして SQL ステートメントを保存します。保存済みのクエリは、今後の実行のために 保存済みクエリ タブで利用可能です。
次のステップ
エンドツーエンドのチュートリアルを完了した後は、以下のトピックをさらに探求してみてください。
抽出タスクのスケジュール設定:手動実行ではなく、定期実行ポリシーを設定してメタデータ抽出を自動化します。
大規模データセットのクエリ実行:抽出タスクの対象をご利用の OSS バケットに変更することで、同じ SQL パターンを自社データに適用します。
クエリパフォーマンスの最適化:頻繁にフィルター処理を行うカラムでテーブルをパーティション化することで、スキャン時間を短縮します。
よくある質問
ご質問がある場合や、データレイク技術についてさらに詳しく知りたい場合は、WeChat の公式アカウント「Data Lake Technology Circle」をフォローしてください。