Большой запрос: преобразование устаревшего запроса sql в стандартный запрос SQL?

Это мой вопрос: пожалуйста, как преобразовать его в стандартный SQL? Большое вам спасибо за вашу помощь. Я не знаю, как это делать.

SELECT date,
    max(case when customDimensions.index = 1 then customDimensions.value end) AS CUSTOMDIMENSIONS_VALUE, 
    visitNumber,
    fullvisitorid,
    visitStartTime,
    SEC_TO_TIMESTAMP(visitStartTime) AS humain,
    TIME (visitStartTime+3600 ) AS Paris_timezone,
    hits.hour,
    hits.minute,
    CONCAT(fullvisitorid, STRING(visitid)) AS sessionid,
    max(CASE WHEN hits.customDimensions.index = 11 THEN hits.customDimensions.value END) AS localproductname,
    device.deviceCategory,
    hits.page.pagePath,
    IFNULL(hits.page.pagePathLevel2, '') AS HITS_PAGE_PAGEPATHLEVEL2,
    IFNULL(hits.page.pagePathLevel3, '') AS HITS_PAGE_PAGEPATHLEVEL3,
    MAX(CASE WHEN hits.customDimensions.index = 14 THEN hits.customDimensions.value END) AS assetpurpose,
    hits.hitNumber,
FROM (FLATTEN([85801771.ga_sessions_20161025], customDimensions.value )),
  (FLATTEN([85801771.ga_sessions_20161026], customDimensions.value )),
WHERE customDimensions.value != "null" AND customDimensions.value = "968a9587-0614-4155-9597-bf17aef42125" AND hits.type = 'PAGE' AND (customDimensions.index = 1 OR hits.customDimensions.index = 11 OR hits.customDimensions.index = 14
    OR hits.customDimensions.index = 27 ) AND hits.page.hostname CONTAINS 'website.fr' AND hits.type = 'PAGE'
GROUP EACH BY DATE, visitStartTime, humain, Paris_timezone, hits.hour, hits.minute, fullVisitorId, sessionid, visitNumber, device.deviceCategory, hits.page.pagePath, HITS_PAGE_PAGEPATHLEVEL2, HITS_PAGE_PAGEPATHLEVEL3, hits.hitNumber,
LIMIT 100000 

Я пытаюсь перевести его на стандартный sql, но получаю следующую ошибку:

Синтаксическая ошибка: неожиданный литерал с плавающей запятой «85801771.»

Может, в моем запросе есть и другие ошибки.

стандартный SQL:

SELECT date,
    max(case when customDimensions.index = 1 then customDimensions.value end) AS CUSTOMDIMENSIONS_VALUE, 
    visitNumber,
    fullvisitorid,
    visitStartTime,
    SEC_TO_TIMESTAMP(visitStartTime) AS humain,
    TIME (visitStartTime+3600 ) AS Paris_timezone,
    hits.hour,
    hits.minute,
    CONCAT(fullvisitorid, STRING(visitid)) AS sessionid,
    max(CASE WHEN hits.customDimensions.index = 11 THEN hits.customDimensions.value END) AS localproductname,
    device.deviceCategory,
    hits.page.pagePath,
    IFNULL(hits.page.pagePathLevel2, '') AS HITS_PAGE_PAGEPATHLEVEL2,
    IFNULL(hits.page.pagePathLevel3, '') AS HITS_PAGE_PAGEPATHLEVEL3,
    MAX(CASE WHEN hits.customDimensions.index = 14 THEN hits.customDimensions.value END) AS assetpurpose,
    hits.hitNumber,
FROM (FLATTEN([85801771.ga_sessions_20161025], customDimensions.value )),
  (FLATTEN([85801771.ga_sessions_20161026], customDimensions.value )),
WHERE customDimensions.value != "null" AND customDimensions.value = "968a9587-0614-4155-9597-bf17aef42125" AND hits.type = 'PAGE' AND (customDimensions.index = 1 OR hits.customDimensions.index = 11 OR hits.customDimensions.index = 14
    OR hits.customDimensions.index = 27 ) AND hits.page.hostname CONTAINS 'website.fr' AND hits.type = 'PAGE'
GROUP BY DATE, visitStartTime, humain, Paris_timezone, hits.hour, hits.minute, fullVisitorId, sessionid, visitNumber, device.deviceCategory, hits.page.pagePath, HITS_PAGE_PAGEPATHLEVEL2, HITS_PAGE_PAGEPATHLEVEL3, hits.hitNumber,
LIMIT 100000  

person sPujade    schedule 21.03.2017    source источник
comment
Я пробую эту #standardSQL SELECT date, max (если customDimensions.index = 1, затем customDimensions.value end) AS CUSTOMDIMENSIONS_VALUE, visitNumber, fullvisitorid, visitStartTime, SEC_TO_TIMESTAMP (visitStartTime) AS humain, TIME (visitStartTime_timezone + 3600) . час, хиты. минута,   -  person sPujade    schedule 21.03.2017
comment
CONCAT (fullvisitorid, STRING (visitid)) AS sessionid, max (case WHEN hits.customDimensions.index = 11 THEN hits.customDimensions.value END) AS localproductname, device.deviceCategory, hits.page.pagePath, IFNULL (hits.page. pagePathLevel2, '') КАК HITS_PAGE_PAGEPATHLEVEL2, IFNULL (hits.page.pagePathLevel3, '') КАК HITS_PAGE_PAGEPATHLEVEL3, МАКС (CASE WHEN hits.customDimensions.index = 14 THEN hits.customDimensions.value END) AS assetpurpose   -  person sPujade    schedule 21.03.2017
comment
ОТ 85801771.ga_sessions_ ГДЕ _TABLE_SUFFIX МЕЖДУ '20161025' И '20161026' customDimensions.value! = Null И customDimensions.value = 968a9587-0614-4155-9597-bf17aef42125 AND hits.type = 'PAGE' AND (customDimensions.index = 1 hits.customDimensions.index = 11 ИЛИ hits.customDimensions.index = 14 ИЛИ hits.customDimensions.index = 27) И hits.page.hostname СОДЕРЖИТ 'XXX.fr' И hits.type = 'PAGE'   -  person sPujade    schedule 21.03.2017
comment
ГРУППА ПО ДАТЕ, visitStartTime, humain, Paris_timezone, hits.hour, hits.minute, fullVisitorId, sessionid, visitNumber, device.deviceCategory, hits.page.pagePath, HITS_PAGE_PAGEPATHLEVEL2, HITS_PAGE_PAGEPATHLEVEL3, HitNumber 100000   -  person sPujade    schedule 21.03.2017
comment
и я получил эту ошибку Синтаксическая ошибка: Неожиданный литерал с плавающей запятой 85801771. at [15: 1]   -  person sPujade    schedule 21.03.2017
comment
Я предлагаю вам отредактировать свой вопрос и добавить эту ошибку, чтобы любой, кто обладает достаточными знаниями, мог вам помочь.   -  person Fer    schedule 21.03.2017
comment
хорошо Фред Спасибо   -  person sPujade    schedule 21.03.2017


Ответы (1)


Вместо того, чтобы переписывать ваш запрос, вам, вероятно, в конечном итоге было бы более полезно поговорить о некоторых различиях между устаревшим и стандартным SQL и указать вам на документацию. Пошаговое рассмотрение частей вашего запроса:

  • SEC_TO_TIMESTAMP эквивалентно TIMESTAMP_SECONDS.
  • TIME (с INT64 в микросхемах на входе) эквивалентно FORMAT_TIMESTAMP('%H:%M:%S', TIMESTAMP_MICROS(micros)).
  • Функция STRING отсутствует, но вы можете использовать CAST(expr AS STRING).
  • FLATTEN не является функцией стандартного SQL. Вместо этого выполните CROSS JOIN с массивом .
  • CONTAINS не является функцией стандартного SQL, но вы можете использовать LIKE '%website.fr%'.

Многие из этих различий описаны в руководстве по миграции., что является хорошей отправной точкой, если вы хотите выяснить, как преобразовать функцию или оператор из устаревшей версии в стандартный SQL. Вы можете прочитать о функциях, которые я упомянул выше, в документация по функциям и операторам.

person Elliott Brossard    schedule 21.03.2017
comment
Спасибо, Вадим, за вашу любезную помощь. Попрошу и Трою использовать эту основу. Себастьян - person sPujade; 12.10.2017