You need to enable JavaScript to run this app.
文档中心
E-MapReduce

E-MapReduce

复制全文
下载 pdf
Spark
EMR Serverless 查询结果写TOS
复制全文
下载 pdf
EMR Serverless 查询结果写TOS

EMR Serverless 支持直接将 Spark SQL 的查询结果,写入您名下的 TOS 路径中,不需要额外通过下载链接或者 SDK 下载结果。

限制

当前仅支持 Spark 引擎写入(通用计算组的 Spark 任务或 Spark 计算组的任务)。

使用方式

参数名

参数取值

说明

是否必须

默认值

serverless.query.result.save.enabled

true / false

是否开启结果写入tos

Y

默认不开启该功能

serverless.query.result.save.mode

overwrite / errorifexists

写入模式

  • overwrite:覆盖该目录
  • errorifexists:目标目录存在则报错

N

默认errorifexists

serverless.query.result.save.path

tos://test-emr/result

结果保存目标路径

Y

serverless.query.result.format

csv / parquet / json / jsonl

结果格式

N

默认为parquet

serverless.query.result.partition.num

正整数

结果集的分片数

N

不设置默认为最后一次shuffle的partition数

serverless.query.result.save.compression

bzip2 / deflate / lz4 / gzip / snappy

接入结果的压缩格式

N

none

实践

数据准备

CREATE TABLE if not exists all_data_types_table (
    -- 布尔类型
    col_boolean BOOLEAN,
    -- 字节类型
    col_byte BYTE,
    -- 短整型
    col_short SHORT,
    -- 整型
    col_integer INT,
    -- 长整型
    col_long LONG,
    -- 单精度浮点型
    col_float FLOAT,
    -- 双精度浮点型
    col_double DOUBLE,
    -- 十进制类型,精度为 10,小数位数为 2
    col_decimal DECIMAL(10, 2),
    -- 字符串类型
    col_string STRING,
    -- 二进制类型
    col_binary BINARY,
    -- 日期类型
    col_date DATE,
    -- 时间戳类型
    col_timestamp TIMESTAMP,
    -- 数组类型,元素为字符串
    col_array ARRAY<STRING>,
    -- 映射类型,键为字符串,值为整数
    col_map MAP<STRING, INT>,
    -- 结构体类型,包含一个整型字段和一个字符串字段
    col_struct STRUCT<struct_col1: INT, struct_col2: STRING>
);
-- 向 all_data_types_table 表插入一条记录
INSERT INTO all_data_types_table
VALUES (
    true,
    CAST(1 AS BYTE),
    CAST(10 AS SHORT),
    100,
    1000L,
    1.1,
    1.11,
    DECIMAL(10.10),
    'test',
    CAST('test' AS BINARY),
    DATE '2024-01-01',
    TIMESTAMP '2024-01-01 12:00:00',
    ARRAY('a', 'b'),
    MAP('key', 1),
    NAMED_STRUCT('struct_col1', 2, 'struct_col2', 'nested')
);

查询结果覆盖写 TOS/JSONL 格式

set serverless.query.result.save.enabled = true;
set serverless.query.result.format = jsonl;
set serverless.query.result.save.path = tos://test-ziwen/ecs/result;
set serverless.query.result.save.mode = overwrite;     
select * from all_data_types_table; 

结果则会写入tos://test-ziwen/ecs/result 路径下,产生一个_SUCCESS 文件和多个数据文件。
Image
打开目标文件,按 JSONL 格式组织数据,每行存储一个独立的 JSON 对象,标准格式示例如下:

{"col_boolean":true,"col_byte":1,"col_short":10,"col_integer":100,"col_long":1000,"col_float":1.1,"col_double":1.11,"col_decimal":10.00,"col_string":"test","col_binary":"dGVzdA==","col_date":"2024-01-01","col_timestamp":"2024-01-01T12:00:00.000+08:00","col_array":["a","b"],"col_map":{"key":1},"col_struct":{"struct_col1":2,"struct_col2":"nested"}}

查询结果覆盖写 TOS/JSONL 格式,repartiton 为1个文件

set serverless.query.result.save.enabled = true;
set serverless.query.result.format = jsonl;
set serverless.query.result.save.path = tos://test-ziwen/ecs/result;
set serverless.query.result.save.mode = overwrite;     
set serverless.query.result.partition.num = 1;
select * from all_data_types_table;

结果文件数量符合预期,仅产生一个数据文件。

查询结果覆盖写 TOS,并指定压缩格式

set serverless.query.result.save.enabled = true;
set serverless.query.result.format = jsonl;
set serverless.query.result.save.path = tos://test-ziwen/ecs/result;
set serverless.query.result.save.mode = overwrite;     
set serverless.query.result.partition.num = 1;
set serverless.query.result.save.compression = bzip2;
select * from all_data_types_table;

通过 TOS,可以看到写出来一个 bz2 的压缩文件。

最近更新时间:2026.08.13 17:48:30
这个页面对您有帮助吗?
有用
有用
无用
无用