如何在 Azure 数据工厂表达式中轻松提取 array/string 中的倒数第二个元素?

How to easily extract the 2nd last element in an array/string in Azure Data Factory Expression?

假设字符串是一个可变文件名,如下面的几个例子:

  1. file1_name_cr_001.csv
  2. file2_name1_name2.nn.123.456_updt_000.csv
  3. filename_2012.444.1234_utc_del_004.csv

最后 8 个字符串值的长度将始终保持固定,即 (_001.csv、_000.csv、_004.csv)。我们只需要提取 values = cr, updt, del

但是,ADF 中的 split() 和 substring() 均不允许负索引值并抛出错误:- 数组索引超出范围,否则此 split() 可能是最简单的方法,即 @split(variables('var1'),'_')[-2]

这是类似的主题:- https://github.com/MicrosoftDocs/azure-docs/issues/46070

请推荐一个最简单的方法。

谢谢!

我们或许可以在这里使用反向技巧:

SELECT
    filename,
    REVERSE(SUBSTRING(
        REVERSE(filename),
        CHARINDEX('_', REVERSE(filename)) + 1,
        CHARINDEX('_', REVERSE(filename), CHARINDEX('_', REVERSE(filename)) + 1) -
            CHARINDEX('_', REVERSE(filename)) - 1)) AS path
FROM yourTable;

请注意,以上内容可能根本无法正常执行。如果你需要快速访问各种路径组件,那么考虑在插入整个路径时将它们分开存储。

发现上述场景的此方法有效且更简单,因为我只需要找到正确的元素位置...因此,首先获取整个长度并减去所需的数组 element/string 位置 - 传递给分割():

@split(variables('var1'),'_')[sub(length(split(variables('var1'),'_')),2)]