代码之家  ›  专栏  ›  技术社区  ›  fraxture

在一系列表的大查询中从Google Analytics中获取平坦的命中数据

  •  1
  • fraxture  · 技术社区  · 7 年前

    以下是一个查询,用于平铺从Google Analytics传输到BigQuery的“点击”结果:

    SELECT
    *
    FROM flatten(flatten(flatten(flatten(flatten(flatten(flatten(flatten(flatten([ga_sessions_20171116], hits), hits.product), hits.product.customDimensions), hits.product.customMetrics), hits.promotion), hits.experiment), hits.customDimensions), hits.customVariables), hits.customMetrics)
    Limit 20
    

    如何在一系列表中执行相同的操作,或者这是否可能?我试过:

    SELECT
    *
    FROM flatten(flatten(flatten(flatten(flatten(flatten(flatten(flatten(flatten([ga_sessions_2017111*], hits), hits.product), hits.product.customDimensions), hits.product.customMetrics), hits.promotion), hits.experiment), hits.customDimensions), hits.customVariables), hits.customMetrics)
    WHERE _TABLE_SUFFIX BETWEEN '0' and '10'
    Limit 20
    

    但它不起作用。有人知道怎么做吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Willian Fuks    7 年前

    在中使用嵌套数据 Standard SQL 比遗留版本容易得多(因为查询语法和行为的可预测性)。

    尽管如此,还是要考虑使用它。您在Standard中的查询类似于:

    SELECT
      fullvisitorid visitor_id,
      prods.productSku sku,
      custd.index index
    FROM `project_id.dataset_id.ga_sessions_*`,
    UNNEST(hits) hits,
    UNNEST(hits.product) prods,
    UNNEST(prods.customDimensions) custd
    WHERE _TABLE_SUFFIX BETWEEN '20171110' and '20171111'
    LIMIT 1000
    

    这只是一个例子,但希望它足以理解这个概念。

    hits 是一个 重复的 结构 这就像:

    hits = [{'hitNumber': 1, 'product': [{'productSku': 'sku0'}]}, {'hitNumber': 2}, ...]
    

    当您应用 unnest(hits) AS unnested_hits 它变成的操作:

    unnested_hits = {'hitNumber': 1, 'product': [{'productSku': 'sku0'}]},
                    {'hitNumber': 2}
                    ...
    

    所以如果你叫它 "unnested_hits" ,当你引用这个别名时,你会得到这个平坦的数据。你可以继续这样下去,比如在球场上打球 product 在…内 unnested_hits

    为了更深入地理解这些概念,请确保通读 docs ,它们写得很好,您可以学习在BigQuery中有效工作所需的几乎所有内容。

    最后要注意的是,您正在从GA中选择所有字段。正如老话所说,每次有人运行该类型的查询时 "SELECT * FROM TABLE" 世界上某个地方的一只熊猫死了。

    您必须非常小心地在BQ中运行这种类型的查询,因为您将按处理的数据量计费;确保你只带了绝对必要的东西。