REGEXP_REPLACE 在 Databricks 中未按预期工作以向字符串添加空格

问题描述 投票:0回答:1

我有一行代码,用于在下面给定列的每 3 个字符之后向字符串添加空格:

regexp_replace(column, '(.{3})', '$1 ') as new_column

在 Databricks 的 SQL 编辑器中手动运行此代码时,它会按预期将数据插入表中。但是,当作为 Databricks 作业/工作流的一部分执行相同的代码来填充插入表中的列时,插入表中的列具有空值。

用于作业计算的集群使用Spark 3.4.1。

这是一个例子:

insert overwrite table
select
regexp_replace(column, '(.{3})', '$1 ') as new_column
from table

输入数据:

| column     |
| ---------- |
| 0QW1ER2RT  |

预期输出:

| new_column  |
| ----------- |
| 0QW 1ER 2RT |

知道为什么 regexp_replace 在 Databricks 作业中运行工作流程的一部分来填充列时无法正常工作(即在列中插入 null),但在 Databricks SQL 编辑器中手动执行时却可以正常工作吗?非常感谢任何帮助或见解!

sql regex databricks regexp-replace databricks-sql
1个回答
0
投票

我在

Postgress
Yellobrick
DB Regex 实施期间观察到相同类型的问题。

少数数据库不支持 ()

$&
$1
作为匹配子字符串。 这些类型的数据库支持
Back references (\)
作为捕获组的匹配子字符串,范围从 1 到 9(
\1
\9
)。

所以,请在

databricks-sql
中尝试此查询:

select regexp_replace(column, '(.{3})', '\1 ') as new_column;

-- or
-- use index from beginning (pos: 1)
select regexp_replace(column, '(.{3})', '\1 ', 1) as new_column;

MySQL 结果:db<>fiddle

(support '$1')

PL/pgSQL 结果:db<>fiddle
(support '\1')

YelloBrick 结果:
(support '
1')`
enter image description here

希望您的问题能够得到解决。
谢谢你!!!

© www.soinside.com 2019 - 2024. All rights reserved.