【问题标题】:Matching multiple values using ARRAY_CONTAINS in Spark SQL在 Spark SQL 中使用 ARRAY_CONTAINS 匹配多个值
【发布时间】:2017-07-29 15:58:23
【问题描述】:

我可以单独使用ARRAY_CONTAINS 函数ARRAY_CONTAINS(array, value1) AND ARRAY_CONTAINS(array, value2) 来获得结果。但我不想多次使用ARRAY_CONTAINS。是否有一个函数可以同时检查两个值在数组中是否存在。

【问题讨论】:

  • 为什么不想多次使用 ARRAY_CONTAINS?
  • 我使用的是内连接,因此单独检查值可能会导致额外开销。
  • 这似乎没有多大意义。请展示您的代码(或简化代码)和一个小数据示例
  • 表包含id, label, Array[type], Array[feature], textual1, numeric1 and numeric2 列。查询是(SELECT id, label, textual1 FROM table WHERE ARRAY_CONTAINS(type, 'productType1') AND ARRAY_CONTAINS(feature, 'feature1') AND ARRAY_CONTAINS(feature, 'feature2') AND numeric1 > 3) UNION (SELECT id, label, textual1 FROM table WHERE ARRAY_CONTAINS(type, 'productType1') AND ARRAY_CONTAINS(feature, 'feature1') AND ARRAY_CONTAINS(feature, 'feature3') AND numeric2 > 4) ORDER BY label
  • 请将其移至您的帖子

标签: apache-spark-sql hiveql


【解决方案1】:

您的查询可以写成如下 -

SELECT      id, label, textual1 

FROM        table 

WHERE       ARRAY_CONTAINS(type     ,'productType1') 
        AND ARRAY_CONTAINS(feature  ,'feature1') 

        AND (   
                (   ARRAY_CONTAINS(feature  ,'feature2') 
                AND numeric1 > 3
                )

            or  (   ARRAY_CONTAINS(feature  ,'feature3') 
                AND numeric2 > 4
                )
            )

ORDER BY    label

【讨论】:

  • 感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 1970-01-01
  • 2019-11-13
  • 1970-01-01
相关资源
最近更新 更多