本文介绍如何在阿里云EMR Serverless Spark环境中开发SparkSQL任务,并指导您如何访问Spark UI以查看任务详情。
前提条件
创建SQL任务
进入开发页面。
在左侧导航栏,选择
。在Spark页面,单击目标工作空间名称。
在EMR Serverless Spark页面,单击左侧导航栏中的数据开发。
新建任务。
在开发目录页签下,单击
(新建)图标。
在弹出的对话框中,输入名称,类型选择SparkSQL,然后单击确定。
在右上角选择数据目录、数据库和一个已启动的SQL会话实例。
您也可以在下拉列表中选择创建SQL会话,直接创建一个新的SQL会话实例。SQL会话更多介绍,请参见管理SQL会话。
在新建的任务编辑器中输入SQL语句。
示例1:基础SQL操作
以下示例演示了如何创建数据库、切换数据库、创建表、插入数据并执行查询。
create DATABASE test_sql; use test_sql; CREATE TABLE IF NOT EXISTS my_table (id INT, name STRING); INSERT INTO my_table VALUES(1, 'Alice'),(2, 'Bob'); SELECT * FROM my_table WHERE id > 1;
返回信息如下图所示。
示例2:基于CSV的外部表
以下示例演示了如何创建一个基于OSS存储中CSV文件的外部表,并执行查询操作。本示例代码中的Bucket地址(
oss://<bucketname>/user/
)需要根据实际情况修改。创建临时视图。
基于OSS上的CSV文件创建一个临时视图
orders
,用于后续数据分析。视图的字段定义如下:order_id
:订单ID。order_date
:订单日期和时间(例如'2025-07-01 10:00:00'
)。order_category
:商品品类(例如 "数码"、"服饰" 等)。order_revenue
:订单金额。
CREATE TABLE orders ( order_id STRING, -- 订单 ID order_date STRING,-- 订单日期和时间 order_category STRING, -- 商品 SKU ID order_revenue DOUBLE -- 订单金额 ) USING CSV OPTIONS ( path 'oss://<bucketname>/user/', header 'true' );
插入测试数据。
INSERT OVERWRITE TABLE orders VALUES ('o1', '2025-07-01 10:00:00', '数码', 5999.0), ('o2', '2025-07-02 11:30:00', '服饰', 299.0), ('o3', '2025-07-03 14:45:00', '数码', 899.0), ('o4', '2025-07-04 09:15:00', '家居', 99.0), ('o5', '2025-07-05 16:20:00', '数码', 1999.0), ('o6', '2025-07-06 08:00:00', '服饰', 199.0), ('o7', '2025-07-07 12:10:00', '数码', 799.0), ('o8', '2025-07-08 18:30:00', '家居', 59.0), ('o9', '2025-07-09 20:00:00', '数码', 399.0), ('o10', '2025-07-10 07:45:00', '服饰', 599.0), ('o11', '2025-07-11 09:00:00', '数码', 1299.0), ('o12', '2025-07-12 13:20:00', '家居', 159.0), ('o13', '2025-07-13 17:15:00', '服饰', 499.0), ('o14', '2025-07-14 21:30:00', '数码', 999.0), ('o15', '2025-07-15 06:10:00', '家居', 299.0);
执行复杂查询。
基于
orders
表执行一个复杂的查询,统计最近15天内不同品类的销售表现。具体查询内容包括:订单数量:每个品类的订单总数。
总销售额(GMV):每个品类的订单金额总和。
平均订单金额:每个品类的订单金额平均值。
最近一笔订单时间:每个品类的最新订单时间。
SELECT order_category, COUNT(order_id) AS order_count, SUM(order_revenue) AS gmv, AVG(order_revenue) AS avg_order_amount, MAX(order_date) AS latest_order_date FROM orders WHERE CAST(order_date AS TIMESTAMP) BETWEEN '2025-07-01' AND '2025-07-15' GROUP BY order_category HAVING SUM(order_revenue) > 1000 ORDER BY gmv DESC, order_category ASC;
返回信息如下所示。
(可选)在开发页面右侧,您可以单击版本信息页签,查看版本信息。
您可以在此处查看或对比任务版本信息,支持对SQL代码内容进行版本间的对比,并将不同之处进行标记。
运行并发布任务。
单击运行。
返回结果信息可以在下方的运行结果中查看。如果有异常,则可以在运行问题中查看。
确认运行无误后,单击右上角的发布。
在发布对话框中,可以输入发布信息,然后单击确定。
访问Spark UI
通过Spark UI,您可以查看任务的执行情况、资源使用情况、日志信息等,从而更好地分析和优化Spark任务。
在运行结果区域访问
仅以下引擎版本支持该功能:
esr-4.x:esr-4.2.0及之后版本。
esr-3.x:esr-3.2.0及之后版本。
esr-2.x:esr-2.6.0及之后版本。
执行完SQL语句后,您可以在运行结果页签的最下方,单击Spark UI,系统将自动跳转至Spark UI页面。
在会话实例处访问
执行完SQL语句后,您可以在会话实例处,选择
,系统将自动跳转至Spark UI页面。后续操作
创建完任务后,您可以创建工作流来定期调度任务,详情请参见创建工作流。工作流的完整调度示例,请参见SparkSQL开发快速入门。