如何在BigQuery中提取数组每个元素的最后8位字符
在BigQuery中提取数组每个元素的最后8位字符
你遇到的错误是因为RIGHT()函数仅支持处理单个字符串,而JSON_EXTRACT_STRING_ARRAY()返回的是字符串数组,无法直接作为RIGHT()的参数。要实现对数组每个元素的批量处理,可使用以下两种方案:
方案1:使用ARRAY_TRANSFORM(推荐)
ARRAY_TRANSFORM是BigQuery专为数组元素转换设计的函数,能直接遍历数组并对每个元素应用指定逻辑:
SELECT ARRAY_TRANSFORM( JSON_EXTRACT_STRING_ARRAY(your_column_name), element -> RIGHT(element, 8) ) AS last_8_chars_array FROM your_table_name;
说明:
JSON_EXTRACT_STRING_ARRAY(your_column_name):将JSON格式的数组列转换为BigQuery原生字符串数组。element -> RIGHT(element, 8):遍历数组每个元素,提取其最后8位字符;若元素长度不足8位,RIGHT()会直接返回整个字符串。
方案2:使用UNNEST + ARRAY_AGG
先将数组拆分为单行记录处理,再重新聚合为数组:
SELECT ARRAY_AGG(RIGHT(element, 8)) AS last_8_chars_array FROM your_table_name, UNNEST(JSON_EXTRACT_STRING_ARRAY(your_column_name)) AS element;
说明:
UNNEST(...) AS element:将数组展开为多行,每行对应一个数组元素。RIGHT(element, 8):对每个展开后的元素提取最后8位。ARRAY_AGG(...):将处理后的单行结果重新组合为数组。
示例效果
针对你提供的输入数组:
输入:
["551199999999","55129999999999","5532999999999"]
处理后输出:["99999999","99999999","99999999"]
内容的提问来源于stack exchange,提问作者heliomar_
相关产品推荐
相关产品推荐

