Google BigQuery SQL: «Поле не найдено» в поле с функцией Concat - PullRequest
0 голосов
/ 25 февраля 2019

У меня проблема с BigQuery, который не может определить ключ поля, который я указываю, который использует строку Concat:

SELECT
T2.MinHit,
CONCAT(CAST(T1.visitId AS STRING), CASE WHEN T1.hits.page.searchKeyword IS NULL THEN "(NULL)" ELSE T1.hits.page.searchKeyword END) AS Key1,
CONCAT("https://", T1.hits.page.hostname, T1.hits.page.pagePath) AS urlPage
FROM [bigquery-public-data:google_analytics_sample.ga_sessions_20170801] AS T1
INNER JOIN (
   SELECT
   CONCAT(CAST(visitId AS STRING), CASE WHEN hits.page.searchKeyword IS NULL THEN "(NULL)" ELSE hits.page.searchKeyword END) AS Key2,
   MIN(hits.hitNumber) AS MinHit
   FROM [bigquery-public-data:google_analytics_sample.ga_sessions_20170801]
   GROUP BY Key1 ) AS T2
ON T1.Key1 = T2.Key2

Я также заметил, что с помощью простой функции «Где» (Key1 IS NOT NULL)) снова возвращает ошибку, когда поле не найдено.

Есть идеи, как мне обойти эту проблему?

1 Ответ

0 голосов
/ 26 февраля 2019

Получил это на работу.Кажется, я упустил тот факт, что мне нужно было объявить объединенное поле первым в первой таблице:

SELECT
T1.SKey,
T1.urlPage,
T2.MinHit
FROM 
(
  SELECT 
  CONCAT(CAST(visitId AS STRING),CASE WHEN hits.page.searchKeyword IS NULL THEN "(NULL)" ELSE hits.page.searchKeyword END) as SKey, 
  CONCAT("https://", hits.page.hostname, hits.page.pagePath) as urlPage,
  FROM [bigquery-public-data:google_analytics_sample.ga_sessions_20170801] 
  GROUP BY SKey, urlPage
)
AS T1 
INNER JOIN 
        ( 
        SELECT 
        CONCAT(CAST(visitId AS STRING),CASE WHEN hits.page.searchKeyword IS NULL THEN "(NULL)" ELSE hits.page.searchKeyword END) as SKey, 
        MIN(hits.hitNumber) as MinHit 
        FROM [bigquery-public-data:google_analytics_sample.ga_sessions_20170801] 
        GROUP BY SKey 
        ) AS T2 
ON T1.SKey = T2.SKey

В любом случае, оператор CASE не был необходим (я добавил его, поскольку думал, что это решит проблему).).Вот исправленный и более точный запрос:

SELECT
T1.SKey,
T1.urlPage,
T2.MinHit
FROM 
(
  SELECT 
  CONCAT(CAST(visitId AS STRING), hits.page.searchKeyword) as SKey, 
  CONCAT("https://", hits.page.hostname, hits.page.pagePath) as urlPage,
  FROM [bigquery-public-data:google_analytics_sample.ga_sessions_20170801] 
  GROUP BY SKey, urlPage
)
AS T1 
INNER JOIN 
        ( 
        SELECT 
        CONCAT(CAST(visitId AS STRING), hits.page.searchKeyword) as SKey, 
        MIN(hits.hitNumber) as MinHit 
        FROM [bigquery-public-data:google_analytics_sample.ga_sessions_20170801] 
        GROUP BY SKey 
        ) AS T2 
ON T1.SKey = T2.SKey
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...