本文通过一个完整的示例,帮助您快速了解如何在EMR Serverless Spark中使用DuckDB SQL进行数据分析。示例将演示如何创建DuckDB会话、读取OSS上的CSV数据文件、执行查询分析。
场景说明
假设您是一名数据分析师,需要分析存储在OSS上的电商订单数据。订单数据以CSV格式存储,包含订单ID、客户名称、商品名称、数量、单价和订单日期。您需要完成以下分析任务:
-
查看订单数据的整体情况。
-
统计各商品的销售总额。
示例订单数据(demo.csv)内容如下:
order_id,customer,product,quantity,price,order_date
1001,Alice,Laptop,1,6999.00,2024-01-15
1002,Bob,Wireless Mouse,2,129.00,2024-01-15
1003,Charlie,Mechanical Keyboard,1,459.00,2024-01-16
1004,Alice,Monitor,1,2499.00,2024-01-16
1005,David,Wireless Mouse,3,129.00,2024-01-17
1006,Bob,Laptop,1,6999.00,2024-01-17
1007,Charlie,USB Hub,2,89.00,2024-01-18
1008,Alice,Mechanical Keyboard,1,459.00,2024-01-18
请将示例数据上传至您的OSS存储空间。后续示例中的OSS路径oss://your-bucket/demo/orders.csv请替换为实际路径。
前提条件
-
已创建Serverless Spark工作空间。具体操作,请参见创建工作空间。
-
已开通OSS服务并创建存储空间,且Serverless Spark工作空间的执行角色具备对该存储空间的访问权限。
步骤一:创建DuckDB会话
-
在左侧导航栏,选择。
-
在Spark页面,单击目标工作空间名称。
-
在左侧导航栏,单击会话管理。
-
在会话管理页面,单击DuckDB会话页签。
-
单击创建DuckDB会话,填写会话名称(例如
duckdb-demo),选择部署队列和引擎版本,填写需要的资源配置,单击创建。 -
等待会话状态变为运行中。
更多会话配置说明,请参见管理DuckDB会话。
步骤二:创建DuckDB SQL任务
-
在左侧导航栏,单击数据开发。
-
单击新建任务,在对话框中选择,输入任务名称(例如
orders-analysis),单击确定。 -
在右上角选择已创建的DuckDB会话
duckdb-demo。
步骤三:查看订单数据
在任务编辑器中输入以下SQL语句,读取OSS上的CSV文件并查看数据。请将示例中的OSS路径替换为您的实际路径。
-
查看订单数据全部内容。
SELECT * FROM 'oss://your-bucket/demo/orders.csv';返回结果如下:
order_id
customer
product
quantity
price
order_date
1001
Alice
Laptop
1
6999.00
2024-01-15
1002
Bob
Wireless Mouse
2
129.00
2024-01-15
1003
Charlie
Mechanical Keyboard
1
459.00
2024-01-16
1004
Alice
Monitor
1
2499.00
2024-01-16
1005
David
Wireless Mouse
3
129.00
2024-01-17
1006
Bob
Laptop
1
6999.00
2024-01-17
1007
Charlie
USB Hub
2
89.00
2024-01-18
1008
Alice
Mechanical Keyboard
1
459.00
2024-01-18
-
查看数据总量和日期范围。
SELECT count(*) AS total_orders, count(DISTINCT customer) AS total_customers, count(DISTINCT product) AS total_products, min(order_date) AS first_date, max(order_date) AS last_date FROM 'oss://your-bucket/demo/orders.csv';预期返回结果如下:
total_orders
total_customers
total_products
first_date
last_date
8
4
5
2024-01-15
2024-01-18
步骤四:分析订单数据
-
统计各商品的销售总额,并按销售额降序排列。
SELECT product AS product_name, sum(quantity) AS total_qty, sum(quantity * price) AS total_amount FROM 'oss://your-bucket/demo/orders.csv' GROUP BY product ORDER BY total_amount DESC;预期返回结果如下:
product_name
total_qty
total_amount
Laptop
2
13998.00
Monitor
1
2499.00
Mechanical Keyboard
2
918.00
Wireless Mouse
5
645.00
USB Hub
2
178.00
-
统计各客户的消费情况。
SELECT customer AS customer_name, count(*) AS order_count, sum(quantity * price) AS total_spent FROM 'oss://your-bucket/demo/orders.csv' GROUP BY customer ORDER BY total_spent DESC;预期返回结果如下:
customer_name
order_count
total_spent
Alice
3
9957.00
Bob
2
7257.00
Charlie
2
637.00
David
1
387.00
后续步骤
-
了解DuckDB SQL开发的完整功能,请参见DuckDB SQL开发。
-
了解DuckDB会话的详细配置和管理,请参见管理DuckDB会话。
-
了解数据目录的管理和使用,请参见管理数据目录。
-
DuckDB更多功能使用,请参考DuckDB的官方文档。