【问题标题】:SQL/BigQuery: Output data that match STRING array elements of same indexSQL/BigQuery:输出与相同索引的 STRING 数组元素匹配的数据
【发布时间】:2022-01-06 00:44:12
【问题描述】:

我想在 SQL/BigQuery 中的先前匹配期间输出与索引匹配的数组内的元素

目标是将 MATCH_ID 与 MATCH_HOME 或 MATCH_AWAY 匹配,然后从 MATCH_HOME_DATE(如果匹配 MATCH_HOME 中的元素)或 MATCH_AWAY_DATE(如果匹配 MATCH_AWAY 中的元素)输出日期(作为 MATCH_DATE)。匹配日期应与 MATCH_HOME 或 MATCH_DATE 中匹配的索引具有相同的索引

例如,我有这 5 个字段(及其数据类型)

MATCH_ID (STRING) MATCH_HOME (STRING) MATCH_AWAY (STRING) MATCH_HOME_DATE (ARRAY(STRING)) MATCH_AWAY_DATE (ARRAY(STRING))
19.56V.25 19.56V.25, 19.52X.26 19.48W.27, 19.35R.28 [2021-10-30,2021-10-31] [2021-11-05,2021-11-06]
19.24C.17 19.25S.19, 19.15M.17 19.21A.19, 19.24C.17 [2021-11-27,2021-11-28] [2021-12-11,2021-12-12]

输出 MATCH_DATE 应该是:

|MATCH_DATE |
|:---- |
| 2021-10-30 |
| 2021-12-12 |

因为第 1 行匹配 MATCH_HOME 的第一个元素,第 2 行匹配 MATCH_AWAY 的第二个元素。

【问题讨论】:

  • 是不是和你问的这个stackoverflow.com/questions/70105670/…类似的问题?
  • 我认为这是完全相同的问题和解决方案,前提是这里可以完美运行!你能解释一下这里有什么区别吗!
  • 嗨!主要区别在于我在第一篇文章中提供的数据过于简单,没有强调我正在处理的真实数据类型。我在处理 STRING 和 ARRAY(STRING) 数据集时遇到了困难,所以我在这个问题中指出了这一点。

标签: sql arrays indexing google-bigquery match


【解决方案1】:

需要将字符串转换为数组。然后JOINUNNESTed 数组按索引。

WITH t AS (
    SELECT
    '19.56V.25' MATCH_ID,
    '19.56V.25, 19.52X.26' MATCH_HOME,
    '19.48W.27, 19.35R.28' MATCH_AWAY,
    ['2021-10-30',
    '2021-10-31'] MATCH_HOME_DATE,
    ['2021-11-05',
    '2021-11-06'] MATCH_AWAY_DATE
    UNION ALL
    SELECT
    '19.24C.17',
    '19.25S.19, 19.15M.17',
    '19.21A.19, 19.24C.17',
    ['2021-11-27',
    '2021-11-28'],
    ['2021-12-11',
    '2021-12-12']
)
SELECT MATCH_ID, arr_1 MATCH_HOME, arr_2 MATCH_AWAY, MATCH_HOME_DATE, MATCH_AWAY_DATE FROM (
    SELECT * , 
    SPLIT(MATCH_HOME, ', ') MATCH_HOME_arr, 
    SPLIT(MATCH_AWAY, ', ') MATCH_AWAY_arr 
    FROM t
)
JOIN UNNEST(MATCH_HOME_arr) arr_1 WITH OFFSET 
JOIN UNNEST(MATCH_AWAY_arr) arr_2 WITH OFFSET USING (OFFSET)
JOIN UNNEST(MATCH_HOME_DATE) MATCH_HOME_DATE WITH OFFSET USING (OFFSET)
JOIN UNNEST(MATCH_AWAY_DATE) MATCH_AWAY_DATE WITH OFFSET USING (OFFSET)

【讨论】:

  • 嗨 Timo,看起来这与我想做的非常不同。我想做一些匹配,而不分解数据集(尽可能)。
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 2017-11-26
  • 2015-01-03
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
相关资源
最近更新 更多