Azure SQL DW中的REGEXP_REPLACE是否有替换内置函数,如Oracle /或任何其他Relational数据库?
我需要从URL中删除GUID值和任何字母数字值。下面给出的例子。有没有什么办法可以在azure SQLDW中轻松实现?如果不是在SQL DW中,那么至少在Azure SQLDB中?
/我的账户/房地/ 001A4BF58F8C1EE1ACE8ED6A65698305 /账户/概述
/我的账户/ 001A4BF5891C1ED1A5F27409BC0A1D02 /帐户/ 851008500240-1602-1512164572 /关税
/我的账户/房地/ 001A4BF5891C1EE1A0B1190619534001 /账户/ 85-0000286922
/我的账户/房地/ 001A4BF5891C1ED1A5F2C3BD506D0E07 /账户/概述
/我的账户/房地/账户/概述
/我的账户/账户/关税
/我的账户/处所//账户/
/我的账户/房地/账户/概述
答案 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);
我的结果:
详细了解联合查询here。 RegEx汇集了https://regex101.com/的帮助。