regexp_replace в Azure SQL DW - PullRequest
       35

regexp_replace в Azure SQL DW

0 голосов
/ 16 мая 2018

Существует ли какая-либо встроенная функция замены для REGEXP_REPLACE в Azure SQL DW, как в Oracle / или любых других реляционных базах данных?

Мне нужно удалить значения GUID и любые буквенно-цифровые значения из URL. Пример приведен ниже. Есть ли способ, которым это может быть легко достигнуто в лазурной SQLDW? если не в SQL DW, то как минимум в Azure SQLDB?

Input

/ мой-счет / помещения / 001A4BF58F8C1EE1ACE8ED6A65698305 / счета / обзор

/ мой-счет / 001A4BF5891C1ED1A5F27409BC0A1D02 / счета / 851008500240-1602-1512164572 / тариф

/ My-счет / помещение / 001A4BF5891C1EE1A0B1190619534001 / счет / 85-0000286922

/ мой-счет / помещения / 001A4BF5891C1ED1A5F2C3BD506D0E07 / счета / обзор

Output_expected

/ мой-счет / помещение / счет / обзор

/ мой-счет / счета / тариф

/ мой-счет / помещения // счета /

/ мой-счет / помещение / счет / обзор

1 Ответ

0 голосов
/ 16 мая 2018

Хранилище данных SQL Azure не включает поддержку регулярных выражений.

Что вы могли бы сделать, это использовать федеративный запрос из 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);

Мои результаты:

My results

Подробнее о федеративных запросах здесь . RegEx вместе с помощью от https://regex101.com/.

...