尝试根据整数列表过滤行时,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 中获取按标签过滤的表列表