regexp_replace 在 Azure SQL DW 中
regexp_replace in Azure SQL DW
在 Azure SQL DW 中是否有替代 REGEXP_REPLACE 的内置函数,就像在 Oracle / 或任何其他关系数据库中一样?
我需要从 URL 中删除 GUID 值和任何字母数字值。下面给出的例子。有什么办法可以在 azure SQLDW 中轻松实现吗?如果不在 SQL DW 中,那么至少在 Azure SQLDB 中?
输入
/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
Output_expected
/my-account/premises/accounts/overview
/my-account/accounts/tariff
/my-account/premises//帐户/
/my-account/premises/accounts/overview
Azure SQL 数据仓库不支持正则表达式。
你可以做的是使用来自 U-SQL 的 federated query,即在 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. RegEx put together with help from https://regex101.com/。
在 Azure SQL DW 中是否有替代 REGEXP_REPLACE 的内置函数,就像在 Oracle / 或任何其他关系数据库中一样?
我需要从 URL 中删除 GUID 值和任何字母数字值。下面给出的例子。有什么办法可以在 azure SQLDW 中轻松实现吗?如果不在 SQL DW 中,那么至少在 Azure SQLDB 中?
输入
/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
Output_expected
/my-account/premises/accounts/overview
/my-account/accounts/tariff
/my-account/premises//帐户/
/my-account/premises/accounts/overview
Azure SQL 数据仓库不支持正则表达式。
你可以做的是使用来自 U-SQL 的 federated query,即在 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. RegEx put together with help from https://regex101.com/。