ワンダーブリックス データセット
samplesカタログ内のwanderbricksスキーマには、シミュレーションされた旅行予約プラットフォームのデータセットが含まれています。これは、バケーションレンタルマーケットプレイスをモデル化したもので、ユーザーとホスト、物件リストと目的地、予約と支払い、レビューとサポートログ、クリックストリームアクティビティを網羅するテーブルが含まれています。
このデータセットを使用すると、独自のデータをロードせずに、データエンジニアリング パイプライン、アナリティクス ダッシュボード、機械学習ワークフローを探索できます。
データセットにアクセスする
Wanderbricks データセットはsamplesカタログにプリロードされており、Unity カタログ対応のワークスペースで利用できます。
スキーマ内のすべてのテーブルを一覧表示するには:
SHOW TABLES IN samples.wanderbricks;
特定のテーブルのデータをプレビューするには:
SELECT *
FROM samples.wanderbricks.<table-name>
LIMIT 10;
<table-name> 、調べたいテーブルに置き換えてください。たとえば、 bookingsまたはreviewsなどです。
テーブル
wanderbricksスキーマには以下のテーブルが含まれます。完全なリストについては、 SHOW TABLES IN samples.wanderbricksを実行してください。
テーブル | 説明 |
|---|---|
| 名前、電子メール、国、ユーザー タイプなどのユーザー プロファイル。 |
| 物件情報にリンクされたホストのプロフィール(アカウント情報や連絡先情報を含む)。 |
| 物件情報には、物件名、種類、価格、所在地などの詳細情報が含まれます。 |
| チェックイン/チェックアウト日、宿泊人数、合計金額、ステータスなどの予約記録。 |
| 支払い方法、金額、ステータス、予約参照番号を含む支払い記録。 |
| 変更データキャプチャ ( CDC ) パイプラインの予約状態変更記録。 |
| 物件に対するユーザーレビュー。評価、コメント、およびソフト削除を示す |
| デバイスと参照元に関するネストされたメタデータを含む、ユーザーアクティビティイベント(閲覧、クリック、検索、フィルタ)。 |
| ページビューイベントは、ユーザーとプロパティに関連付けられています。 |
| 送信者や感情などを含む、ネストされたメッセージの配列を含むサポートチケットログ。 |
| 物件情報に記載されている、目的地名と説明。 |
プライマリテーブルの関係
以下の図は、ユーザー、予約、宿泊施設、および関連テーブル間のつながりを示しています。

-
ユーザーとホスト
users旅行者とビジネス顧客を代表する。hosts不動産所有者および運営者を代表する。
-
宿泊施設と目的地
propertiesの各行は、ホストが所有するリストです。propertiesリストの場所をモデル化するために、destinationsへのリンクを作成します。
-
予約と支払い
bookings旅行者(user_id)を宿泊施設(property_id)に接続します。paymentsまた、booking_updatesbooking_idを参照して、財務取引とステータス変更を記録します。
-
行動と経験
clickstreamまた、page_viewsユーザーがリストを閲覧し、操作する方法を追跡します。reviews宿泊後のユーザーおよび宿泊施設からのフィードバックを収集します。customer_support_logs記録は、ユーザーに関連付けられたインタラクションをサポートします。
クエリ例
次の例は、Wanderbricks データセットをクエリする方法を示しています。
ユーザー、予約、宿泊施設に参加しましょう
ゲストと宿泊施設の詳細を含む最近の予約履歴を表示する:
- SQL
- Python
SELECT
u.name AS guest_name,
p.title AS property_title,
b.check_in,
b.check_out,
b.total_amount,
b.status
FROM samples.wanderbricks.bookings AS b
JOIN samples.wanderbricks.users AS u
ON b.user_id = u.user_id
JOIN samples.wanderbricks.properties AS p
ON b.property_id = p.property_id
ORDER BY b.check_in DESC
LIMIT 10;
bookings_df = spark.read.table("samples.wanderbricks.bookings")
users_df = spark.read.table("samples.wanderbricks.users")
properties_df = spark.read.table("samples.wanderbricks.properties")
result_df = (
bookings_df
.join(users_df, bookings_df.user_id == users_df.user_id)
.join(properties_df, bookings_df.property_id == properties_df.property_id)
.select(
users_df.name.alias("guest_name"),
properties_df.title.alias("property_title"),
bookings_df.check_in,
bookings_df.check_out,
bookings_df.total_amount,
bookings_df.status
)
.orderBy(bookings_df.check_in.desc())
.limit(10)
)
display(result_df)
デバイス別にクリックストリームイベントを分析する
イベントの種類とデバイス別にエンゲージメントを要約します。
- SQL
- Python
SELECT
metadata.device AS device_type,
event,
COUNT(*) AS event_count
FROM samples.wanderbricks.clickstream
GROUP BY metadata.device, event
ORDER BY event_count DESC;
from pyspark.sql.functions import col, count
clickstream_df = spark.read.table("samples.wanderbricks.clickstream")
result_df = (
clickstream_df
.groupBy(col("metadata.device").alias("device_type"), col("event"))
.agg(count("*").alias("event_count"))
.orderBy(col("event_count").desc())
)
display(result_df)
物件ごとのコンピュートの平均評価
十分なレビュー数があり、評価の高い物件を探しましょう。
- SQL
- Python
SELECT
p.title AS property_title,
p.property_type,
ROUND(AVG(r.rating), 2) AS avg_rating,
COUNT(r.rating) AS review_count
FROM samples.wanderbricks.properties AS p
JOIN samples.wanderbricks.reviews AS r
ON p.property_id = r.property_id
WHERE r.is_deleted = false
GROUP BY p.title, p.property_type
HAVING COUNT(r.rating) >= 5
ORDER BY avg_rating DESC
LIMIT 10;
from pyspark.sql.functions import avg, count, round as pyspark_round, col
properties_df = spark.read.table("samples.wanderbricks.properties")
reviews_df = spark.read.table("samples.wanderbricks.reviews")
result_df = (
properties_df
.join(reviews_df, properties_df.property_id == reviews_df.property_id)
.where(reviews_df.is_deleted == False)
.groupBy(
properties_df.title.alias("property_title"),
properties_df.property_type
)
.agg(
pyspark_round(avg(reviews_df.rating), 2).alias("avg_rating"),
count(reviews_df.rating).alias("review_count")
)
.filter(col("review_count") >= 5)
.orderBy(col("avg_rating").desc())
.limit(10)
)
display(result_df)