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

BigQuery自定义字段数据验证:不拆分判断值是否包含15

不拆分数据实现值包含验证

问题描述

需要对如下格式的数据执行验证:若Value列包含单独值15,则标记为Valid,否则标记为Invalid,且不能拆分原数据行。

输入数据:

Key | Value     
----|-----------
1221|10,15,23,33
1123|10,11,12
1990|19,15
1000|null

预期输出:

Key | Value     | Validation Result|
----|-----------|------------------|
1221|10,15,23,33|             Valid|
1123|10,11,12   |           Invalid|
1990|19,15      |             Valid|
1000|null       |           Invalid|
------------------------------------

之前尝试用split函数会把数据拆分成多行,现寻求不拆分的实现方法。

解决方案

1. SQL 实现

直接通过字符串匹配判断15是否为独立值,无需拆分数据:

SELECT 
    Key,
    Value,
    CASE 
        -- 覆盖15在开头、中间、结尾、单独出现的所有情况,同时排除null
        WHEN Value IS NOT NULL AND (Value = '15' OR Value LIKE '15,%' OR Value LIKE '%,15,%' OR Value LIKE '%,15') THEN 'Valid'
        ELSE 'Invalid'
    END AS [Validation Result]
FROM YourTableName;

解释:用LIKE匹配不同位置的15,同时单独判断Value等于15的情况,确保只匹配独立的15值,不会误判155、215这类包含15但不是单独值的情况。

2. Python Pandas 实现

利用字符串匹配或正则表达式直接验证,不拆分原数据:

import pandas as pd

# 构造输入数据
data = {
    'Key': [1221, 1123, 1990, 1000],
    'Value': ['10,15,23,33', '10,11,12', '19,15', None]
}
df = pd.DataFrame(data)

# 方法1:用字符串方法判断
df['Validation Result'] = df['Value'].apply(
    lambda x: 'Valid' if pd.notna(x) and ('15,' in x or x.endswith('15')) else 'Invalid'
)

# 方法2:用正则匹配更严谨(避免误判包含15的其他值)
# df['Validation Result'] = df['Value'].str.contains(r'\b15\b', na=False).map({True: 'Valid', False: 'Invalid'})

# 输出格式化结果
print(df.to_string(index=False))

解释:两种方法都直接在原字符串上操作,lambda方法通过判断15,是否存在或字符串以15结尾来验证;正则方法用\b(单词边界)确保匹配的是独立的15值,更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:41:04