Azure SQL DW 中是否有像 Oracle/或任何其他关系数据库中那样的 REGEXP_REPLACE 内置函数替换功能?
我需要从 URL 中删除 GUID 值和任何字母数字值。下面给出的示例。有什么方法可以在azure SQLDW中轻松实现吗?如果不在 SQL DW 中,那么至少在 Azure SQLDB 中?
输入
/my-account/premises/001A4BF58F8C1EE1ACE8ED6A65698305/accounts/overview
/my-account/001A4BF5891C1ED1A5F27409BC0A1D02/accounts/851008500240-1602-1512164572/关税
/my-account/premises/001A4BF5891C1EE1A0B1190619534001/accounts/85-0000286922
/my-account/premises/001A4BF5891C1ED1A5F2C3BD506D0E07/accounts/overview
预期输出
/我的帐户/前提/帐户/概述
/我的帐户/帐户/关税
/我的帐户/前提//帐户/
/我的帐户/前提/帐户/概述
最佳答案
Azure SQL 数据仓库不支持正则表达式。
你可以做的是使用 federated query从 U-SQL,即在 U-SQL 脚本中从仓库获取数据,使用 RegEx 对其进行转换,然后输出为平面文件。使用 Polybase 将该平面文件导入到您的数据仓库中。 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 。正则表达式在 https://regex101.com/ 的帮助下组合在一起.
关于azure-sql-database - Azure SQL DW 中的 regexp_replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359786/