BigQuery错误-未分类的名称-合并GA数据时

时间:2019-03-04 16:51:36

标签: sql google-bigquery

我想将日期,国家和来源维度与会话和唯一事件组合为事件类别“下载”。基于此数据,稍后我想在DataStudio中计算“下载转换率”。老实说,我是SQL的新手。但我希望至少我在思考正确的方法。

尝试下面的查询时,出现以下错误: 无法识别的名称:下载地址为[40:3]

WITH
  ga_tables AS (
  SELECT
    date,
    trafficSource.source AS Source,
    geoNetwork.country AS Country,
    COUNT ( trafficSource.source ) AS Sessions
  FROM
    `xxxxxx.ga_sessions_*`
  WHERE
    _TABLE_SUFFIX BETWEEN '20190301'
    AND '20190301'
  GROUP BY
    date,
    Source,
    Country
  UNION ALL
  SELECT
    date,
    trafficSource.source AS Source,
    geoNetwork.country AS Country,
    COUNT(DISTINCT CONCAT(CAST(fullVisitorId AS string),'-',CAST(visitId AS string),'-',CAST(date AS string),'-',ifnull(hits.eventInfo.eventLabel,
          'null'))) AS Downloads
  FROM
    `xxxxxx.ga_sessions_*`,
    UNNEST(hits) AS hits
  WHERE
    _TABLE_SUFFIX BETWEEN '20190301'
    AND '20190301'
    AND hits.type = 'EVENT'
    AND hits.eventInfo.eventCategory = 'Downloads'
  GROUP BY
    date,
    Source,
    Country )
SELECT
  date,
  Country,
  Source,
  Downloads,
  Sessions
FROM
  ga_tables
ORDER BY
  Sessions ASC

1 个答案:

答案 0 :(得分:1)

在with语句中,第一个select语句中的第四列称为Sessions,而与之结合的语句中的第四列称为Downloads。由于UNION ALL的性质,最终的输出列将称为Sessions,因此在查询时不存在。如果您希望“会话”和“下载”是单独的列,请使查询看起来像这样:

 WITH
  ga_tables AS (
  SELECT
    date,
    trafficSource.source AS Source,
    geoNetwork.country AS Country,
    COUNT ( trafficSource.source ) AS Sessions,
    NULL AS Downloads
  FROM
    `xxxxxx.ga_sessions_*`
  WHERE
    _TABLE_SUFFIX BETWEEN '20190301'
    AND '20190301'
  GROUP BY
    date,
    Source,
    Country
  UNION ALL
  SELECT
    date,
    trafficSource.source AS Source,
    geoNetwork.country AS Country,
    NULL AS Sessions,
    COUNT(DISTINCT CONCAT(CAST(fullVisitorId AS string),'-',CAST(visitId AS string),'-',CAST(date AS string),'-',ifnull(hits.eventInfo.eventLabel,
          'null'))) AS Downloads
  FROM
    `xxxxxx.ga_sessions_*`,
    UNNEST(hits) AS hits
  WHERE
    _TABLE_SUFFIX BETWEEN '20190301'
    AND '20190301'
    AND hits.type = 'EVENT'
    AND hits.eventInfo.eventCategory = 'Downloads'
  GROUP BY
    date,
    Source,
    Country )

编辑:给定您想要对表执行的操作,您可能希望将ga_tables重写为如下形式:

WITH
ga_tables AS (SELECT
  date,
  trafficSource.source AS Source,
  geoNetwork.country AS Country,
  MAX(Sessions) AS Sessions,
  COUNT(DISTINCT CONCAT(CAST(fullVisitorId AS string),'-',CAST(visitId AS string),'-',CAST(date AS string),'-',ifnull(hits.eventInfo.eventLabel,
        'null'))) AS Downloads
FROM (
  SELECT
    *,
    COUNT(trafficSource.source) OVER (PARTITION BY date, Source, Country) AS Sessions
  FROM
    `xxxxxx.ga_sessions_*`),
  UNNEST(hits) AS hits
WHERE
  _TABLE_SUFFIX BETWEEN '20190301'
  AND '20190301'
  AND hits.type = 'EVENT'
  AND hits.eventInfo.eventCategory = 'Downloads'
GROUP BY
  date,
  Source,
  Country)