{
  "format": "dataset-manifest/1",
  "slug": "hospitality-event-logs",
  "version": 1,
  "seed": "hospitality-event-logs:1",
  "spec": {
    "format": "dataset/1",
    "slug": "hospitality-event-logs",
    "name": "Hospitality Event Logs",
    "tagline": "Guest records, reservations, payments, dining orders, and amenities usage from a hospitality event management system.",
    "description": "Guests at a hotel experience a variety of services from dining options to room bookings and event management. This dataset revolves around customer reservations, payments, dining orders, and amenity usage to provide insights into guest behavior and preferences. The tables model transactions related to vehicle rentals, room services, and dining orders, which can fluctuate based on factors such as promotions, peak weekends, and special events. For instance, dining orders often peak during weekends, while certain promotions and refund activities occur less frequently, offering a dynamic aspect to the hotel's operational data. This synthetic dataset can be utilized for analytics and ETL pipeline demonstrations, allowing developers to practice SQL queries and gain insights into hospitality management. The relationships between the tables provide a comprehensive view of the guest journey, from booking a room to dining experiences, and the overall service usage.",
    "domain": "hospitality",
    "shape": "event-log",
    "useCases": [
      "analytics-demo",
      "etl-pipelines"
    ],
    "keywords": [
      "hotel",
      "reservation",
      "guest",
      "dining",
      "services",
      "payments",
      "amenities",
      "analytics",
      "ETL"
    ],
    "locale": "en",
    "license": "CC0-1.0",
    "version": 1,
    "tables": {
      "guests": {
        "description": "Each row represents a guest who has stayed at the hotel, linking to their reservations and services used.",
        "rows": 500,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each guest."
          },
          "full_name": {
            "kind": "fullName",
            "description": "Full name of the guest."
          },
          "email": {
            "kind": "email",
            "from": "full_name",
            "description": "Email address of the guest."
          },
          "phone": {
            "kind": "phone",
            "description": "Contact number for the guest.",
            "nullable": true
          },
          "country": {
            "kind": "country",
            "description": "Country of residence for the guest.",
            "nullable": true
          }
        }
      },
      "reservations": {
        "description": "Each row details a specific reservation made by a guest, linking to the guest and the services selected.",
        "rows": 400,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each reservation."
          },
          "guest_id": {
            "kind": "fk",
            "ref": "guests.id",
            "description": "Reference to the guest making the reservation."
          },
          "check_in": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Check-in date for the reservation.",
            "trend": "seasonal"
          },
          "check_out": {
            "kind": "date",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Check-out date for the reservation.",
            "nullable": true,
            "when": {
              "column": "room_type",
              "in": [
                "double",
                "suite"
              ]
            },
            "trend": "seasonal"
          },
          "room_type": {
            "kind": "enum",
            "values": [
              "single",
              "double",
              "suite"
            ],
            "description": "Type of room reserved."
          }
        }
      },
      "payments": {
        "description": "Each row represents a payment transaction linked to a reservation, detailing amounts and payment status.",
        "rows": 400,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each payment."
          },
          "reservation_id": {
            "kind": "fk",
            "ref": "reservations.id",
            "description": "Reference to the reservation associated with the payment."
          },
          "amount": {
            "kind": "decimal",
            "min": 50,
            "max": 1000,
            "scale": 2,
            "description": "Total amount paid for the reservation."
          },
          "payment_status": {
            "kind": "enum",
            "values": [
              "completed",
              "pending",
              "refunded"
            ],
            "description": "Status of the payment transaction."
          },
          "payment_date": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Date and time when the payment was made.",
            "nullable": true,
            "when": {
              "column": "payment_status",
              "in": [
                "completed",
                "refunded"
              ]
            },
            "dayProfile": "waking"
          }
        }
      },
      "dining_orders": {
        "description": "Each row represents a dining order made by a guest during their stay, linked to the reservation.",
        "rows": 600,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each dining order."
          },
          "reservation_id": {
            "kind": "fk",
            "ref": "reservations.id",
            "description": "Reference to the reservation associated with the dining order."
          },
          "order_amount": {
            "kind": "decimal",
            "min": 10,
            "max": 500,
            "scale": 2,
            "description": "Total amount for the dining order.",
            "nullable": true
          },
          "order_date": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Date and time when the order was placed.",
            "dayProfile": "waking"
          },
          "menu_item": {
            "kind": "words",
            "description": "Description of the menu item ordered.",
            "nullable": true
          }
        }
      },
      "amenities_usage": {
        "description": "Each row details the usage of hotel amenities by guests, linked to their reservations.",
        "rows": 300,
        "columns": {
          "id": {
            "kind": "pk",
            "description": "Unique identifier for each amenities usage record."
          },
          "reservation_id": {
            "kind": "fk",
            "ref": "reservations.id",
            "description": "Reference to the reservation associated with the amenities usage."
          },
          "amenity_type": {
            "kind": "enum",
            "values": [
              "spa",
              "gym",
              "pool",
              "parking"
            ],
            "description": "Type of amenity used."
          },
          "usage_date": {
            "kind": "datetime",
            "from": "2023-01-01",
            "to": "2023-12-31",
            "description": "Date and time when the amenity was used.",
            "nullable": true,
            "when": {
              "column": "amenity_type",
              "in": [
                "spa",
                "gym",
                "pool"
              ]
            },
            "dayProfile": "business"
          },
          "duration_minutes": {
            "kind": "int",
            "min": 5,
            "max": 180,
            "description": "Duration of usage in minutes.",
            "nullable": true
          }
        }
      }
    },
    "structure": "multi-table",
    "traits": [
      "timestamped",
      "monetary",
      "categorical",
      "nullable"
    ],
    "analysisQuestions": [
      "What are the peak days for dining orders and how do they compare to room bookings?",
      "How does the payment status affect the overall revenue of the hotel?",
      "Which amenities are most frequently used by guests and do certain room types influence this?",
      "What trends can be observed in guest reservations over the year?",
      "Are there any noticeable patterns in refunds based on specific room types?"
    ],
    "suggestedQueries": [
      {
        "title": "Join guests and reservations",
        "sql": "SELECT g.full_name, r.check_in, r.check_out FROM guests g JOIN reservations r ON g.id = r.guest_id;",
        "dialect": "postgres"
      },
      {
        "title": "Aggregate dining orders by date",
        "sql": "SELECT order_date, SUM(order_amount) as total_sales FROM dining_orders GROUP BY order_date;",
        "dialect": "postgres"
      },
      {
        "title": "Count amenities usage by type",
        "sql": "SELECT amenity_type, COUNT(*) as usage_count FROM amenities_usage GROUP BY amenity_type;",
        "dialect": "postgres"
      },
      {
        "title": "Average payment amount by room type",
        "sql": "SELECT r.room_type, AVG(p.amount) as average_payment FROM payments p JOIN reservations r ON p.reservation_id = r.id GROUP BY r.room_type;",
        "dialect": "postgres"
      },
      {
        "title": "Find guests with multiple reservations",
        "sql": "SELECT g.full_name, COUNT(r.id) as reservation_count FROM guests g JOIN reservations r ON g.id = r.guest_id GROUP BY g.id HAVING COUNT(r.id) > 1;",
        "dialect": "postgres"
      }
    ],
    "usageScenarios": [
      {
        "title": "Hotel Management Analytics",
        "body": "Hotel managers can use this dataset to analyze guest behavior, identify peak times for reservations and dining orders, and optimize staffing and resources accordingly. By understanding trends, they can make informed decisions on promotions and pricing strategies."
      },
      {
        "title": "Revenue Management",
        "body": "Revenue managers can leverage the dataset to explore payment patterns, monitor refund activities, and assess the impact of different room types on overall revenue. This insight helps in adjusting pricing and maximizing profitability."
      },
      {
        "title": "Guest Experience Enhancement",
        "body": "Customer experience teams can analyze the usage of amenities and dining orders to enhance guest satisfaction. By identifying popular amenities, they can tailor marketing efforts and improve service offerings based on guest preferences."
      },
      {
        "title": "Operational Efficiency",
        "body": "Operations teams can utilize this dataset to track various hotel services and their usage over time, enabling them to streamline operations, manage inventory effectively, and improve overall service delivery."
      }
    ]
  },
  "counts": {
    "guests": 500,
    "reservations": 400,
    "amenities_usage": 300,
    "dining_orders": 600,
    "payments": 400
  },
  "stats": {
    "guests": {
      "rows": 500,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 500,
          "min": 1,
          "max": 500
        },
        "full_name": {
          "nulls": 0,
          "distinct": 483,
          "min": "Alice Clark",
          "max": "Zoe Walker"
        },
        "email": {
          "nulls": 0,
          "distinct": 490
        },
        "phone": {
          "nulls": 41,
          "distinct": 420
        },
        "country": {
          "nulls": 50,
          "distinct": 43,
          "min": "Argentina",
          "max": "United States"
        }
      }
    },
    "reservations": {
      "rows": 400,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 400,
          "min": 1,
          "max": 400
        },
        "guest_id": {
          "nulls": 0,
          "distinct": 280,
          "min": 2,
          "max": 498
        },
        "check_in": {
          "nulls": 0,
          "distinct": 229,
          "min": "2023-01-01",
          "max": "2023-12-31"
        },
        "check_out": {
          "nulls": 132,
          "distinct": 178,
          "min": "2023-01-01",
          "max": "2023-12-31"
        },
        "room_type": {
          "nulls": 0,
          "distinct": 3,
          "min": "double",
          "max": "suite"
        }
      }
    },
    "payments": {
      "rows": 400,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 400,
          "min": 1,
          "max": 400
        },
        "reservation_id": {
          "nulls": 0,
          "distinct": 254,
          "min": 3,
          "max": 400
        },
        "amount": {
          "nulls": 0,
          "distinct": 399,
          "min": 57.36,
          "max": 998.92
        },
        "payment_status": {
          "nulls": 0,
          "distinct": 3,
          "min": "completed",
          "max": "refunded"
        },
        "payment_date": {
          "nulls": 125,
          "distinct": 275,
          "min": "2023-01-01 21:37:53",
          "max": "2023-12-31 12:14:53"
        }
      }
    },
    "dining_orders": {
      "rows": 600,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 600,
          "min": 1,
          "max": 600
        },
        "reservation_id": {
          "nulls": 0,
          "distinct": 310,
          "min": 1,
          "max": 400
        },
        "order_amount": {
          "nulls": 60,
          "distinct": 539,
          "min": 10.12,
          "max": 499.33
        },
        "order_date": {
          "nulls": 0,
          "distinct": 600,
          "min": "2023-01-01 07:06:03",
          "max": "2023-12-31 01:15:33"
        },
        "menu_item": {
          "nulls": 73,
          "distinct": 526
        }
      }
    },
    "amenities_usage": {
      "rows": 300,
      "columns": {
        "id": {
          "nulls": 0,
          "distinct": 300,
          "min": 1,
          "max": 300
        },
        "reservation_id": {
          "nulls": 0,
          "distinct": 212,
          "min": 1,
          "max": 398
        },
        "amenity_type": {
          "nulls": 0,
          "distinct": 4,
          "min": "gym",
          "max": "spa"
        },
        "usage_date": {
          "nulls": 74,
          "distinct": 226,
          "min": "2023-01-01 18:17:13",
          "max": "2023-12-29 08:01:31"
        },
        "duration_minutes": {
          "nulls": 39,
          "distinct": 138,
          "min": 6,
          "max": 180
        }
      }
    }
  },
  "artifacts": [
    {
      "file": "csv/guests.csv",
      "format": "csv",
      "table": "guests",
      "key": "datasets/hospitality-event-logs/v1/csv/guests.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/csv/guests.csv",
      "bytes": 31908,
      "sha256": "e994d0606d9225eee29a858a35baca40115e7770428435091f99a91bf33a47a0",
      "rows": 500,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/reservations.csv",
      "format": "csv",
      "table": "reservations",
      "key": "datasets/hospitality-event-logs/v1/csv/reservations.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/csv/reservations.csv",
      "bytes": 13591,
      "sha256": "ae526b8481e3ce448d0cc93bf81961d8c46c9319b6420c4f07709dd2b01c9474",
      "rows": 400,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/amenities_usage.csv",
      "format": "csv",
      "table": "amenities_usage",
      "key": "datasets/hospitality-event-logs/v1/csv/amenities_usage.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/csv/amenities_usage.csv",
      "bytes": 9668,
      "sha256": "4489ea60b624403463e013f6a3273d513adbb763b77fec329cadd5aa26dff984",
      "rows": 300,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/dining_orders.csv",
      "format": "csv",
      "table": "dining_orders",
      "key": "datasets/hospitality-event-logs/v1/csv/dining_orders.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/csv/dining_orders.csv",
      "bytes": 35264,
      "sha256": "27414b076c4d329567f73bf86652890cfcbe795cc7a594ca5198e8bdba759ce3",
      "rows": 600,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "csv/payments.csv",
      "format": "csv",
      "table": "payments",
      "key": "datasets/hospitality-event-logs/v1/csv/payments.csv",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/csv/payments.csv",
      "bytes": 15449,
      "sha256": "1b4b1f9a43f5afd55fa382be13733c40655dc11f267a579a379f30826bdf30f5",
      "rows": 400,
      "contentType": "text/csv; charset=utf-8"
    },
    {
      "file": "hospitality-event-logs.json",
      "format": "json",
      "table": null,
      "key": "datasets/hospitality-event-logs/v1/hospitality-event-logs.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/hospitality-event-logs.json",
      "bytes": 355803,
      "sha256": "fc40d802d4cb4b0eeaa7c0ccff67ae9ebdf769e5540afeaa8eb6430ea0ded693",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    },
    {
      "file": "sql/postgres.sql",
      "format": "sql-postgres",
      "table": null,
      "key": "datasets/hospitality-event-logs/v1/sql/postgres.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/sql/postgres.sql",
      "bytes": 144255,
      "sha256": "bb5ddbf143e6f5b978a806dc00f02844bf321ff60ee38a1ff88fe5325d22ab70",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mysql.sql",
      "format": "sql-mysql",
      "table": null,
      "key": "datasets/hospitality-event-logs/v1/sql/mysql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/sql/mysql.sql",
      "bytes": 143673,
      "sha256": "85cc5429504675d3df366d68b96725719334fe0d14cf777bc574b525dfce12b6",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/mssql.sql",
      "format": "sql-mssql",
      "table": null,
      "key": "datasets/hospitality-event-logs/v1/sql/mssql.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/sql/mssql.sql",
      "bytes": 149322,
      "sha256": "c802ee854eefbd25e3be077dcb1750aa23d933ce6faf4bffe757826dab2f88b5",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "sql/sqlite.sql",
      "format": "sql-sqlite",
      "table": null,
      "key": "datasets/hospitality-event-logs/v1/sql/sqlite.sql",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/sql/sqlite.sql",
      "bytes": 143426,
      "sha256": "b776fd3b7000de09a62219ae68be545036f84f39a994a13f1f8a5d8a470bea1b",
      "rows": null,
      "contentType": "application/sql; charset=utf-8"
    },
    {
      "file": "prisma/seed.ts",
      "format": "prisma-seed",
      "table": null,
      "key": "datasets/hospitality-event-logs/v1/prisma/seed.ts",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/prisma/seed.ts",
      "bytes": 291737,
      "sha256": "fdda4c7d428860015c6b3e07a0a7857c08b93c22ce16c75ab2f4af3f4a7df777",
      "rows": null,
      "contentType": "application/typescript; charset=utf-8"
    },
    {
      "file": "django/fixtures.json",
      "format": "django-fixture",
      "table": null,
      "key": "datasets/hospitality-event-logs/v1/django/fixtures.json",
      "url": "https://database-sample-website.s3.eu-north-1.amazonaws.com/datasets/hospitality-event-logs/v1/django/fixtures.json",
      "bytes": 455607,
      "sha256": "f48a5a40560eaf6b718da5d92b339f669155998173eba206db28c6fbf3aa3a02",
      "rows": null,
      "contentType": "application/json; charset=utf-8"
    }
  ],
  "publishedAt": 1788767993487,
  "updatedAt": 1788767993487
}
