Таблица соединения BigQuery после оператора case в подзапросе - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь написать запрос, который можно запускать еженедельно или ежемесячно, с некоторыми числовыми изменениями, которые можно сделать в листах Google.Однако, чтобы это работало, мне нужно изменить названия некоторых продуктов, чтобы они были более единообразными и соответствовали данным из листов Google.В этом случае что-то вроде «старший» или «младший» перед названием продукта должно стать одним конкретным именем, например «Инженер», а не «старший инженер», «инженер», «младший инженер» и т. Д. Однако при объединении выдается ошибка, так как неследующий за ним пункт.

Краткий сводный код того, как я пытаюсь это сделать, таков (группа и т. д. опущена):

SELECT 
      t.fullVisitorId,
      t.product,
      t.transaction,
      t.transactiondate,
      cc.productvalue   
FROM t LEFT JOIN
`othertable` AS cc ON t.product = cc.product    
FROM(
SELECT
CASE 
WHEN product = '%engineer%' THEN 'Engineer'
END AS product,
fullVisitorId,
transaction,
value,
transactiondate
    FROM ( SELECT
     fullVisitorId,
              hit.transaction.transactionId AS transaction,
              prod.v2ProductName AS product,
           FORMAT_TIMESTAMP("%Y-%m-%d", TIMESTAMP_SECONDS(SAFE_CAST(visitStartTime AS INT64)), "Europe/London") AS transactiondate
            FROM
          `tableID.ga_sessions_*` AS t
        CROSS JOIN
          UNNEST(hits) AS hit            
        WHERE
          _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', '2018-11-01') 
          AND FORMAT_DATE("%E4Y%m%d", '2018-11-30')

1 Ответ

0 голосов
/ 18 декабря 2018

Ниже для BigQuery Standard SQL

SELECT 
  t.fullVisitorId,
  t.product,
  t.transaction,
  t.transactiondate,
  cc.productvalue   
FROM (
  SELECT CASE WHEN product LIKE '%engineer%' THEN 'Engineer' END AS product,
    fullVisitorId,
    transaction,
    value,
    transactiondate
  FROM ( 
    SELECT
      fullVisitorId,
      hit.transaction.transactionId AS transaction,
      prod.v2ProductName AS product,
      FORMAT_TIMESTAMP("%Y-%m-%d", TIMESTAMP_SECONDS(SAFE_CAST(visitStartTime AS INT64)), "Europe/London") AS transactiondate
    FROM `tableID.ga_sessions_*` AS t
    CROSS JOIN UNNEST(hits) AS hit            
    WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', '2018-11-01') 
    AND FORMAT_DATE("%E4Y%m%d", '2018-11-30')
  )
) AS t
LEFT JOIN `othertable` AS cc 
ON t.product = cc.product    

Кроме того, обратите внимание product LIKE '%engineer%' вместо product = '%engineer%'

...