Транспонировать вложенные данные столбца customDimension в строки Bigquery - PullRequest
2 голосов
/ 28 января 2020

Моя таблица BigQuery выглядит следующим образом

Fullvisitorid   CustomDimension.Index   CustomDimension.value
   123                1                       red
                      2                       blue
                      3                       green
   456                1                       red
                      3                       orange
                      4                       black

Я хочу, чтобы мой окончательный вывод выглядел так, как показано ниже

 Fullvisitorid   Color1     Color2
     123           red       green    
     456           red       orange

Ниже приведен запрос, который я написал, но получаю ошибку " ФУНКЦИЯ НЕ НАЙДЕНА: ПЕРВЫЙ "

SELECT
  fullvisitorid,
  FIRST(IF(customDimensions.index=1, customDimensions.value, NULL)) color1,
  FIRST(IF(customDimensions.index=3, customDimensions.value, NULL)) color2
  FROM `my_table`
  cross join
  unnest(customDimensions) customDimensions,
  unnest(hits) hits
  where customDimensions.index in (1,3)
   group by fullvisitorid

Я нашел похожий вопрос, который помог мне написать мой запрос:

[ Транспонировать вложенные строки в столбцы в большом запросе с данными Google Analytics

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

Спасибо

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы также можете создать пользовательскую функцию и вызывать ее всегда, когда вам нужно пользовательское измерение:

SELECT
  fullvisitorid,
  PATH.CUSTOM_DIMENSION_BY_INDEX(1, h.customDimensions) AS color1,
  PATH.CUSTOM_DIMENSION_BY_INDEX(3, h.customDimensions) AS color2,
  FROM `my_table`
  cross join
  unnest(customDimensions) customDimensions,
  unnest(hits) hits
  where customDimensions.index in (1,3)
   group by fullvisitorid

, где PATH.CUSTOM_DIMENSION_BY_INDEX (index, h.customDimensions) является пользовательской функцией в формате:

(SELECT x.value FROM UNNEST(arr) x WHERE indx=x.index)

Вы можете найти больше информации об этом здесь .

1 голос
/ 28 января 2020

Вы используете # standard SQL сейчас - это хорошо.

Вместо FIRST() используйте ANY_VALUE().

Я обновил свой ответ в указанном вопросе соответственно:

...