FLATTEN с TABLE_DATE_RANGE

17

У меня есть набор таблиц в наборе данных и вам нужно запросить их все, а FLATTENing - одну из повторяющихся записей. Например, такой запрос выглядит следующим образом:

 SELECT
   date,
   customDimensions.value AS customDimension,
   hits.page.pagePath AS pagePath
FROM
   (FLATTEN( [<projectId>:<datasetId>.ga_sessions_20130910] ,
   customDimensions)) 
WHERE
   hits.page.pagePath CONTAINS '/helmets' 
   AND customDimensions.index IN (1,2,3)

Однако у меня возникают проблемы с FLATTENing при использовании подстановочных знаков в таблице. Может ли кто-нибудь помочь мне с синтаксисом? Можно ли использовать FLATTEN с TABLE_DATE_RANGE?

SELECT
   date,
   customDimensions.value AS customDimension,
   hits.page.pagePath AS pagePath
FROM
   (FLATTEN (TABLE_DATE_RANGE ([<project>:<dataset>.ga_sessions_],
   TIMESTAMP('2013-09-10'),
   TIMESTAMP ('2014-06-10'))),
   customDimensions) 
WHERE
   hits.page.pagePath CONTAINS '/helmets' 
   AND customDimensions.index IN (1,2,3)

Спасибо, Шаян

    
задан Shayan Masood 12.06.2014 в 18:19
источник

2 ответа

16

Согласно справочному руководству, синтаксис FLATTEN:

...(FLATTEN ([project_name:]datasetId.tableId, flattenField))..
...(FLATTEN (subselect_clause, flattenField))..

Исходя из этого, я попытался бы поставить предложение subselect в инструкции FLATTEN следующим образом:

SELECT
date,
customDimensions.value AS customDimension,
hits.page.pagePath AS pagePath
FROM
FLATTEN(
(SELECT date, customDimensions, hits FROM TABLE_DATE_RANGE ([<project>:<dataset>.ga_sessions_],
TIMESTAMP('2013-09-10'),TIMESTAMP ('2014-06-10')))
, customDimensions)
WHERE
hits.page.pagePath CONTAINS '/helmets' 
AND customDimensions.index IN (1,2,3)
    
ответ дан David M Smith 19.06.2014 в 20:17
  • Спасибо! Уже изучил этот параметр, но надеялся, что FLATTEN работал с TABLE_DATE_RANGE для более чистых запросов. Наверное, пока это невозможно. Я напишу для запроса функции. –  Shayan Masood 19.06.2014 в 20:42
  • Я согласен - это было бы хорошо. +1 по запросу функции ;-) –  David M Smith 19.06.2014 в 20:56
  • Решение не работает. Я получил это сообщение об ошибке: Ошибка: поле «customDimensions» не найдено. –  Sébastien Brodeur 04.02.2016 в 00:31
  • Вы можете добавить один из них в этот запрос: code.google.com/p/google-bigquery/issues/... –  goose 19.01.2017 в 10:49
  • Ответ, вероятно, должен перейти к использованию стандартного SQL. Я вернулся к наследию, потому что у него были некоторые функции, которые стандарт еще не имеет. Однако я обнаружил, что тезисы были достаточно простыми для реализации с пользовательскими функциями: cloud.google.com/bigquery/docs/reference/standard-sql/... –  goose 19.01.2017 в 15:10
0

Попробуй, это работает для меня ..

SELECT
   date,
   customDimensions.value AS customDimension,
   hits.page.pagePath AS pagePath
FROM
   (FLATTEN (SELECT * FROM TABLE_DATE_RANGE ([<project>:<dataset>.ga_sessions_],
   TIMESTAMP('2013-09-10'),
   TIMESTAMP ('2014-06-10'))),
   customDimensions) 
WHERE
   hits.page.pagePath CONTAINS '/helmets' 
   AND customDimensions.index IN (1,2,3)
    
ответ дан rosan.fiqri 05.01.2018 в 05:17
  • Благодарим вас за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. Правильное объяснение значительно улучшит его долгосрочную ценность, показывая, почему это является хорошим решением проблемы, и сделает его более полезным для будущих читателей с другими аналогичными вопросами. Измените свой ответ, чтобы добавить какое-то объяснение, включая сделанные вами предположения. –  iBug 05.01.2018 в 05:43