首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BigQuery :过滤重复字段和普通字段

问BigQuery :过滤重复字段和普通字段
EN

Stack Overflow用户
提问于 2020-09-15 18:21:16
回答 2查看 23关注 0票数 0

我有下表:

代码语言:javascript
复制
row | cust_id | name
1   | 34      | word1 word2 someworkd  
    |         | something word1
    |         | blabla
2   | 35      | word1 word2 word3
    |         | word4 word5

select * result JSON

代码语言:javascript
复制
[
  {
    "cust_id": "34",
    "name": [
      "word1 word2 someworkd",
      "something word1",
      "blabla"
    ]
  },
  {
    "cust_id": "35",
    "name": [
      "word1 word2 word3",
      "word4 word5",
      "word1word5"
    ]
  }
]

模式JSON:

代码语言:javascript
复制
[
  {
    "mode": "NULLABLE",
    "name": "cust_id",
    "type": "STRING"

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

我想根据cust_id和重复字段的值进行过滤,所以查询如下:

代码语言:javascript
复制
SELECT * FROM `mytable` WHERE  cust_id='34' and name like'%word1%'

查询的预期输出:

代码语言:javascript
复制
row | cust_id | name
1   | 34      | word1 word2 someworkd  
    |         | something word1

JSON格式查询的预期输出:

代码语言:javascript
复制
  {
    "cust_id": "34",
    "name": [
      "word1 word2 someworkd",
      "something word1"
    ]
  }
]

受这个问题BigQuery : filter repeated fields with standard SQL的启发,我尝试了这个查询:

代码语言:javascript
复制
SELECT cust_id, name   FROM `mytable`, UNNEST(name) AS name WITH OFFSET o
WHERE name like '%word1%' and cust_id='34'

它输出以下内容:

代码语言:javascript
复制
row | cust_id | name
1   | 34      | word1 word2 someworkd  
    | 34      | something word1

输出JSON:

代码语言:javascript
复制
[
  {
    "cust_id": "34",
    "name": "word1 word2 someworkd"
  },
  {
    "cust_id": "34",
    "name": "something word1"
  }
]

输出结果与我想要的不一样,请问如何实现?

EN

回答 2

Stack Overflow用户

发布于 2020-09-15 20:36:31

我会发布我所做的解决方案,这是我需要的,也许对其他人有用

代码语言:javascript
复制
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"

结果:

代码语言:javascript
复制
row | cust_id | name
1   | 34      | word1 word2 someworkd  
    |         | something word1

JSON:

代码语言:javascript
复制
[
  {
    "cust_id": "34",
    "name": [
      "word1 word2 someworkd",
      "something word1"
    ]
  }
]
票数 0
EN

Stack Overflow用户

发布于 2020-09-16 01:35:11

下面是针对BigQuery标准SQL的说明

代码语言:javascript
复制
#standardSQL
SELECT * REPLACE(
    ARRAY(SELECT * FROM t.name WHERE name LIKE'%word1%') 
  AS name)
FROM `project.dataset.table` t
WHERE cust_id = 34
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63899829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档