当前位置: 首页 > 知识库问答 >
问题:

BigQuery:将重复字段与普通字段一起过滤

单凯捷
2023-03-14

我有下表:

row | cust_id | name
1   | 34      | word1 word2 someworkd  
    |         | something word1
    |         | blabla
2   | 35      | word1 word2 word3
    |         | word4 word5

选择*结果JSON

[
  {
    "cust_id": "34",
    "name": [
      "word1 word2 someworkd",
      "something word1",
      "blabla"
    ]
  },
  {
    "cust_id": "35",
    "name": [
      "word1 word2 word3",
      "word4 word5",
      "word1word5"
    ]
  }
]

schema JSON:

[
  {
    "mode": "NULLABLE",
    "name": "cust_id",
    "type": "STRING"

  },
  {
    "mode": "REPEATED",
    "name": "name",
    "type": "STRING"
  }
]

我想通过cust_id和重复的字段来过滤它们的值,所以查询如下:

SELECT * FROM `mytable` WHERE  cust_id='34' and name like'%word1%'

查询的预期输出:

row | cust_id | name
1   | 34      | word1 word2 someworkd  
    |         | something word1

JSON格式查询的预期输出:

  {
    "cust_id": "34",
    "name": [
      "word1 word2 someworkd",
      "something word1"
    ]
  }
]

受这个问题的启发BigQuery:用标准SQL过滤重复字段我试试这个查询:

SELECT cust_id, name   FROM `mytable`, UNNEST(name) AS name WITH OFFSET o
WHERE name like '%word1%' and cust_id='34'

哪个输出:

row | cust_id | name
1   | 34      | word1 word2 someworkd  
    | 34      | something word1

输出JSON:

[
  {
    "cust_id": "34",
    "name": "word1 word2 someworkd"
  },
  {
    "cust_id": "34",
    "name": "something word1"
  }
]

输出结果是不一样的,我想有,我如何才能实现这一点?

共有2个答案

苏边浩
2023-03-14

以下是 BigQuery Standard SQL

#standardSQL
SELECT * REPLACE(
    ARRAY(SELECT * FROM t.name WHERE name LIKE'%word1%') 
  AS name)
FROM `project.dataset.table` t
WHERE cust_id = 34
赏育
2023-03-14

我将发布我所做的解决方案,该解决方案根据需要工作,可能对其他人有用

SELECT
  cust_id,
  ARRAY(
  SELECT
    name
  FROM
    `mytable`,
    UNNEST(name) AS name
  WHERE
    name LIKE '%word1%'
    AND cust_id='34') AS name
FROM
  `mytable`
WHERE
  cust_id="34"

结果:

row | cust_id | name
1   | 34      | word1 word2 someworkd  
    |         | something word1

JSON:

[
  {
    "cust_id": "34",
    "name": [
      "word1 word2 someworkd",
      "something word1"
    ]
  }
]
 类似资料:
  • 我在Google BigQuery中有一个表,它由几个字段组成,然后是一个可能包含一个或多个对象的重复记录。我想在重复数据中创建一个新表,其中包含一个额外字段,并将原始数据复制到新表中,用GENERATE_UUID()的输出填充新字段,以便每个重复数据行都有一个唯一标识符。 我有一个类似的问题,当目标包含重复字段时,如何从一个BigQuery表复制到另一个?但我不知道如何调整它以适应我当前的用例。

  • 这似乎是一个基本问题,但我无法在其他地方找到答案。如果这是一个重复的帖子,请原谅。 是否可以对标记为@XmlAccessorType(XmlAccessType. FIELD)的类进行@XmlValue注释? 我正在尝试使用JAXB解析XML文件,虽然XML本身很大并且有其他字段,但问题特定于此字段: 映射为: 该字段在XML中声明为令牌类型。 @XmlValue注释给我一个IllegalAnno

  • 问题内容: 当我需要使用LIKE%..%语句中的字段中的值时,我陷入了一个微妙的SQL问题。 例子: 这只是我脑海中的一个例子,显示了我需要做的事情(我知道这是行不通的)。我需要在LIKE%..%中使用t2.Name的值 我想这是微不足道的;) 问题答案: 使用:

  • 我有一个如下所示的对象列表: 我想将其转换为如下对象列表: 基本上将同一类别的所有值相加。 我应该使用平面图吗?减少我不明白这些的细微差别。 帮助 编辑: 这个问题有密切的重复:流中是否有聚合通过方法Java8 api?和带有Stream API的对象的总和属性 但在这两种情况下,最终的结果都是地图,而不是列表 根据@AndrewTobilko和@JBNizet的回答,我使用的最终解决方案是:

  • 例如insert时需要忽略某个特定属性, update时只更新某些属性, 查询时需要跳过大字段等。 FieldFilter/FieldMatcher提供细致的过滤选项,包括: 黑名单(locked) 白名单(actived) 忽略空值(ignoreNull) 忽略数值0(ignoreZero) 忽略日期属性(ignoreDate) 忽略空字符串(ignoreBlankStr) 忽略数值型主键(ig