SQL - SAP HANA - 控制台内容太长 - 将一些代码传递给过程?
SQL - SAP HANA - Console Content to long - Pass some code to a procedure?
我的 SAP HANA SQL 控制台中有一个 SQL 脚本,大约有 1700 行。
我有很多行,因为我需要更改从一个 "raw table" 导入的一列中的很多条目。
重复的 WHEN THEN 代码如下所示:`
Create Column Table xxx
Select Distinct
aaa AS "aaa",
bbb AS "bbb",
ccc AS "ccc",
CASE
WHEN importedColumn like 'xx123x' THEN REPLACE_REGEXPR ('xx123x' FLAG 'i' IN importedColumn WITH 'xxx')
WHEN importedColumn like 'yy345y' THEN REPLACE_REGEXPR ('yy345y' FLAG 'i' IN importedColumn WITH 'yyy')
WHEN importedColumn like 'zzz345z' THEN REPLACE_REGEXPR ('zzz345z'FLAG 'i' IN importedColumn WITH 'zzzz')
etc.
etc.
ELSE xxx
END AS replace_regexpr
FROM...
WHERE...
这(通常)工作正常。
问题是,我有太多不同的 WHEN THEN 语句(总是检查这一列的条目并可能更改它们)以至于我无法再执行代码 -> SQL console Content is too large。
我可以以某种方式提取此 case 语句并将其存储在过程或类似的东西中吗?
我真的不知道我该如何处理这个问题,所以我很高兴收到每一个建议!
- 注意:需要更改的列条目没有任何通用模式,因此我无法将它们分组或类似的东西。这意味着我需要那么多 WHEN THEN 语句。
从这个和链接的问题我认为你有一个 REGEX 规则应该应用于输入数据当且仅当找到特定模式(通过 LIKE
运算符比较)。
我会将所有匹配模式和替换规则放入一个单独的 table 中,使维护、调试和 SELECT 语句变得容易得多:
create column table xxx (id int primary key
, "impColumn" nvarchar(4000)
);
create column table rules (id int primary key
, matcher nvarchar(4000)
, regex nvarchar(4000));
insert into rules values (1, 'xx123x', 'xxx');
insert into rules values (2, 'yy345y', 'yyy');
insert into rules values (3, 'zzz345z', 'zzz');
insert into xxx values (1, 'xx123x');
insert into xxx values (2, 'yy345y');
insert into xxx values (3, 'zzz345z');
insert into xxx values (4, 'xx123xyy345y');
insert into xxx values (5, 'xx1zzz345zzzz345z23x');
insert into xxx values (6, 'xx123xyy345yzzz345z');
select
x.*,
r.*,
REPLACE_REGEXPR (r.matcher
FLAG 'i'
IN x."impColumn"
WITH r.regex) as output
from
xxx x
left outer join
rules r
on x."impColumn" like r.matcher ;
您可以将加入条件更改为
在 x."impColumn" 上喜欢 '%'|| r.matcher ||'%'
将所有匹配规则应用于输入行,但请注意,这会为每个应用的规则生成一个输出行,这可能不是您想要的。
没有占位符的输出如下所示:
这与您的示例 SQL 产生的结果几乎相同。
至于 SAP HANA Studio 中的问题,我猜测 这是由于您尝试运行 的脚本文件的绝对大小所致。
通过为 HANA Studio 编辑 JRE VM 内存,您可以避免此问题。
请检查 hdbstudio.ini
并将 VM 参数设置为
-Xmx4096m
-Xms512m
并重新启动 HANA Studio。
我的 SAP HANA SQL 控制台中有一个 SQL 脚本,大约有 1700 行。
我有很多行,因为我需要更改从一个 "raw table" 导入的一列中的很多条目。
Create Column Table xxx
Select Distinct
aaa AS "aaa",
bbb AS "bbb",
ccc AS "ccc",
CASE
WHEN importedColumn like 'xx123x' THEN REPLACE_REGEXPR ('xx123x' FLAG 'i' IN importedColumn WITH 'xxx')
WHEN importedColumn like 'yy345y' THEN REPLACE_REGEXPR ('yy345y' FLAG 'i' IN importedColumn WITH 'yyy')
WHEN importedColumn like 'zzz345z' THEN REPLACE_REGEXPR ('zzz345z'FLAG 'i' IN importedColumn WITH 'zzzz')
etc.
etc.
ELSE xxx
END AS replace_regexpr
FROM...
WHERE...
这(通常)工作正常。 问题是,我有太多不同的 WHEN THEN 语句(总是检查这一列的条目并可能更改它们)以至于我无法再执行代码 -> SQL console Content is too large。 我可以以某种方式提取此 case 语句并将其存储在过程或类似的东西中吗? 我真的不知道我该如何处理这个问题,所以我很高兴收到每一个建议!
- 注意:需要更改的列条目没有任何通用模式,因此我无法将它们分组或类似的东西。这意味着我需要那么多 WHEN THEN 语句。
从这个和链接的问题我认为你有一个 REGEX 规则应该应用于输入数据当且仅当找到特定模式(通过 LIKE
运算符比较)。
我会将所有匹配模式和替换规则放入一个单独的 table 中,使维护、调试和 SELECT 语句变得容易得多:
create column table xxx (id int primary key
, "impColumn" nvarchar(4000)
);
create column table rules (id int primary key
, matcher nvarchar(4000)
, regex nvarchar(4000));
insert into rules values (1, 'xx123x', 'xxx');
insert into rules values (2, 'yy345y', 'yyy');
insert into rules values (3, 'zzz345z', 'zzz');
insert into xxx values (1, 'xx123x');
insert into xxx values (2, 'yy345y');
insert into xxx values (3, 'zzz345z');
insert into xxx values (4, 'xx123xyy345y');
insert into xxx values (5, 'xx1zzz345zzzz345z23x');
insert into xxx values (6, 'xx123xyy345yzzz345z');
select
x.*,
r.*,
REPLACE_REGEXPR (r.matcher
FLAG 'i'
IN x."impColumn"
WITH r.regex) as output
from
xxx x
left outer join
rules r
on x."impColumn" like r.matcher ;
您可以将加入条件更改为 在 x."impColumn" 上喜欢 '%'|| r.matcher ||'%'
将所有匹配规则应用于输入行,但请注意,这会为每个应用的规则生成一个输出行,这可能不是您想要的。
没有占位符的输出如下所示:
这与您的示例 SQL 产生的结果几乎相同。
至于 SAP HANA Studio 中的问题,我猜测 这是由于您尝试运行 的脚本文件的绝对大小所致。 通过为 HANA Studio 编辑 JRE VM 内存,您可以避免此问题。
请检查 hdbstudio.ini
并将 VM 参数设置为
-Xmx4096m
-Xms512m
并重新启动 HANA Studio。