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

如何在BigQuery查询中高效筛选特定词汇的出现数量

BigQuery高效筛选特定词汇并统计出现次数的实现方案

一、先优化原查询的日期筛选(提升效率的基础)

原查询里把日期转成字符串用LIKE匹配的方式效率极低,无法利用日期类型的索引,改成直接基于日期范围筛选:

WHERE lines.chart_of_accounts_id = "ID_account"
-- 方式1:直接指定日期范围,性能最优
AND lines.accounting_date BETWEEN '2022-12-01' AND '2022-12-31'
-- 方式2:按月份截断匹配,适合需要批量匹配整月数据的场景
-- AND DATE_TRUNC(lines.accounting_date, MONTH) = DATE('2022-12-01')

二、筛选包含特定词汇的记录

针对目标词汇(比如workers),推荐两种高效匹配方式:

1. 大小写敏感匹配

如果严格区分大小写,两种写法任选:

  • LIKE写法:LOWER(lines.line_description) LIKE '%workers%'
  • 正则写法:REGEXP_CONTAINS(lines.line_description, r'workers')

2. 大小写不敏感匹配

如果不需要区分大小写(比如Workers/WORKERS都算有效匹配),用带忽略大小写标记的正则:

REGEXP_CONTAINS(lines.line_description, r'(?i)workers')

三、统计特定词汇的出现次数

分两种常用场景给出实现:

场景1:筛选含关键词的记录,同时显示单条记录内的关键词出现次数

以统计line_description字段中workers的次数为例:

SELECT 
    -- 保留原查询的所有字段
    lines.accounting_book_id      AS Livro
    ,lines.book_name               AS Nome_Livro
    ,lines.period_name             AS Periodo
    ,lines.effective_period_num    AS Num_Periodo  
    ,lines.company_code AS Empresa
    ,lines.brand_code AS Bandeira
    ,lines.product_code AS Produto
    ,lines.account_unit AS Conta_Contabil
    ,lines.account_name_ptb AS Descri_Conta_Contabil
    ,lines.cost_center AS Centro_Custo
    ,lines.intercompany_code AS Intercompany
    ,lines.business_unit AS Unidade_Negocio
    ,lines.future_code AS Futuro2
    ,lines.accounting_date AS Data_Contabil
    ,lines.posted_date AS Data_Postada
    ,lines.currency_code AS Moeda
    ,lines.line_description AS Descri_Linha
    ,lines.batch_name AS Journal_Batch
    ,lines.header_name AS Journal_Entry
    ,lines.supplier AS Fornecedor
    ,lines.item AS Item
    ,lines.period_num AS Mes
    ,lines.created_by AS Criado_Por
    ,lines.line_num AS Num_Lin
    ,lines.posted_by AS Postado_Por
    ,lines.initial_balance AS Saldo_Inicial
    ,lines.entered_debit AS Total_Debito
    ,lines.entered_credit AS Total_Credito
    ,lines.accounted_debit AS Total_Debito_Conv
    ,lines.accounted_credit AS Total_Credito_Conv
    ,lines.final_balance AS Saldo_Final
    ,lines.dre_classification AS Class_DRE
    ,lines.dre6 AS DRE
    -- 新增:统计当前记录中workers的出现次数(大小写不敏感)
    ,ARRAY_LENGTH(REGEXP_EXTRACT_ALL(lines.line_description, r'(?i)workers')) AS workers_count
FROM `my_project` lines
WHERE lines.chart_of_accounts_id  = "ID_account"
AND lines.accounting_date BETWEEN '2022-12-01' AND '2022-12-31'
-- 筛选出至少包含一次workers的记录
AND REGEXP_CONTAINS(lines.line_description, r'(?i)workers')

场景2:按维度分组统计关键词总出现次数

比如按公司代码(Empresa)分组,统计各公司下workers的总次数:

SELECT 
    lines.company_code AS Empresa
    ,SUM(ARRAY_LENGTH(REGEXP_EXTRACT_ALL(lines.line_description, r'(?i)workers'))) AS total_workers_count
FROM `my_project` lines
WHERE lines.chart_of_accounts_id  = "ID_account"
AND lines.accounting_date BETWEEN '2022-12-01' AND '2022-12-31'
AND REGEXP_CONTAINS(lines.line_description, r'(?i)workers')
GROUP BY lines.company_code
ORDER BY total_workers_count DESC

四、效率小贴士

  • 优先用日期原生函数筛选日期,避免类型转换后模糊匹配
  • 仅匹配固定词汇时,LIKE性能略优于正则;需复杂匹配规则时用正则更灵活
  • 需在多字段中匹配关键词时,可拼接字段后统一匹配:
    REGEXP_CONTAINS(lines.line_description || lines.account_name_ptb, r'(?i)workers')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:10:33