sql - 大查询: converting a legacy sql request to a standard SQL request?

标签 sql error-handling google-bigquery bigquery-standard-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,但出现以下错误:

Syntax error: Unexpected floating point literal "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  

最佳答案

从长远来看,谈论遗留和标准SQL之间的一些差异并为您提供文档可能比对您重写查询更有用。逐步执行查询的各个部分:

  • SEC_TO_TIMESTAMPTIMESTAMP_SECONDS等效。
  • TIME(以微秒为INT64作为输入)等效于FORMAT_TIMESTAMP('%H:%M:%S', TIMESTAMP_MICROS(micros))
  • 没有STRING函数,但是您可以使用CAST(expr AS STRING)
  • FLATTEN不是标准SQL中的函数。而是执行 CROSS JOIN with the array
  • CONTAINS不是标准SQL中的函数,但是您可以使用LIKE '%website.fr%'

  • migration guide涵盖了许多这些差异,如果您想弄清楚如何将函数或运算符从旧版转换为标准SQL,这是一个很好的起点。您可以阅读上面在functions and operators documentation中提到的功能。

    关于sql - 大查询: converting a legacy sql request to a standard SQL request?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42922434/

    相关文章:

    bash - bash函数非零退出代码

    error-handling - DropNet(投递箱)检查路径,如果为null,则创建

    sql - 在 BigQuery 的标准 SQL 中使用权限

    php - 索引和变量错误

    php - CodeIgniter - 更改子查询

    c - 各种平台上的指针地址跨度

    google-analytics - 在自定义查询中查询数据时,格式化event_date和event_timestamp大查询

    google-bigquery - BigQuery 按列表分区

    php - 网页标题 用户名

    sql - Postgresql:更新命令没有停止