ShopALot
收藏ShopALot 数据集概述
数据集概述
ShopALot 是一个用于学习 AsterixDB 和 SQL++ 的电子商务数据集。该数据集包含多个数据集,用于存储用户、商店、产品、订单和库存信息。
数据集结构
数据集列表
-
Users
- 存储用户信息,包括用户ID、姓名、电子邮件和电话号码。
- 主键:
user_id
-
Stores
- 存储商店信息,包括地址、类别和地理位置数据。
- 主键:
store_id
-
Products
- 存储产品信息,包括类别、名称和描述。
- 主键:
product_id
-
Orders
- 存储订单信息,包括订单ID、用户ID、商店ID、总价和购买的商品。
- 主键:
order_id
-
StockedBy
- 跟踪每个商店的产品库存情况,包括可用数量。
- 主键:
(product_id, store_id)
数据加载
数据通过 JSON 文件加载到 AsterixDB 中。加载命令如下:
Mac/Linux 示例路径
sql LOAD DATASET ShopALot.Users USING localfs (("path"="localhost:///home/user/ShopALot/users.json"), ("format"="json")); LOAD DATASET ShopALot.Stores USING localfs (("path"="localhost:///home/user/ShopALot/stores.json"), ("format"="json")); LOAD DATASET ShopALot.Products USING localfs (("path"="localhost:///home/user/ShopALot/products.json"), ("format"="json")); LOAD DATASET ShopALot.Orders USING localfs (("path"="localhost:///home/user/ShopALot/orders.json"), ("format"="json")); LOAD DATASET ShopALot.StockedBy USING localfs (("path"="localhost:///home/user/ShopALot/stockedby.json"), ("format"="json"));
Windows 示例路径
sql LOAD DATASET ShopALot.Users USING localfs (("path"="localhost:///C:/Users/YourUsername/ShopALot/users.json"), ("format"="json")); LOAD DATASET ShopALot.Stores USING localfs (("path"="localhost:///C:/Users/YourUsername/ShopALot/stores.json"), ("format"="json")); LOAD DATASET ShopALot.Products USING localfs (("path"="localhost:///C:/Users/YourUsername/ShopALot/products.json"), ("format"="json")); LOAD DATASET ShopALot.Orders USING localfs (("path"="localhost:///C:/Users/YourUsername/ShopALot/orders.json"), ("format"="json")); LOAD DATASET ShopALot.StockedBy USING localfs (("path"="localhost:///C:/Users/YourUsername/ShopALot/stockedby.json"), ("format"="json"));
数据验证
加载数据后,可以使用以下查询验证每个数据集中的记录数量:
sql SELECT VALUE { "usersCount": (SELECT VALUE COUNT() FROM Users), "storesCount": (SELECT VALUE COUNT() FROM Stores), "productsCount": (SELECT VALUE COUNT() FROM Products), "ordersCount": (SELECT VALUE COUNT() FROM Orders), "stockedByCount": (SELECT VALUE COUNT(*) FROM StockedBy) };
数据查询示例
以下是一些用于查询 ShopALot 数据集的示例 SQL++ 查询:
查询示例
-
查询1 sql SELECT * FROM Products WHERE list_price > 10;
- 检索
list_price大于 10 的所有产品。
- 检索
-
查询2 sql SELECT VALUE name FROM Products WHERE list_price > 10;
- 检索
list_price大于 10 的产品名称。
- 检索
-
查询3 sql SELECT VALUE name FROM Products WHERE list_price > 10 LIMIT 10;
- 检索
list_price大于 10 的前 10 个产品名称。
- 检索
-
查询4 sql SELECT VALUE name FROM Products WHERE list_price > 10 LIMIT 10 OFFSET 5;
- 检索
list_price大于 10 的第 6 到第 15 个产品名称。
- 检索
-
查询5 sql SELECT user_id, email FROM Users WHERE email LIKE "%gmail.com" LIMIT 3;
- 检索电子邮件包含 "gmail.com" 的前 3 个用户的
user_id和email。
- 检索电子邮件包含 "gmail.com" 的前 3 个用户的
-
查询6 sql SELECT VALUE product_id FROM StockedBy WHERE store_id = "C4N2L";
- 检索商店 ID 为 "C4N2L" 的所有产品的
product_id。
- 检索商店 ID 为 "C4N2L" 的所有产品的
-
查询7 sql SELECT VALUE { "StoreName": s.name, "Quantity": sb.qty } FROM StockedBy sb, Stores s WHERE sb.store_id = s.store_id AND sb.store_id = "C4N2L";
- 检索商店 ID 为 "C4N2L" 的所有产品的商店名称和库存数量。
-
查询8 sql SELECT s.name AS StoreName, sb.qty AS Quantity FROM StockedBy sb, Stores s WHERE sb.store_id = s.store_id AND sb.store_id = "C4N2L";
- 检索商店 ID 为 "C4N2L" 的所有产品的商店名称和库存数量。
-
查询9 sql SELECT VALUE { "StoreName": s.name, "Stocks": (SELECT VALUE sb.product_id FROM StockedBy sb WHERE sb.store_id = s.store_id) } FROM Stores s WHERE s.store_id = "C4N2L";
- 检索商店 ID 为 "C4N2L" 的所有产品的商店名称和产品 ID 列表。
-
查询10 sql SELECT o.order_id, o.user_id, i.product_id AS product, i.qty AS quantity FROM Orders o UNNEST o.items i WHERE i.qty > 30;
- 检索订单中商品数量大于 30 的订单 ID、用户 ID、产品 ID 和商品数量。
-
查询11 sql SELECT DISTINCT VALUE o.user_id FROM Orders o WHERE SOME i IN o.items SATISFIES i.selling_price >= 80.00;
- 检索至少有一个商品售价大于等于 80.00 的用户的唯一用户 ID。
-
查询12 sql SELECT DISTINCT VALUE o.user_id FROM Orders o WHERE EVERY i IN o.items SATISFIES i.selling_price >= 70.00;
- 检索所有商品售价都大于等于 70.00 的用户的唯一用户 ID。
-
查询13 sql SELECT DISTINCT VALUE o.user_id FROM Orders o WHERE array_count(o.items) > 0 AND (EVERY i IN o.items SATISFIES i.selling_price >= 70.00);
- 检索订单中所有商品售价都大于等于 70.00 的用户的唯一用户 ID。
-
查询14 sql SELECT u.name FROM Users u WHERE u.user_id IN ( SELECT DISTINCT VALUE o.user_id FROM Orders o WHERE EVERY i IN o.items SATISFIES i.selling_price >= 70.00 AND ARRAY_COUNT(o.items) > 0 );
- 检索订单中所有商品售价都大于等于 70.00 的用户的姓名。
-
查询15 sql SELECT o.order_id, o.time_placed, o.time_fulfilled, o.total_price, o.user_id FROM Orders o WHERE total_price > 150.00 AND o.time_fulfilled IS MISSING;
- 检索总价大于 150.00 且
time_fulfilled为空的订单的订单 ID、下单时间、完成时间、总价和用户 ID。
- 检索总价大于 150.00 且
-
查询16 sql SELECT VALUE { "order_id": o.order_id, "time_placed": o.time_placed, "time_fulfilled": CASE WHEN o.time_fulfilled IS MISSING THEN "TBD" ELSE o.time_fulfilled END, "total_price": o.total_price, "user_id": o.user_id } FROM Orders o WHERE user_id = "QREX9" LIMIT 3;
- 检索用户 ID 为 "QREX9" 的前 3 个订单的订单 ID、下单时间、完成时间、总价和用户 ID。如果
time_fulfilled为空,则显示 "TBD"。
- 检索用户 ID 为 "QREX9" 的前 3 个订单的订单 ID、下单时间、完成时间、总价和用户 ID。如果
-
查询17 sql SELECT name, total_price FROM Orders ORDER BY total_price DESC;
- 按总价降序排列,检索订单的名称和总价。
-
查询18 sql SELECT u.name, o.order_id FROM Users AS u, Orders AS o WHERE u.user_id = o.user_id;
- 检索用户名称和订单 ID,条件是用户 ID 匹配。
-
查询19 sql SELECT u.email, o.time_placed FROM Users u JOIN Orders o ON u.user_id = o.user_id WHERE o.total_price > 200 ORDER BY o.total_price DESC LIMIT 3;
- 检索总价大于 200 的前 3 个订单的用户电子邮件和下单时间,按总价降序排列。
-
查询20 sql SELECT * FROM Stores s GROUP BY s.address.city;
- 按城市分组,检索商店信息。
-
查询21 sql SELECT category, COUNT(*) AS total_products FROM Products GROUP BY category;
- 按类别分组,检索每个类别的产品总数。
-
查询22 sql SELECT u.email, ARRAY_COUNT(o.items) AS order_size FROM Users AS u, Orders AS o WHERE u.user_id = o.user_id ORDER BY order_size DESC LIMIT 3;
- 检索订单中商品数量最多的前 3 个用户的电子邮件和订单大小,按订单大小降序排列。
-
查询23 sql ARRAY_MAX( (SELECT VALUE list_price FROM Products WHERE is_number(list_price)) );
- 检索产品中
list_price的最大值。
- 检索产品中
-
查询24 sql SELECT s.address.state, COUNT(*) AS cnt FROM Stores AS s, Orders AS o WHERE s.store_id = o.store_id GROUP BY s.address.state;
- 按州分组,检索每个州的订单总数。
-
查询25 sql SELECT s.address.state, g FROM Stores AS s, Orders AS o WHERE s.store_id = o.store_id GROUP BY s.address.state GROUP AS g;
- 按州分组,检索每个州的商店和订单信息。
-
查询26 sql FROM Stores AS s, Orders AS o WHERE s.store_id = o.store_id GROUP BY s.address.state GROUP AS g SELECT s.address.state, (SELECT g.s.store_id, g.s.name, g.o.order_id FROM g) AS so_pairs;
- 按州分组,检索每个州的商店 ID、商店名称和订单 ID 列表。




