首页 > 解决方案 > 将字符串类型的列转换为数组/记录,即嵌套列

问题描述

我正在尝试从我的 bigquery 数据集中的多个表中计算和检索一些指标。我想调用嵌套,sfam这是我现在无法执行的字符串列,即它可以有值或为空。所以目标是将该列转换为数组/记录……这就是我想到的想法,我不知道如何去做。

productcartkey_webdat_logunivsunivfam分组sfam。_

数据被分解为称为 的宇宙,univ该宇宙由称为 的子宇宙组成suniv。子宇宙包含称为“fam”的家庭,可能有也可能没有称为 的子家庭sfam。我想调用嵌套prd.sfam来减少结果列。

这些数据是从谷歌分析收集的,用于深入了解网站流量和用户活动。

我试图获取有关每个访问者的信息和指标,他/她在特定页面上花费的时间,采取的行动等等。结果表为我提供了在这些页面上花费的时间总和,一天的总访问次数总和以及它所属的类别的细分,因此字符串类型的、univ和列(sfam 可以为 null因为有些子宇宙suniv只有家庭,并没有下降到子家庭级别。sunivfamsfamfamsfam

我尝试了在网上找到的不同方法,但都没有奏效,所以我发布了我的代码和问题,希望能找到指导和解决方案!

一个更简单的查询是:

 select
        prd.key_web
        , dat_log
        , prd.nrb_fp
        , prd.tps_fp
        , prd.univ
        , prd.suniv
        , prd.fam
        , prd.sfam
    from product as prd
    left join cart as cart
        on prd.key_web = cart.key_web
        and prd.dat_log = cart.dat_log
        and prd.univ = cart.univ
        and prd.suniv = cart.suniv
        and prd.fam = cart.fam
        and prd.sfam = cart.sfam

这是查询文本和图像中最后 6 列的示例结果:

同样,我想获得一列数组,sfam因为我有所有sfam偶数空值的字符串值。

我将输出限制为仅最后 6 列,前 3 列是行,key_web并且dat_log. 每个fam都由几个sfam或没有(null)组成,我希望能够在famor上进行嵌套sfam

标签: sqlnestedgoogle-bigquery

解决方案


我想得到一列数组,sfam因为我有所有sfam偶数的字符串值。

这在 BigQuery 中是不可能的。正如文档所解释的:

目前,BigQuery 对于 NULL 和 ARRAY 有以下两个限制:

如果查询结果包含包含 NULL 元素的 ARRAY,BigQuery 会引发错误,尽管此类 ARRAY 可以在查询中使用。

也就是说,您的结果集不能包含带有NULL元素的数组。


推荐阅读