BigQuery:如何根据指定客户列表返回对应记录
解决Excel CustomerId列表作为BigQuery筛选条件的简便方法
首先要纠正你当前查询的问题:CustomerId = '1,2,3 ... 1000'的写法是错误的,这会把多个ID当成单个字符串去匹配,根本查不到正确结果。下面是几种更简便的处理方式,不需要手动转置后逐个输入:
方法一:Excel快速生成IN子句格式
不用转置,直接用Excel公式生成符合BigQuery要求的格式:
- 如果CustomerId是字符串类型:在Excel空白单元格(比如B1)输入公式
="'"&A1&"',",下拉填充到所有ID行,然后复制B列内容,去掉最后一个多余的逗号,粘贴到IN()中,最终查询类似:
SELECT CustomerId, Status, OrderTotal, StoreCode, PaymentAmount FROM Orders WHERE OrderPlacedTime > '2022-01-01' AND CustomerId IN ('1','2','3',...,'1000')
- 如果CustomerId是数字类型:把公式改成
=A1&",",同样处理后去掉最后一个逗号,去掉单引号即可。
方法二:导入Excel数据为临时表关联查询(适合大量ID)
当ID数量上千甚至更多时,手动拼字符串容易出错,推荐这种方法:
- 将Excel中的CustomerId列单独导出为CSV文件(只保留ID列,不要表头也可以);
- 在BigQuery中创建临时表(比如命名为
temp_customer_ids),导入这个CSV文件; - 通过关联查询实现筛选:
SELECT o.CustomerId, o.Status, o.OrderTotal, o.StoreCode, o.PaymentAmount FROM Orders o JOIN temp_customer_ids t ON o.CustomerId = t.CustomerId WHERE o.OrderPlacedTime > '2022-01-01'
方法三:用UNNEST配合数组筛选
如果ID数量不算特别多,也可以用数组配合UNNEST:
- 用Excel的TEXTJOIN函数(2019及以上版本支持)直接生成数组字符串:在空白单元格输入
="["&TEXTJOIN(",",TRUE,"'"&A1:A1000&"'")&"]",生成结果类似['1','2','3',...,'1000']; - 将生成的数组字符串放到查询中:
SELECT CustomerId, Status, OrderTotal, StoreCode, PaymentAmount FROM Orders WHERE OrderPlacedTime > '2022-01-01' AND CustomerId IN UNNEST(['1','2','3',...,'1000'])
如果是数字类型ID,去掉公式里的单引号即可。
内容的提问来源于stack exchange,提问作者cggdren
相关产品推荐
相关产品推荐

