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

BigQuery中如何实现数千订单ID的LIKE匹配查询并返回对应ID

解决BigQuery中JSON字段批量LIKE匹配及返回目标订单ID的问题

刚接触BigQuery遇到这种JSON字段批量匹配的问题确实容易卡壳,我来帮你拆解解决:

为什么你的原查询不工作?

首先LIKE IN是无效的SQL语法,BigQuery(以及绝大多数SQL引擎)都不支持这种写法。而且当你有数千个订单ID时,就算写成一堆LIKE '%xxx%' OR LIKE '%yyy%',不仅代码臃肿到没法维护,查询性能也会非常差。

正确的解决方案:用UNNEST+JOIN实现批量模糊匹配

推荐用CTE(公共表表达式)配合UNNEST来管理你的目标订单ID列表,然后通过JOIN完成模糊匹配,同时还能自然把你查询的订单ID带回结果中:

WITH target_orders AS (
  -- 把你的数千个订单ID放到这个数组里,或者从外部文件导入(比如CSV)
  SELECT order_id 
  FROM UNNEST(['ORD12345', 'ORD54376', 'ORD98765', ...]) AS order_id
)
SELECT 
  t.order_id AS matched_order_id, -- 这里就是你要显示的查询目标订单ID
  tx.transaction_uuid,
  tx.client_name
FROM transactions_table tx
-- 关联目标订单列表,做模糊匹配
JOIN target_orders t
ON JSON_VALUE(tx, '$.ordernum') LIKE CONCAT('%', t.order_id, '%')

额外优化建议

  • 批量订单ID的导入:如果订单ID有数千个,直接写在数组里会很麻烦,你可以把订单ID存在Google Cloud Storage的CSV文件里,然后用LOAD DATA或者EXTERNAL TABLE导入到临时表,再替换上面的UNNEST部分。
  • 性能优化:如果transactions_table数据量极大,可以考虑给JSON_VALUE(transactions_table, '$.ordernum')创建一个计算列并添加索引,这样模糊匹配的速度会快很多。
  • 精确匹配的特殊情况:如果你的订单ID是和$.ordernum完全相等(而不是包含关系),可以把LIKE CONCAT('%', t.order_id, '%')改成JSON_VALUE(tx, '$.ordernum') = t.order_id,性能会提升一大截。

这样写出来的查询不仅语法合法,维护性强,还能完美满足你“让查询的订单ID显示在结果列”的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:22:28