Azure SQL DW中的regexp_replace

时间:2018-05-15 22:03:56

标签: azure-sql-database azure-sqldw

Azure SQL DW中的REGEXP_REPLACE是否有替换内置函数,如Oracle /或任何其他Relational数据库?

我需要从URL中删除GUID值和任何字母数字值。下面给出的例子。有没有什么办法可以在azure SQLDW中轻松实现?如果不是在SQL DW中,那么至少在Azure SQLDB中?

输入

/我的账户/房地/ 001A4BF58F8C1EE1ACE8ED6A65698305 /账户/概述

/我的账户/ 001A4BF5891C1ED1A5F27409BC0A1D02 /帐户/ 851008500240-1602-1512164572 /关税

/我的账户/房地/ 001A4BF5891C1EE1A0B1190619534001 /账户/ 85-0000286922

/我的账户/房地/ 001A4BF5891C1ED1A5F2C3BD506D0E07 /账户/概述

Output_expected

/我的账户/房地/账户/概述

/我的账户/账户/关税

/我的账户/处所//账户/

/我的账户/房地/账户/概述

1 个答案:

答案 0 :(得分:2)

Azure SQL数据仓库不包括对正则表达式的支持。

你可以做的是使用来自U-SQL的federated query,即在U-SQL脚本中从仓库获取数据,使用RegEx转换它然后输出为flatfile。使用Polybase将该flatfile导入数据仓库。 U-SQL ADLA还没有能力直接写入SQL DW。

示例脚本:

USING rx = System.Text.RegularExpressions.Regex;

/*!!TODO do federated query to Azure SQL Data Warehouse here instead
@input =
    SELECT *
    FROM EXTERNAL MyAzureSQLDWDataSource LOCATION "dbo.yourTable";
*/ 
@input = SELECT *
        FROM (
        VALUES
            ( "/my-account/premises/001A4BF58F8C1EE1ACE8ED6A65698305/accounts/overview" ),
            ( "/my-account/001A4BF5891C1ED1A5F27409BC0A1D02/accounts/851008500240-1602-1512164572/tariff" ),
            ( "/my-account/premises/001A4BF5891C1EE1A0B1190619534001/accounts/85-0000286922" ),
            ( "/my-account/premises/001A4BF5891C1ED1A5F2C3BD506D0E07/accounts/overview" )
        ) AS t( yourPath );


@output =
    SELECT rx.Replace(yourPath, @"/([0-9]|[A-F]|-){13,32}", "") AS cleanPath
    FROM @input;


OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv(quoting : false);

我的结果:

My results

详细了解联合查询here。 RegEx汇集了https://regex101.com/的帮助。