我在复制活动中有下面的查询,用于将数据从表列表复制到目标中。我使用foreach活动来复制数组参数-表。现在一些表名包含schema作为前缀,所以我需要从表名中提取schema名称并构造查询。如果表名不包含schema名称,则查询应采用管道中作为参数给出的默认名称。
below is the parameter and value
default_schema_parameter=myschema
tables= ["testschema_table1", "table2","prodschema_table2"]
字符串
有两个表包含架构名称
prodschema_table2
testschema_table1
prod_cust_table1
型
现在我想构造这样的查询作为sudo代码
预期数量
if tables item contains '_':
select * from item.replace with '.'
else:
select * from default_schema_parameter.item
expected query:
1.select * from prodschema.table2
2.select * from default_schema_parameter.table2
3.select * from prod.cust_table1 -- only first part spliting
型
我尝试了下面的方法
@concat('SELECT * FROM ',
if(contains(item(), '_'),
concat(replace(split(item(), '_')[0], ' ', ''), '.', split(item(), '_')[1]), -- Construct schema.table if '_' is present
concat('@{default_schema_parameter}.', item()) -- Construct default_schema_parameter.table if no '_'
)
)
型
但上面的代码不工作.我得到下面的错误
concat(replace(split(item(), '_')[0],
cannot fit unknown into the function parameter
型
对此有什么解决办法吗
1条答案
按热度按时间6tqwzwtp1#
的数据
这不是一个错误,它只是一个警告,当我们在字符串表达式中使用
split()[index]
函数时发生。像下面这样改变你的表达式并调试管道。
字符串
它不会给管道调试给予任何错误。
的
更新:
我想只分割第一次出现的_”,所以它应该是'prod.cust_table1',但目前上述代码使分割在所有出现的prod.cust.table1。
使用下面的动态表达式来实现此要求。
型
此表达式将给予表名,方法是将字符串
"schema_"
替换为当前@item()
中的空字符串(''
)。的