我们正在使用 Matillion ETL API 将查询参数传递给底层的 Redshift 查询。使用下拉列表中的连接创建查询参数变量,States
并在 API 中传递,如下所示:
v_state=" & #encodeForURL("''AL'',''CA''")#
这个变量应该像and state in ('AL','CA')
在查询中一样被传递,但由于它的存在,,
使用保留字符会引发错误。我试过逃避这个角色,但它仍然不起作用。
因此,,
我没有|
在变量中使用v_state=" & #encodeForURL("''AL''|''CA''")#
它,它确实运行 API,但底层查询不返回任何数据。
and state in ('AL','CA')
(返回数据)
and state in (replace('''AL''|''CA''','|',','))
(不返回数据)
问题是:
- 在 Matillion API 中,有没有办法在字符串中转义逗号?
- 在 Redshift 中为 IN 子句使用管道分隔字符串的正确方法是什么?
编辑 1:找到一种将状态字符串转换为行的方法。
with t as
(select replace('AL|CO|CA|MN', '|', ',') as state)
, seq_0_9 as (
select 0 as num
union all
select 1 as num
union all
select 2 as num
union all
select 3 as num
union all
select 4 as num
union all
select 5 as num
union all
select 6 as num
union all
select 7 as num
union all
select 8 as num
union all
select 9 as num
)
, seq_0_99 as (
select a.num + b.num * 10 as num
from seq_0_9 a,
seq_0_9 b
)
SELECT split_part(t.state, ',', num) AS state
FROM t
JOIN seq_0_99 seq
ON num <= regexp_count(t.state, ',') + 1
WHERE num > 0;