You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Data Flows:筛选含指定子串的Parquet行并提取子串问题

解决方案

问题核心

你之前的筛选条件失效,是因为空数组≠Null,且你误将空数组和含空字符串的数组混淆,导致无法过滤无匹配的行。

修正后的完整流程

1. 源读取

保持原步骤:读取目标Parquet文件。

2. 派生列优化

如果文本列存在多连续空格,先做归一化处理再分割,避免生成空字符串干扰匹配结果,派生列表达式改为:

array_intersect(split(regexp_replace(text_column, '\\s+', ' '), ' '), array('array','of','words'))

注:regexp_replace(text_column, '\\s+', ' ')用于将多个连续空格替换为单个空格,确保分割结果都是有效单词。

3. 筛选条件修正

针对空数组和Null的正确过滤条件:

  • 基础版(假设words列不会为Null):size(words) > 0
  • 兼容版(覆盖Null和空数组两种情况):not(isNull(words)) and size(words) > 0

原条件无效原因说明

  • not(isNull(words)):空数组不属于Null类型,无法过滤空数组行
  • word != array(''):intersect返回的是空数组array(),而非包含空字符串的数组array(''),条件不匹配
  • not(isNull(word[1])):空数组没有索引1,会直接返回Null,逻辑完全错误

4. 接收器

保持原步骤:输出处理后的结果。

高效替代方案

如果你的计算引擎支持array_contains_any类函数,可以跳过派生列步骤,直接在筛选阶段判断,减少中间列开销:

array_contains_any(split(text_column, ' '), array('array','of','words'))

若仍需保留匹配子串列,可在筛选后再生成words列。

内容的提问来源于stack exchange,提问作者ClockWork

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:50:30