Wanderbricks 데이터 세트

wanderbricks 카탈로그의 samples 스키마에는 시뮬레이션된 여행 예약 플랫폼 데이터 세트가 포함되어 있습니다. 휴가 숙소 임대 마켓플레이스를 모델로 하며, 이는 사용자 및 호스트, 부동산 목록 및 목적지, 예약 및 결제, 리뷰 및 지원 로그, 클릭스트림 활동을 포괄하는 테이블로 구성되어 있습니다.

이 데이터 세트를 사용하여 사용자 고유의 데이터를 로드하지 않고도 데이터 엔지니어링 파이프라인, 분석 대시보드 및 기계 학습 워크플로를 탐색할 수 있습니다.

데이터 세트 액세스

Wanderbricks 데이터 세트는 카탈로그에 samples 미리 로드되며 Unity 카탈로그 사용 작업 영역에서 사용할 수 있습니다.

스키마의 모든 테이블을 나열하려면 다음을 수행합니다.

SQL

SHOW TABLES IN samples.wanderbricks;

파이썬

display(spark.sql("SHOW TABLES IN samples.wanderbricks"))

특정 테이블의 데이터를 미리 보려면 다음을 수행합니다.

SQL

SELECT *
FROM samples.wanderbricks.<table-name>
LIMIT 10;

파이썬

display(spark.read.table("samples.wanderbricks.<table-name>").limit(10))

<table-name>을 탐색하려는 테이블로 바꾸세요. 예를 들면 bookings 또는 reviews입니다.

Tables

스키마에는 wanderbricks 다음 테이블이 포함됩니다. 전체 목록을 보려면 SHOW TABLES IN samples.wanderbricks을(를) 실행하세요.

테이블 설명
users 이름, 전자 메일, 국가 또는 지역 및 사용자 유형을 포함한 사용자 프로필입니다.
hosts 호스트 프로필은 계정 및 연락처 세부 정보와 함께 속성 목록에 연결되어 있습니다.
properties 제목, 유형, 가격 및 목적지와 같은 세부 정보가 포함된 부동산 목록입니다.
bookings 체크 인/체크 아웃 날짜, 게스트 수, 총 금액 및 상태가 포함된 예약 레코드입니다.
payments 방법, 금액, 상태 및 예약 참조가 있는 결제 레코드입니다.
booking_updates 변경 데이터 캡처(CDC) 파이프라인을 위한 예약 상태 변경 기록입니다.
reviews 평점, 메모 및 is_deleted 일시 삭제 플래그를 비롯한 속성에 대한 사용자 리뷰입니다.
clickstream 디바이스 및 참조자에 대한 중첩 메타데이터가 있는 사용자 활동 이벤트(보기, 클릭, 검색, 필터).
page_views 사용자 및 속성에 연결된 페이지 보기 이벤트입니다.
customer_support_logs 보낸 사람 및 감정을 포함하여 메시지의 중첩된 배열을 사용하여 티켓 로그를 지원합니다.
destinations 속성 목록에서 참조하는 대상 위치로, 이름 및 설명이 포함되어 있습니다.

기본 테이블 관계

다음 다이어그램은 사용자, 예약, 속성 및 관련 테이블 간의 연결을 보여 줍니다.

Wanderbricks 기본 테이블 관계 다이어그램은 사용자, 예약, 속성 및 관련 테이블 간의 연결을 보여 줍니다.

  • 사용자 및 호스트
    • users 는 여행자 및 비즈니스 고객을 나타냅니다.
    • hosts 는 속성 소유자 및 연산자를 나타냅니다.
  • 속성 및 대상
    • 각 행 properties 은 호스트가 소유한 목록입니다.
    • propertiesdestinations는 목록이 위치한 모델을 나타내는 링크입니다.
  • 예약 및 결제
    • bookings는 여행자()를 속성(user_idproperty_id)에 연결합니다.
    • paymentsbooking_updates 금융 거래 및 상태 변경을 캡처하기 위한 참조 booking_id 입니다.
  • 동작 및 환경
    • clickstreampage_views는 사용자가 목록을 검색하고 상호 작용하는 방식을 추적합니다.
    • reviews 는 사용자 및 속성에 의한 체류 후 피드백을 캡처합니다.
    • customer_support_logs 레코드는 사용자에 연결된 상호 작용을 지원합니다.

예제 쿼리

다음 예제에서는 Wanderbricks 데이터 세트를 쿼리하는 방법을 보여 줍니다.

사용자, 예약 및 속성 통합

게스트 및 숙박 시설 세부 정보와 함께 최근 예약을 반환합니다.

SQL

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

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

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)