Partilhar via


Conjunto de dados Wanderbricks

O wanderbricks esquema no samples catálogo contém um conjunto de dados simulado da plataforma de reservas de viagens. Modela um mercado de aluguer de casas de férias, com tabelas que cobrem utilizadores e anfitriões, listagens de propriedades e destinos, reservas e pagamentos, avaliações e registos de apoio, e fluxo de cliques.

Use este conjunto de dados para explorar pipelines de engenharia de dados, painéis de análise e fluxos de trabalho de aprendizagem automática sem carregar os seus próprios dados.

Aceder ao conjunto de dados

O conjunto de dados Wanderbricks está pré-carregado no samples catálogo e está disponível em espaços de trabalho habilitados pelo Unity Catalog.

Para listar todas as tabelas no esquema:

SQL

SHOW TABLES IN samples.wanderbricks;

Python

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

Para pré-visualizar dados numa tabela específica:

SQL

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

Python

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

Substitua <table-name> pela tabela que quer explorar, por exemplo bookings ou reviews.

Tables

O wanderbricks esquema inclui as seguintes tabelas. Execute SHOW TABLES IN samples.wanderbricks para a lista completa.

Table Descrição
users Perfis de utilizador incluindo nome, email, país ou região, e tipo de utilizador.
hosts Perfis de anfitriões ligados a anúncios de propriedades, incluindo dados de conta e contactos.
properties Anúncios de propriedades com detalhes como título, tipo, preço e destino.
bookings Registos de reservas com datas de check-in/check-out, número de convidados, montantes totais e estado.
payments Registos de pagamento com método, montante, estado e referências de reserva.
booking_updates Registo de registos de alterações de estado para pipelines de captura de dados de alteração (CDC).
reviews Avaliações dos utilizadores sobre propriedades, incluindo classificações, comentários e um is_deleted indicador para remoções suaves.
clickstream Eventos das atividades dos utilizadores (visualizações, cliques, pesquisas, filtros) com metadados aninhados para dispositivo e referência.
page_views Eventos de visualização de página ligados a utilizadores e propriedades.
customer_support_logs Registos de pedidos de suporte com arrays aninhados de mensagens, incluindo remetente e estado de espírito.
destinations Locais de destino com nomes e descrições, referenciados por anúncios de propriedades.

Relações primárias de tabelas

O diagrama seguinte mostra as ligações entre utilizadores, reservas, propriedades e tabelas relacionadas.

Diagrama de relações das tabelas primárias do Wanderbrick mostrando ligações entre utilizadores, reservas, propriedades e tabelas relacionadas.

  • Utilizadores e anfitriões
    • users representa viajantes e clientes empresariais.
    • hosts Representa proprietários e operadores de imóveis.
  • Propriedades e destinos
    • Cada linha em properties é um anúncio pertencente a um anfitrião.
    • properties liga a destinations para modelar onde o anúncio está localizado.
  • Reservas e pagamentos
    • bookings liga viajantes (user_id) a propriedades (property_id).
    • payments e booking_updates fazem referência a booking_id para capturar transações financeiras e alterações de estado.
  • Comportamento e experiência
    • clickstream e page_views acompanhar como os utilizadores navegam e interagem com os anúncios.
    • reviews Recolhe o feedback pós-estadia por utilizador e propriedade.
    • customer_support_logs os registos suportam interações ligadas a um utilizador.

Exemplos de consultas

Os exemplos seguintes mostram como consultar o conjunto de dados Wanderbricks.

Junte-se a utilizadores, reservas e propriedades

Devolve as reservas recentes com os detalhes dos hóspedes e da propriedade:

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;

Python

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)

Analisar eventos de clickstream por dispositivo

Resuma o envolvimento por tipo de evento e dispositivo:

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;

Python

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)

Calcular as avaliações médias por propriedade

Encontre as propriedades mais bem classificadas com volume suficiente de avaliações:

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;

Python

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)