【问题标题】:BigQuery : filter repeated fields together with normal fieldBigQuery:过滤重复字段和普通字段
【发布时间】:2021-01-02 02:12:16
【问题描述】:

我有下表:

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"
    ]
  }
]

模式 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 : filter repeated fields with standard 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"
  }
]

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

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    以下是 BigQuery 标准 SQL

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

    【讨论】:

      【解决方案2】:

      我将发布我所做的解决方案,它可以满足我的需要,可能对其他人有用

      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"
          ]
        }
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-26
        • 1970-01-01
        • 2021-11-06
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多