【问题标题】:Stack / Append the table column-wise in BigQuery在 BigQuery 中按列堆叠/追加表格
【发布时间】:2018-07-04 12:41:57
【问题描述】:

我在 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,它将简单地重复 所有值的相同日期,如果它使事情变得更容易的话。

【问题讨论】:

  • 您在完整表格中是否有每一行的日期?
  • 不,我没有,但我确实有来自score_DATE 表的日期,它被附加到FULL 表中。虽然,如果有一个简单的解决方案,我也可以将日期添加到表格中。因此它将为当天附加的所有行附加相同的日期
  • 您曾经使用过窗口函数或表通配符查询吗?您的数据可以返回的最大天数是多少?
  • @Pentium10 不,我没有。目前只能追溯到 6 天,但这会每天增长。我也许可以做到只报告最后n 天。
  • 你使用表分区吗?如果没有,为什么不呢?

标签: sql google-bigquery


【解决方案1】:

而不是动态添加列(这在这里是一个相当大的挑战) - 我建议将各个访问者的分数聚合在一列中,作为单个分数的数组或字符串

以下是 BigQuery 标准 SQL

#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         

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 2017-04-29
    • 2021-09-15
    • 2022-10-25
    • 2014-05-09
    相关资源
    最近更新 更多