【问题标题】:How to combine multiple row data based on relationships如何根据关系组合多行数据
【发布时间】:2020-10-08 07:52:51
【问题描述】:

所以我有两列 group_user_id 和 user_ids 数组。最终目标是根据不同 user_id 之间的传递关系组合 user_id_list 数组。

例如,目前我有以下格式的数据

group_user_id              user_id_list
    123                        123
                               456
                               345
                               234
    567                        567
                               678
                               456

我正在尝试实现这一点,基于关系 123 - 456 - 567 并因此从 group_user_id 123 和 567 加入 user_id_list。 PS:user_id_list 中的 user_ids 顺序无关紧要。

group_user_id              user_id_list
    123                        123
                               456
                               345
                               234
                               567
                               678
    567                        567
                               123
                               345
                               234
                               678
                               456

我知道使用 graphDB 之类的东西可能会简单得多。但是,我坚持使用 google-bigquery

【问题讨论】:

  • 这需要递归或循环。 BigQuery 不直接通过select 支持,但您可以使用脚本语言编写循环。

标签: sql arrays google-bigquery


【解决方案1】:

我只花了几分钟看这个,但希望这就是你要找的,我没有完全错过 - 理解你的问题。

您在 user_id_list 列上执行自联接,然后使用联接中的新 group_id 字段重新加入原始表:

SELECT distinct
  v1.group_id v1_group_id,
  v3.user_id_list v3_user_id_list
FROM
  simon_test.test_data v1
JOIN simon_test.test_data v2
  on v1.user_id_list = v2.user_id_list
join simon_test.test_data v3
  on v2.group_id = v3.group_id
order by v1_group_id, v3_user_id_list;

以上产生:

|----------+--------------|
| group_id | user_id_list |
|----------+--------------|
|      123 |          123 |
|          |          234 |
|          |          345 |
|          |          456 |
|          |          567 |
|          |          678 |
|      567 |          123 |
|          |          234 |
|          |          345 |
|          |          456 |
|          |          567 |
|          |          678 |
|----------+--------------|

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多