azure-data-lake - 如何解析大字符串 U-SQL 正则表达式

标签 azure-data-lake u-sql

我有一个包含大字符串的大 CSV。我想用 U-SQL 解析它们。

@t1 = 
SELECT
    Regex.Match("ID=881cf2f5f474579a:T=1489536183:S=ALNI_MZsMMpA4voGE4kQMYxooceW2AOr0Q", "ID=(?<ID>\\w+):T=(?<T>\\w+):S=(?<S>[\\w\\d_]*)") AS p
FROM
    (VALUES(1)) AS fe(n);

@t2 = 
SELECT
    p.Groups["ID"].Value AS gads_id,
    p.Groups["T"].Value AS gads_t,
    p.Groups["S"].Value AS gads_s
FROM
    @t1;

OUTPUT @t
TO "/inhabit/test.csv"
USING Outputters.Csv();

Severity Code Description Project File Line Suppression State Error E_CSC_USER_INVALIDCOLUMNTYPE: 'System.Text.RegularExpressions.Match' cannot be used as column type.

我知道如何使用 EXPLODE/CROSS APPLY/GROUP BY 以 SQL 方式执行此操作。但也许没有这些舞蹈是可能的吗?

还有更新

@t1 = 
SELECT
    Regex.Match("ID=881cf2f5f474579a:T=1489536183:S=ALNI_MZsMMpA4voGE4kQMYxooceW2AOr0Q", "ID=(?<ID>\\w+):T=(?<T>\\w+):S=(?<S>[\\w\\d_]*)").Groups["ID"].Value AS id,
    Regex.Match("ID=881cf2f5f474579a:T=1489536183:S=ALNI_MZsMMpA4voGE4kQMYxooceW2AOr0Q", "ID=(?<ID>\\w+):T=(?<T>\\w+):S=(?<S>[\\w\\d_]*)").Groups["T"].Value AS t,
    Regex.Match("ID=881cf2f5f474579a:T=1489536183:S=ALNI_MZsMMpA4voGE4kQMYxooceW2AOr0Q", "ID=(?<ID>\\w+):T=(?<T>\\w+):S=(?<S>[\\w\\d_]*)").Groups["S"].Value AS s
FROM
    (VALUES(1)) AS fe(n);

OUTPUT @t1
TO "/inhabit/test.csv"
USING Outputters.Csv();

这个警告工作得很好。但有一个问题。正则表达式每行会计算 3 次吗?是否存在提示 U-SQL 引擎的机会 - 函数 Regex.Match 是确定性的。

最佳答案

您可能应该使用比 Regex.Match 更有效的东西。但要回答你原来的问题:

System.Text.RegularExpressions.Match不属于 built-in U-SQL types .

因此您需要将其转换为内置类型,例如stringSqlArray<string>或将其包装成 udt提供 IFormatter使其成为用户定义的类型。

关于azure-data-lake - 如何解析大字符串 U-SQL 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43278757/

相关文章:

json - 尝试转换列数据时值太长失败

unit-testing - U-SQL 过程的单元测试

azure-storage - 看不到 ADLS Gen2 的 'Lifecycle management' 选项

azure - 动态数据集中的动态文件格式

azure - 其余操作 Azure Datalake gen2

azure - Azure Data Lake 中的文件夹统计信息

azure - U-SQL/ADLA : How to get multiple indexes and partitions on table?

u-sql - U-SQL 是否允许自定义代码调用外部服务

python - 使用外部 Python 包的 U-SQL

azure - 使用 C# 扩展 USQL : which are parallelised?