Condividi tramite


Set di dati Wanderbricks

Lo wanderbricks schema nel samples catalogo contiene un set di dati simulato della piattaforma di prenotazione viaggi. Modella un marketplace per le vacanze, con tabelle che coprono utenti e host, elenchi di proprietà e destinazioni, prenotazioni e pagamenti, revisioni e log di supporto e attività clickstream.

Usare questo set di dati per esplorare pipeline di ingegneria dei dati, dashboard di analisi e flussi di lavoro di Machine Learning senza caricare dati personalizzati.

Accedere al set di dati

Il set di dati Wanderbricks è precaricato nel catalogo samples ed è disponibile nelle aree di lavoro con Unity Catalog abilitato.

Per elencare tutte le tabelle nello schema:

SQL

SHOW TABLES IN samples.wanderbricks;

Python

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

Per visualizzare in anteprima i dati in una tabella specifica:

SQL

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

Python

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

Sostituire <table-name> con la tabella da esplorare, ad esempio bookings o reviews.

Tables

Lo wanderbricks schema include le tabelle seguenti. Eseguire SHOW TABLES IN samples.wanderbricks per l'elenco completo.

Tabella Descrizione
users Profili utente, tra cui nome, posta elettronica, paese o area geografica e tipo di utente.
hosts Profili host collegati alle liste di proprietà, inclusi i dettagli dell'account e del contatto.
properties Elenchi di proprietà con dettagli come titolo, tipo, prezzo e destinazione.
bookings Record di prenotazione con date di check-in/check-out, conteggi degli ospiti, importi totali e stato.
payments Record di pagamento con metodi, importo, stato e riferimenti di prenotazione.
booking_updates Record di modifica dello stato di prenotazione per le pipeline di Change Data Capture (CDC).
reviews Le recensioni degli utenti sulle proprietà, incluse valutazioni, commenti e un is_deleted flag per le eliminazioni temporanee.
clickstream Eventi di attività utente (visualizzazioni, clic, ricerche, filtri) con metadati annidati per il dispositivo e referrer.
page_views Eventi di visualizzazione pagina associati a utenti e proprietà.
customer_support_logs Supportare i log dei ticket con matrici annidate di messaggi, tra cui mittente e sentiment.
destinations Posizioni di destinazione con nomi e descrizioni, a cui fanno riferimento elenchi di proprietà.

Relazioni tra tabelle primarie

Il diagramma seguente illustra le connessioni tra utenti, prenotazioni, proprietà e tabelle correlate.

Diagramma delle relazioni tra tabelle primarie di Wanderbricks che mostra le connessioni tra utenti, prenotazioni, proprietà e tabelle correlate.

  • Utenti e host
    • users rappresenta i viaggiatori e i clienti aziendali.
    • hosts rappresenta i proprietari e gli operatori delle proprietà.
  • Proprietà e destinazioni
    • Ogni riga in properties è un elenco di proprietà di un host.
    • properties si collega a destinations per modellare dove si trova l'elenco.
  • Prenotazioni e pagamenti
    • bookings connette i viaggiatori (user_id) alle proprietà (property_id).
    • payments e booking_updates riferimento booking_id per acquisire le transazioni finanziarie e le modifiche dello stato.
  • Comportamento ed esperienza
    • clickstream e page_views tengono traccia del modo in cui gli utenti esplorano e interagiscono con le inserzioni.
    • reviews raccoglie il feedback post-soggiorno da parte dell'utente e della proprietà.
    • customer_support_logs i record supportano le interazioni legate a un utente.

Interrogazioni di esempio

Gli esempi seguenti illustrano come eseguire query sul set di dati Wanderbricks.

Aggiungere utenti, prenotazioni e proprietà

Restituisce prenotazioni recenti con i dettagli degli ospiti e delle proprietà:

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)

Analizzare gli eventi clickstream in base al dispositivo

Riepilogare l'engagement in base al tipo di evento e al 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)

Calcolare le valutazioni medie per ogni proprietà

Trova le proprietà con la valutazione più alta che hanno un numero sufficiente di recensioni.

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)