结论:
split函数在spark3和presto中,虽然用法一样,但传递分隔符参数时不同,Spark的分隔符参数是一个正则表达式,如果要用.点号等分割,需要双反斜杠 `\\` 转义。presto中是普通字符串。
一、在spark中:
使用 `split`函数分割字符串时,输入的分隔符参数是一个正则表达式,而不是一个常规的字符串。在正则表达式中,点号 `.` 表示匹配任意单个字符,因此在使用 `split` 函数时,需要对点号进行转义,表示点号的字面上的意义。在 Spark SQL 中使用 `split` 函数分割包含点号的字符串时,应该使用双反斜杠 `\\.` 进行转义。
例如,如果你的字段 col1 的值为 '11.1',你可以使用以下代码在 Spark SQL 中使用 `split` 函数分割:
```
SELECT split(col1, '\\.');
```
上述代码会得到 `['11', '1']` 这个结果,其中第一个元素是点号之前的字符串,第二个元素是点号之后的字符串。如果使用未转义的点号作为分隔符,则会将字段的每个字符都当做一个分割符来处理,从而导致结果为空。因此在使用 `split` 函数时,需要注意传入的分隔符是否需要进行转义。
二、为什么presto中不需要转义
在 Spark SQL 和 Presto 中,`split()`函数的用法是一致的,但在传递分隔