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

在BigQuery中按列堆栈/追加表

微生自怡
2023-03-14

我在BigQuery中有一个表,它每天获取新数据并将其附加到当前表中。此表称为:score_FULL。此外,我每天都会保存各个分数,如果我们选择今天的日期,score_20180125可以访问这些分数。每日分数每天都会附加到score_FULL

score_FULL包含:

visitorID         score
#Older scores first
1                 0.15
2                 0.78
3                 0.12
6                 0.90
------------------------
2                 0.22
6                 0.65
7                 0.61
10                0.24
------------------------
1                 0.31
2                 0.41
10                0.12
-------------------------
#Newest scores appended

我希望看到用户分数的变化。每次用户获得新分数时,我们都会水平追加。每次我们获得新用户时,我们都会垂直追加。假设用户每天只能获得1个分数,理想的解决方案是:

visitorID     score1      score2       score3
1             0.15        0.31
2             0.78        0.22         0.41
3             0.12 

例如,水平增长(新得分)和垂直增长(新用户)的表格

我可以在单个表上使用一系列左连接来执行类似的操作,但这只会为我提供我们运行左连接的第一个表中的访问者数据。

注意:我可以添加另一列Date,如果它使事情变得更容易,它将简单地为所有值重复相同的日期。

共有1个答案

晏正豪
2023-03-14

与其动态地添加列(这在这里是一个相当大的挑战),我建议在一个列中聚集各个访问者的分数,作为单独分数的数组或字符串

以下是 BigQuery Standard SQL

sql prettyprint-override">#standardSQL
WITH `project.dataset.score_FULL` AS ( 
  SELECT 1 visitorID, 0.15 score UNION ALL
  SELECT 2, 0.78 UNION ALL
  SELECT 3, 0.12 UNION ALL
  SELECT 6, 0.90 UNION ALL
  SELECT 2, 0.22 UNION ALL
  SELECT 6, 0.65 UNION ALL
  SELECT 7, 0.61 UNION ALL
  SELECT 10, 0.24 UNION ALL
  SELECT 1, 0.31 UNION ALL
  SELECT 2, 0.41 UNION ALL
  SELECT 10, 0.12 
)
SELECT 
  visitorID,
  ARRAY_AGG(score) scores_as_array,
  STRING_AGG(CAST(score AS STRING)) scores_as_list
FROM `project.dataset.score_FULL`
GROUP BY visitorID   

输出为

Row visitorID   scores_as_array scores_as_list   
1   1           0.15            0.15,0.31    
                0.31         
2   2           0.78            0.78,0.22,0.41   
                0.22         
                0.41         
3   3           0.12            0.12     
4   6           0.9             0.9,0.65     
                0.65         
5   7           0.61            0.61     
6   10          0.24            0.24,0.12    
                0.12         
 类似资料:
  • 是否有一种方便的方法(Python、Web UI或CLI)可以将新列插入现有BigQuery表(已经有100列左右)并相应地更新架构? 假设我想在第 49 列之后插入它。如果我通过查询执行此操作,我将不得不键入每个列名称,不是吗? 更新:建议的答案没有清楚地说明这如何适用于BigQuery。此外,文件似乎不包括 语法。测试确认 标识符不适用于 BigQuery。

  • 数字键盘字母组合问题[M]

  • 我有一个两个项目的列表,每个项目是一个文本字符串。我想围绕这两个项目循环,如果一个单词不在一组单词中,则基本上删除它。但是,下面的代码将所有单词放在一起,而不是创建两个单独的项。我希望我的更新列表包含两个项目,每个原始项目对应一个im更新:

  • 问题内容: 我正在运行一个用Java在Eclipse中编写的程序。对于很大的输入,该程序具有很深的递归级别。对于较小的输入,程序运行正常,但是在给出较大的输入时,出现以下错误: 可以通过增加Java堆栈大小来解决此问题,如果可以,那么如何在Eclipse中做到这一点? 更新: @乔恩·斯基特 该代码递归地遍历解析树以建立数据结构。因此,例如,代码将使用解析树中的一个节点来做一些工作,并在该节点的两

  • 我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?

  • 问题内容: 我正在编写一个包含10个存储桶列表的简单哈希表。使用内置函数计算索引,然后对表大小取模。但是,当我尝试将对象附加到该索引的存储桶列表时,它会附加到每个存储桶列表。我尝试用不同的方式定义add_HT,但我一直得到相同的结果。我究竟做错了什么? 问题答案: 使指向 同一列表 的指针数量增加。这里不是问题。您需要定义为。