Как UNNEST и сгладить все записи в BigQuery, глядя на Google Analytics - PullRequest
0 голосов
/ 28 марта 2020

При анализе данных GA в BigQuery я обнаружил повторяющиеся записи с одинаковыми значениями для следующих полей

  • fullVisitorId
  • visitStartTime
  • hit.hitNumber

Я немного отфильтровал результаты по спецификациям c fullVisitorId и visitStartTime

SELECT
  fullVisitorId,
  visitStartTime,
  hits.hitNumber,
  hits.time,
  TIMESTAMP_SECONDS(CAST(visitStartTime + 0.001 * hits.time AS INT64)) AS hitsTimestamp
FROM
  `testGAview.ga_sessions_20200113`,
  UNNEST(hits) AS hits
WHERE
  fullVisitorId = '324982394082304'
  AND visitStartTime = 324234233
ORDER BY
  fullVisitorId,
  visitStartTime,
  hitNumber

Приведенный выше запрос возвращает 13 записей, которые имеют одинаковые fullVisitorId, visitStartTime и hit.hitNumber. Я не уверен, как это возможно, потому что, глядя на [схему] [1], все эти поля одинаковы для другой строки, неожиданно. Я должен сказать, что это очень маленький процент записей .002%, поэтому я думаю, что это может быть проблема обработки на конце GA.

То, что я хотел бы сделать сейчас, это удалить ВСЕ из поля, чтобы увидеть другие значения, наряду с fullVisitorId, visitStartTime и hitNumber

SELECT
  *
FROM
  `testGAview.ga_sessions_20200113` UNNEST(hits) AS h,
WHERE
  fullVisitorId = '324982394082304'
  AND visitStartTime = 324234233
  AND hits.hitNumber = 23

Я надеюсь, что приведенные выше значения возвращаются в 2 строки, которые удовлетворяют вышеуказанным условиям, а также показывают значения для всех остальных поля, чтобы увидеть, если они точно так же.

Кто-нибудь может помочь с этим? Спасибо!

1 Ответ

0 голосов
/ 29 марта 2020

Реальный вопрос, кажется, заключается в том, «как сравнивать, если две строки идентичны». Я прав?

Это решило бы эту проблему:

CREATE TEMP FUNCTION first_two_identical(x ANY TYPE) AS (
   TO_JSON_STRING(x[OFFSET(0)]) = TO_JSON_STRING(x[OFFSET(1)])
);

SELECT first_two_identical(ARRAY_AGG(a)) identical
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` a
WHERE visitId IN (1501583974, 1501616585)
  • SELECT выбирает 2 строки (полную строку) и упаковывает их вместе в массив.
  • Массив отправляется в функцию first_two_identical()
  • Функция получает первые 2 элемента массива, который она получает.
  • Для преобразования полных строк в сопоставимые объекты мы использовали TO_JSON_STRING().

Вот и все.

...