【问题标题】:how to set a condition for arrays in where clause [BigQuery]如何在 where 子句 [BigQuery] 中为数组设置条件
【发布时间】:2019-04-30 14:51:18
【问题描述】:

我的表中有一个数组 - 如下所示:

我只需要考虑 'top_authors.author' = 'Caivi' 和 'top_authors.total_score' = 3 的行

我尝试使用 unnest 函数,但仍然收到错误消息“没有匹配的运算符 = 参数类型的签名:ARRAY、STRING。支持的签名:ANY = ANY”

你能帮我解决这个问题吗?

【问题讨论】:

  • 注意:(以防万一)and 'top_authors.total_score' = 3 - WHERE 子句的这一部分没有多大意义!
  • 我知道 :) 但在我的情况下,我必须在“where”子句中写两个条件 :) 但是你是对的 :D 在上述情况下,这部分 WHERE 没有意义。我在网上找不到更好的例子:)
  • 不要在网上寻找示例以包含和参考您的问题,因为这完全混淆了您的真实用例 - 而是按原样展示您的案例,以便我们能够为您提供帮助!跨度>

标签: sql google-cloud-platform google-bigquery


【解决方案1】:

你可以在where子句的子查询中unnest()

where exists (select 1
              from unnest(top_authors) ta
              where ta.author = 'Caivi' and ta.total_score = 3
             )

或者您可以在主查询中执行此操作:

select . . . 
from t cross join
     unnest(top_authors) ta
where ta.author = 'Caivi' and ta.total_score = 3;

假设数组中没有重复项,这些应该会产生相同的结果。

【讨论】:

  • 我刚刚尝试了您的解决方案,但对于这两种情况,我都收到错误消息:“运算符 = 参数类型没有匹配的签名:ARRAY, STRING。支持的签名:ANY = ANY at [ 6:22]"
  • @monika_w091 。 . .编辑您的问题并将示例数据作为 BigQuery CTE 提供,以便我们查看数据的真实外观。此代码应根据您提供的信息工作。
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多