尝试根据整数列表过滤行时,BigQuery 没有匹配的签名

Posted

技术标签:

【中文标题】尝试根据整数列表过滤行时,BigQuery 没有匹配的签名【英文标题】:BigQuery no matching signature when trying to filter rows based on on list of integers 【发布时间】:2019-03-15 15:13:25 【问题描述】:

我正在尝试提取列 Code 与列表中的一个整数匹配的某些行:

SELECT DISTINCT *
FROM `detail_table`
WHERE Date BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN UNNEST([36516, 152])

但是,我得到了错误:

google.api_core.exceptions.BadRequest: 400 没有匹配的签名 运算符 IN UNNEST 用于参数类型:STRING、ARRAY

我应该怎么做才能让它发挥作用?当它的字符串然后它工作正常,但我必须过滤整数。

【问题讨论】:

Code 是整数的字符串表示吗?如果是,你可以CAST(Code AS INT64) 代码确实是字符串,我认为它是一个数字,因为它只有数字,但表格存储为字符串......这就是为什么 【参考方案1】:

改用下面的

#standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN UNNEST(['36516', '152'])  

#standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND CAST(Code AS INT64) IN UNNEST([36516, 152])   

或者甚至只是(取决于你的情况)

#standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN ('36516', '152')

【讨论】:

以上是关于尝试根据整数列表过滤行时,BigQuery 没有匹配的签名的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java 客户端库在 BigQuery 中获取按标签过滤的表列表

是否有元数据表来检查 BigQuery 中的表是否已分区?

BigQuery - 基于字段/过滤器构建动态选择语句/查询

BigQuery - 分组并使用数组字段作为过滤器

BigQuery:根据匹配和产品范围维度过滤掉匹配

如何根据某些过滤条件从 bigquery 导出数据