Data Lake Formation(DLF)は、メタデータ抽出とデータ探索機能を提供します。このトピックでは、DLF を使用して Taobao ユーザー行動のサンプルデータを分析する方法について説明します。
前提条件
オブジェクトストレージサービス(OSS)バケットが作成されていること。バケットの作成方法の詳細については、「バケットの作成」をご参照ください。
プロセス
サービスのアクティブ化: Alibaba Cloud アカウントを作成し、DLF と OSS をアクティブ化します。
サンプルデータセットのダウンロードとインポート: サンプルデータを CSV ファイルにダウンロードし、ファイルを OSS にアップロードします。
メタデータ抽出: DLF のメタデータ抽出機能を使用して、ファイルスキーマを自動的に識別し、メタデータテーブルを作成します。
データ探索: DLF のデータ探索機能を使用して、ユーザーエンゲージメントやファネルモデルなど、ユーザー行動を分析します。
データの説明
Alibaba Cloud Tianchi コンテストで使用された Taobao ユーザー行動データセットがテストで使用されます。テストのパフォーマンスを向上させるために、データセットは整理されています。データセットは、ユーザー行動データと製品サンプルデータを CSV 形式で保存します。
Taobao ユーザー行動データセットの詳細については、https://tianchi.aliyun.com/dataset/dataDetail?dataId=46 をご覧ください。
データセット内のデータの時間範囲: 2014 年 12 月 1 日~ 2014 年 12 月 7 日
データ形式:
ユーザーテーブル
列 | 説明 | 備考 |
user_id | ユーザー ID。 | サンプリングされ、非個人化されています。この ID は実際の ID ではありません。 |
item_id | 商品 ID。 | 非個人化されています。この ID は実際の ID ではありません。 |
behavior_type | ユーザー行動のタイプ。 | 有効な値: 1、2、3、4。1 はクリック、2 はお気に入りに追加、3 はカートに追加、4 は支払いを示します。 |
user_geohash | 行動が発生したときのユーザーの地理的な位置。値が空の場合があります。 | ユーザーの緯度と経度に基づいて、機密アルゴリズムを使用して生成されます。 |
item_category | 商品のカテゴリ ID。 | 非個人化されています。この ID は実際の ID ではありません。 |
time | 行動が発生した時刻。 | 時間単位の精度です。 |
商品テーブル
列 | 説明 | 備考 |
item_id | 商品 ID。 | サンプリングされ、非個人化されています。この ID は実際の ID ではありません。 |
item_ geohash | 行動が発生したときの商品の地理的な位置。値が空の場合があります。 | 商品の緯度と経度に基づいて、機密アルゴリズムを使用して生成されます。 |
item_category | 商品のカテゴリ ID。 | 非個人化されています。この ID は実際の ID ではありません。 |
手順
ステップ 1: DLF と OSS をアクティブ化する
DLF コンソールにログインします。
DLF と OSS をアクティブ化し、必要な権限を付与します。(サービスをすでにアクティブ化している場合は、この手順をスキップします。)
DLF サービスをアクティブ化していない場合は、コンソールにログインすると、サービスをアクティブ化するように求められます。[data Lake Formation を無料でアクティブ化する] をクリックします。
サービスがアクティブ化されたら、DLF コンソールのホームページに戻ります。OSS をアクティブ化し、DLF に依存データソースへのアクセス権限を付与するように求められます。[アクティブ化] をクリックして、OSS をアクティブ化し、必要な権限を付与します。
DLF コンソールのホームページが表示されます。
ステップ 2: 分析するデータファイルを OSS にアップロードする
サンプルコードをローカルディスクにダウンロードします。
ダウンロードしたパッケージを解凍します。user_behavior_data ファイルが取得されます。このファイルには、CSV データファイルを含む item フォルダと user フォルダが含まれています。このセクションのテストでは、user フォルダに焦点を当てています。次の図は、フォルダ内の一部のデータの例を示しています。

user_behavior_data フォルダを OSS にアップロードします。詳細については、「シンプルアップロード」をご参照ください。
次の図は、OSS のディレクトリ構造を示しています。item と user は、2 つのテーブルのデータフォルダを示します。
説明フォルダ内の .DS_Store ファイルを削除する必要があります。

ステップ 3: DLF からメタデータを抽出する
DLF コンソールにログインします。
データベースを作成します。
左側のナビゲーションペインで、 を選択します。
[データベース] タブをクリックし、[カタログリスト] ドロップダウンリストから管理するカタログを選択し、[データベースの作成] をクリックします。
表示されたページで、次のパラメータを設定し、[OK] をクリックします。
[カタログ]: カタログを選択します。
[データベース名]: データベース名を入力します。
[データベースの説明]: オプション。データベースの説明を入力します。
[パスの選択]: 前の手順の user_behavior_data ファイルが保存されている OSS パスを選択します。
データベースが作成されていることを確認します。次の図は、作成されたデータベースを示しています。

DLF を使用してメタデータを抽出します。
左側のナビゲーションペインで、 を選択します。
[メタデータディスカバリ] ページで、[抽出タスクの作成] をクリックします。表示されたページで、パラメータを設定します。詳細については、「メタデータディスカバリ」をご参照ください。
[抽出ソースの設定] セクションのパラメータを設定し、[次へ] をクリックします。

[デスティネーションデータベース] パラメータを指定し、[次へ] をクリックします。

[抽出タスクの設定] セクションのパラメータを設定します。
[RAM ロール]: 使用する RAM ロールを選択します。デフォルトでは、アクティブ化フェーズで必要な権限が付与されている AliyunDLFWorkFlowDefaultRole ロールが表示されます。
[実行ポリシー]: [手動] を選択します。
[抽出ポリシー]: このパラメータを [すべて抽出] に設定します。DLF がメタデータを抽出するときに、各ファイルのすべてのメタデータをスキャンします。データ量が大きい場合、この抽出方法は時間がかかります。「すべて抽出」の結果はより正確です。

情報を確認し、[保存して実行] をクリックします。

システムは [メタデータディスカバリ] ページに戻ります。新しいタスクが作成され、自動的に実行されます。データ量が大きい場合、この抽出方法は時間がかかります。
ポインタをステータス列の疑問マークアイコンの上に移動します。メッセージが表示され、2 つのメタデータテーブルが作成されたことが示されます。

テーブルをクエリします。
[データベース] リンクをクリックします。表示されたページで、[テーブルリスト] タブをクリックして、データベース内のテーブル情報を表示します。

テーブル名をクリックして、抽出されたテーブルの構造が想定どおりであるかどうかを確認します。


ステップ 4: ユーザー行動データを分析する
データ分析のプロセスは、次の 3 つのステップで構成されます。
データのプレビューと確認。
データの前処理。
ユーザーエンゲージメント、ファネル、商品の人気度を分析します。
データのプレビューと確認
左側のナビゲーションペインで、[データ探索] をクリックします。SQL エディタで、次のステートメントを入力してファイルデータを表示します。
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`;次の図は、結果を示しています。

データの前処理
生のデータを前処理して、データの可読性と分析パフォーマンスを向上させることができます。
Parquet 形式で user_log テーブルを作成し、日付でテーブルをパーティション化します。
behavior_type の値を理解しやすい文字列に変換します。有効な値: 1、2、3、4。1 はクリック、2 はお気に入りに追加、3 はカートに追加、4 は支払いを示します。
ログの time 列を date 列と hour 列に分割し、days of week 列を追加します。これは、日付と時間のレベルでデータを分析するのに役立ちます。
不要なフィールドを除外します。次に、必要なデータを user_log という名前の新しいテーブルに保存します。
新しいテーブルに基づいてユーザー行動が分析されます。
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
FROM `dlf_demo`.`user`;
-- 結果を表示します。
SELECT * FROM `demo_db`.`user_log` limit 10; 次の図は、結果を示しています。

ユーザー行動を分析する
ファネルモデルに基づいて、クリック、カートに追加、お気に入りに追加から購入までのすべてのユーザーの行動を分析します。
-- 分析には 13 秒かかります。 SELECT behavior, COUNT(*) AS total FROM `demo_db`.`user_log` GROUP BY behavior ORDER BY total DESC次の図は、結果を示しています。

曜日ごとのユーザー行動を分析します。
-- 分析には 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次の図は、結果を示しています。(データセットが整理されているため、分析結果は歪んでいます。)
商品テーブルに基づいて、データセット内で最も人気のある上位 10 個の商品カテゴリを分析します。
-- 分析には 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;次の図は、結果を示しています。
(オプション) 分析結果をダウンロードします。
DLF では、分析結果を CSV ファイルとしてダウンロードできます。ダウンロードする前に、分析結果を保存する OSS パスを指定する必要があります。分析結果は、指定されたパスに保存されます。
[データ探索] ページの右上隅にある [パスの設定] をクリックします。[OSS パスの選択] ダイアログボックスで、[結果の保存パス] パラメータを指定します。既存のフォルダを選択するか、フォルダを作成できます。

設定が完了したら、SQL ステートメントを実行します。[実行履歴] タブで、レコードの [アクション] 列の [ダウンロード] をクリックしてファイルをダウンロードできます。また、OSS コンソールでファイルにアクセスしてダウンロードすることもできます。
(オプション) SQL ステートメントを保存します。
[保存] をクリックして、前の手順で実行した SQL ステートメントを保存できます。その後、必要に応じて、[保存済みクエリ] タブで保存済みの SQL ステートメントを実行できます。
FAQ
質問がある場合、またはデータレイクテクノロジーについて詳しく知りたい場合は、WeChat で公式アカウント「Data Lake Technology Circle」をフォローしてください。