BigQuery Sandbox报错:期望关键字AS却得到'(',SQL代码无法运行求助
问题:BigQuery Sandbox运行CTE SQL报错:Expected keyword AS but got "("
我参照视频编写的SQL代码,在BigQuery Sandbox中运行时出现错误:ERROR: Expected keyword AS but got "(" at [1:17],代码无法正常执行,请问这是BigQuery的问题吗?
原代码:
WITH pop_vs_vac (continent, location, DATE, population, new_vaccinations, rolling_people_vaccinated) AS ( SELECT dea.continent, dea.location, dea.DATE, dea.population, vac.new_vaccinations, SUM(CAST(vac.new_vaccinations AS INT)) OVER (PARTITION BY dea.location ORDER BY dea.location, dea.DATE) AS rolling_people_vaccinated -- (rolling_people_vaccinated/population)* 100 FROM [gg-analytics-404715.Portfolio_Covid.Covid_Deaths] AS dea JOIN [gg-analytics-404715.Portfolio_Covid.Covid_vaccinations] AS vac ON dea.location = vac.location AND dea.DATE = vac.DATE WHERE dea.continent IS NOT NULL --- order by 1, 2, 3 ) SELECT * FROM pop_vs_vac
解答
这不是BigQuery的问题,是你的CTE语法不符合BigQuery的规范:
- BigQuery不支持在CTE名称后用
(字段列表)的写法,这是SQL Server等其他数据库的语法,BigQuery要求CTE定义必须是WITH 表名 AS (...)的格式,不需要额外指定字段列表(SELECT语句中已经明确了字段名)。 - 另外,BigQuery中引用数据集和表的正确格式是用反引号(
)包裹,而非方括号([]);CAST(vac.new_vaccinations AS INT)建议替换为SAFE_CAST(vac.new_vaccinations AS INT64)`,避免转换失败导致查询中断。
修正后的代码:
WITH pop_vs_vac AS ( SELECT dea.continent, dea.location, dea.DATE, dea.population, vac.new_vaccinations, SUM(SAFE_CAST(vac.new_vaccinations AS INT64)) OVER (PARTITION BY dea.location ORDER BY dea.location, dea.DATE) AS rolling_people_vaccinated FROM `gg-analytics-404715.Portfolio_Covid.Covid_Deaths` AS dea JOIN `gg-analytics-404715.Portfolio_Covid.Covid_vaccinations` AS vac ON dea.location = vac.location AND dea.DATE = vac.DATE WHERE dea.continent IS NOT NULL ) SELECT * FROM pop_vs_vac
内容的提问来源于stack exchange,提问作者Will Simotas
相关产品推荐
相关产品推荐

