Ошибка BigQuery - Некатегоризованное имя - При объединении данных GA - PullRequest
0 голосов
/ 04 марта 2019

Я хочу объединить дату, страну и источник измерений с сессиями и уникальными событиями для категории событий «Загрузки».Основываясь на этих данных, я хочу позже рассчитать конверсию загрузки в 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 голосов
/ 05 марта 2019

В вашем операторе 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...