云服务器内容精选
-
空值分区的查询语句不同 说明: Spark2.4.x: Spark 3.0.1或更早版本中,如果分区列是字符串类型,则将其解析为其文本表示形式的字符串文本,例如字符串“null”。 通过part_col='null'查询空值分区的数据。 Spark3.3.x: `PARTITION(col=null)`始终在分区规范中解析为null,即使分区列是字符串类型。 通过part_col is null查询空值分区的数据。 升级引擎版本后是否对作业有影响: 有影响,涉及对空值分区的查询需要适配 示例代码: 准备数据: CREATE TABLE test_part_null (col1 INT, p1 STRING) USING PARQUET PARTITIONED BY (p1); INSERT INTO TABLE test_part_null PARTITION (p1 = null) SELECT 0; 执行sql: select * from test_part_null; Spark2.4.5 0 null Spark2.4.5版本执行select * from test_part_null where p1='null'可查到分区数据。 Spark3.3.1 0 Spark3.3.1版本执行select * from test_part_null where p1 is null才可查询到数据。
-
日期加减时间字段间隔后的返回值类型的变化 说明: date +/-只有日期时间字段(如date'2011-11-11')的间隔+间隔12小时返回类型变化。 Spark2.4.x:在Spark 2.4.x中,当对定义为FloatType或DoubleType的JSON属性进行日期加减操作时,例如date'2011-11-11'加上或减去一个时间间隔(如12小时),返回的类型是日期(DateType)。 Spark3.3.x:Spark 3.3.x版本中,对于同样的操作,返回的类型变为时间戳(TimestampType),用于保持与Hive的兼容性。 升级引擎版本后是否对作业有影响: 有影响。 示例代码: 执行sql: select date '2011-11-11' - interval 12 hour Spark2.4.5 2011-11-10 Spark3.3.1 1320897600000
-
对分区表数据的处理方式不同 说明: datasourcev1分区外表,路径下已经存在不带uuid的分区路径数据。 执行insert overwrite partition操作,Spark3.3.x会清除之前不带uuid的分区数据,Spark2.4.x不会清理。 Spark2.4.x: 保留不带uuid分区路径下数据。 Spark3.3.x: 会删除不带uuid分区路径下数据。 升级引擎版本后是否对作业有影响: 有影响,会清理脏数据。 示例代码: 准备数据: obs://bucket1/test/overwrite_datasource下创建pt=pt1目录,并移入一个parquet数据问题 create table overwrite_datasource(id int,name string,pt string) using parquet PARTITIONED by(pt) LOCATION 'obs://bucket1/test/overwrite_datasource'; SELECT * FROM overwrite_datasource1 where pt='pt1'两个版本均查询不到数据。 执行sql: insert OVERWRITE table overwrite_datasource partition(pt='pt1') values(2,'aa2'); Spark2.4.5 保留了pt=pt1目录。 Spark3.3.1 删除了pt=pt1目录。
-
新增支持Parallel Multi-Insert 说明: Spark3.3.x版本中新增支持Parallel Multi-Insert,如果SQL存在multi-insert的场景,在同一个SQL里插入到多个表中,这类SQL在Spark开源本身是串行处理的,性能受到制约。针对这类SQL,Spark3.3.x版本中 DLI 新增支持multi-insert并行化的优化处理,可以让所有的insert都并发执行,提升处理性能。 在使用时需配置开启以下功能开关(默认关闭): spark.sql.lazyExecutionForDDL.enabled=true spark.sql.parallelMultiInsert.enabled=true 升级引擎版本后是否对作业有影响: DLI功能增强,增强multi-insert并行化特性,提升作业运行的可靠性。
-
Spark SQL支持Char/Varchar类型 说明: Spark2.4.x:在Spark2.4.x版本中,Spark SQL表字段不支持Char/Varchar类型,当指定为Char/Varchar类型时会强制转换为String类型。 Spark3.3.x:Spark SQL表字段支持CHAR/CHARACTER和VARCHAR类型。 升级引擎版本后是否对作业有影响: 无影响。 示例代码: 准备数据: create table test_char(id int,name varchar(24),name2 char(24)); 执行sql: show create table test_char; Spark2.4.5 create table `test_char`(`id` INT,`name` STRING,`name2` STRING) ROW FORMAT... Spark3.3.1 create table test_char(id INT,name VARCHAR(24),name2 VARCHAR(24)) ROW FORMAT...
-
新增支持Enhance Reuse Exchange 说明: Spark3.3.x版本中新增支持Enhance Reuse Exchange,SQL的对应plan存在sort merge join可重用的条件,通过打开相应开关spark.sql.execution.enhanceReuseExchange.enabled,可以实现SMJ plan node重用。 在使用时需配置开启以下功能开关(默认关闭): spark.sql.execution.enhanceReuseExchange.enabled=true 升级引擎版本后是否对作业有影响: DLI功能增强。
-
导出 CS V文件时保留特殊字符的引号 说明: Spark2.4.x: 在Spark 2.4.x版本中,导出CSV文件时,如果字段值中包含特殊字符如换行符(\n)和回车符(\r),并且这些特殊字符被引号(例如双引号")包围,Spark会自动处理这些引号,在导出的CSV文件中舍弃这些引号。 例如,字段值"a\rb"在导出时不会包含引号。 Spark3.3.x: 在Spark 3.3.x版本中,优化了对于CSV文件的导出处理,如果字段值中包含特殊字符,并且这些特殊字符被引号包围,Spark会保留这些引号。 例如:字段值"a\rb"在导出时,引号仍被保留在最终的CSV文件中。 升级引擎版本后是否对作业有影响: 对查询结果无影响,但导出文件样式有影响。 示例代码: 准备数据: create table test_null2(str1 string,str2 string,str3 string,str4 string); insert into test_null2 select "a\rb", null, "1\n2", "ab"; 执行sql: SELECT * FROM test_null2; Spark2.4.5 a b 1 2 ab Spark3.3.1 a b 1 2 ab 导出查询结果到obs,查看csv文件内容: Spark2.4.5 a b,"","1 2",ab Spark3.3.1 "a b",,"1 2",ab
-
新增支持自适应Skip partial agg功能的配置 说明: Spark3.3.x版本中新增支持自适应Skip partial agg功能,即当Partial Agg效果不佳时,可以直接跳过,避免Partial Agg带来的额外性能消耗。相关参数: spark.sql.aggregate.adaptivePartialAggregationEnabled:用于控制是否启用自适应Skip partial agg功能。当设置为true时,Spark会根据运行时的统计数据动态决定是否跳过部分聚合。 spark.sql.aggregate.adaptivePartialAggregationInterval:该参数用于配置分析间隔,即在处理了多少行数据之后,Spark会进行一次分析,用来决定是否需要跳过部分聚合。 spark.sql.aggregate.adaptivePartialAggregationRatio:该参数是判断是否跳过的阈值,用于判断“已处理的group分组/已处理的行数”的比例。如果这个比例大于配置的阈值,则认为预聚合效果不好,此时Spark可以选择跳过部分聚合,避免进一步的性能损失。 在使用时系统先按照spark.sql.aggregate.adaptivePartialAggregationInterval配置的间隔进行分析,当处理的行数到达间隔之后,再计算”已处理的group分组/已处理的行数”,如果比例大于配置的阈值,则认为预聚合效果不好,此时可以直接选择跳过。 升级引擎版本后是否对作业有影响: DLI功能增强。
-
Spark3.3.x不再支持使用“0$”指定第一个参数 说明: format_string(strfmt, obj, ...) 和 printf(strfmt, obj, ...) 中的 strfmt 将不再支持使用“0$”指定第一个参数,第一个参数应始终由“1$”引用当使用参数索引来指示参数在参数列表中的位置。 Spark2.4.x:%0和%1均可表示第一个参数。 Spark3.3.x:不再支持%0。 升级引擎版本后是否对作业有影响: 有影响,请作业中如涉及使用%0需修改以适配Spark3.3.x。 示例代码1: 执行sql: SELECT format_string('Hello, %0$s! I\'m %1$s!', 'Alice', 'Lilei'); Spark2.4.5 Hello, Alice! I'm Alice! Spark3.3.1 DLI.0005: The value of parameter(s) 'strfmt' in `format_string` is invalid: expects %1$, %2$ and so on, but got %0$. 示例代码2: 执行sql: SELECT format_string('Hello, %1$s! I\'m %2$s!', 'Alice', 'Lilei'); Spark2.4.5 Hello, Alice! I'm Lilei! Spark3.3.1 Hello, Alice! I'm Lilei!
-
新增支持解析“+Infinity”、“+INF”和“-INF”类型字符串的值 说明: Spark2.4.x:当从定义为FloatType 或 DoubleType的JSON属性读取值时,Spark2.4.x仅支持解析“Infinity”和“-Infinity”。 Spark3.3.x:当从定义为FloatType 或 DoubleType的JSON属性读取值时,Spark3.3.x除了支持解析“Infinity”和“-Infinity”之外,还支持解析字符串“+Infinity”、“+INF”和“-INF”。 升级引擎版本后是否对作业有影响: 功能增强,无影响
-
ADD PARTITION新增支持使用类型化文字 说明: Spark2.4.x: 在Spark 2.4.x版本中,使用ADD PARTITION时,如果使用类型化文字(例如date'2020-01-01'),分区值会被解析为字符串值date'2020-01-01',会生成一个非法的日期值,因此会添加一个值为null的分区。 正确的做法是使用字符串值,例如ADD PARTITION(dt = '2020-01-01') Spark3.3.x:在Spark 3.3.x版本中,对分区操作支持使用类型化文字,支持使用ADD PARTITION(dt = date'2020-01-01'),并且可以正确地将分区值解析为日期类型,而不是字符串。 升级引擎版本后是否对作业有影响: 有影响,ADD PARTITION中对于类型化文字的处理方式的变化。 示例代码: 准备数据: create table test_part_type (id int,name string,pt date) PARTITIONED by (pt); insert into test_part_type partition (pt = '2021-01-01') select 1,'name1'; insert into test_part_type partition (pt = date'2021-01-01') select 1,'name1'; 执行sql: select id,name,pt from test_part_type; (配置参数spark.sql.forcePartitionPredicatesOnPartitionedTable.enabled为false) Spark2.4.5 1 name1 2021-01-01 1 name1 Spark3.3.1 1 name1 2021-01-01 1 name1 2021-01-01
-
Spark3.3.x版本中空字符串无引号。 说明: 默认情况下,空值在CSV数据源中,2.4.5版本空字符串为"",升级到spark3.3.1后空字符串无引号。 Spark2.4.x:空值在CSV数据源中为""。 Spark3.3.x:空值在CSV数据源中无引号。 如需在Spark3.3.x版本中恢复Spark2.4.x的格式,可以通过设置spark.sql.legacy.nullValueWrittenAsQuotedEmptyStringCsv为 true来实现。 升级引擎版本后是否对作业有影响: 有影响,导出orc文件中null值存储形式不同。 示例代码: 准备数据: create table test_null(id int,name string) stored as parquet; insert into test_null values(1,null); 导出csv查看文件内容 Spark2.4.5 1,"" Spark3.3.1 1,
-
describe function返回结果不同 说明: 如果function不存在,describe function会执行失败。 Spark2.4.x:DESCRIBE函数仍然可以运行并打印“Function:func_name not found” Spark3.3.x:函数不存在的提示信息变更为失败。 升级引擎版本后是否对作业有影响: 有影响,describe function 相关API的返回信息不同。 示例代码: 执行sql: describe function dli_no(dli_no不存在) Spark2.4.5 执行成功,function_desc内容: Function:func_name not found Spark3.3.1 执行失败,DLI.0005: Undefined function: dli_no……
-
返回信息明确告知不支持指定表外部属性 说明: 表外部属性`external`变为保留。如果指定外部属性,某些命令将执行失败。 Spark2.4.x:通过 `CREATE TABLE ... TBLPROPERTIES`和`ALTER TABLE ... SET TBLPROPERTIES`指定external属性,命令执行成功,但实际上external属性被静默忽略,表依然是managed table。 Spark3.3.x: 通过 `CREATE TABLE ... TBLPROPERTIES`和`ALTER TABLE ... SET TBLPROPERTIES`指定external属性,命令将会失败。 如需在Spark3.3.x版本中恢复Spark2.4.x的使用方式,可以通过设置spark.sql.legacy.notReserveProperties为 true来实现。 升级引擎版本后是否对作业有影响: 有影响,涉及相关用法需要适配。 示例代码: 执行sql: CREATE TABLE test_external(id INT,name STRING) TBLPROPERTIES('external'=true); Spark2.4.5 执行成功。 Spark3.3.1 DLI.0005: The feature is not supported: external is a reserved table property, please use CREATE EXTERNAL TABLE.
-
默认配置spark.sql.adaptive.enabled=true 说明: Spark2.4.x:在Spark 2.4.x版本中,默认情况下spark.sql.adaptive.enabled配置项的值是false,即自适应查询执行(Adaptive Query Execution,简称AQE)特性是关闭的。 Spark3.3.x:从Spark3.3.x-320版本起开始默认开启AQE特性,即spark.sql.adaptive.enabled配置项的值是true。 升级引擎版本后是否对作业有影响: DLI功能增强,spark.sql.adaptive.enabled的默认参数值发生变化。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格