JOIN查询结果保存至新表时INTO语法错误求助
问题
我的代码除INTO相关部分外均可正常运行,希望将JOIN查询的结果保存到新表,但报错:Syntax error: Expected end of input but got keyword INTO。已尝试使用INSERT INTO、INSERT、INTO,均出现语法错误,请问INSERT子句的正确位置应该在哪里?
原代码:
SELECT --want the results to contain these columns activity.Id, activity.ActivityDate, steps.StepTotal, calories.Calories, activity.VeryActiveDistance, activity.ModeratelyActiveDistance, activity.LightActiveDistance LightlyActiveDistance, -- for consistent column naming -- intensities.SedentaryActiveDistance, activity.VeryActiveMinutes, activity.FairlyActiveMinutes, activity.LightlyActiveMinutes, activity.SedentaryMinutes INTO newtable FROM `fitbit-data-exploration.FitBit_Tracker.daily activity` AS activity JOIN `fitbit-data-exploration.FitBit_Tracker.daily intensities` AS intensities ON activity.Id = intensities.Id AND activity.ActivityDate = Intensities.ActivityDay JOIN `fitbit-data-exploration.FitBit_Tracker.daily steps` AS steps ON activity.Id = steps.Id AND activity.ActivityDate = steps.ActivityDay JOIN `fitbit-data-exploration.FitBit_Tracker.daily calories` AS calories ON activity.Id = calories.Id AND activity.ActivityDate = calories.ActivityDay;
解决方案
从表名格式能判断你用的是BigQuery,它不支持SELECT ... INTO这种SQL语法,得换成以下两种写法:
1. 创建全新的表(表不存在时使用)
用CREATE TABLE ... AS SELECT语法,把要创建的表名放在语句最前端,后续跟你的查询逻辑:
CREATE TABLE `fitbit-data-exploration.FitBit_Tracker.newtable` AS SELECT activity.Id, activity.ActivityDate, steps.StepTotal, calories.Calories, activity.VeryActiveDistance, activity.ModeratelyActiveDistance, activity.LightActiveDistance LightlyActiveDistance, intensities.SedentaryActiveDistance, activity.VeryActiveMinutes, activity.FairlyActiveMinutes, activity.LightlyActiveMinutes, activity.SedentaryMinutes FROM `fitbit-data-exploration.FitBit_Tracker.daily activity` AS activity JOIN `fitbit-data-exploration.FitBit_Tracker.daily intensities` AS intensities ON activity.Id = intensities.Id AND activity.ActivityDate = Intensities.ActivityDay JOIN `fitbit-data-exploration.FitBit_Tracker.daily steps` AS steps ON activity.Id = steps.Id AND activity.ActivityDate = steps.ActivityDay JOIN `fitbit-data-exploration.FitBit_Tracker.daily calories` AS calories ON activity.Id = calories.Id AND activity.ActivityDate = calories.ActivityDay;
注意要给新表指定完整的「项目-数据集-表名」路径,避免默认创建到非目标数据集。
2. 插入到已存在的表(表结构与查询结果匹配时使用)
如果newtable已经存在,用INSERT INTO ... SELECT语法,把INSERT INTO放在查询语句的最前面:
INSERT INTO `fitbit-data-exploration.FitBit_Tracker.newtable` SELECT activity.Id, activity.ActivityDate, steps.StepTotal, calories.Calories, activity.VeryActiveDistance, activity.ModeratelyActiveDistance, activity.LightActiveDistance LightlyActiveDistance, intensities.SedentaryActiveDistance, activity.VeryActiveMinutes, activity.FairlyActiveMinutes, activity.LightlyActiveMinutes, activity.SedentaryMinutes FROM `fitbit-data-exploration.FitBit_Tracker.daily activity` AS activity JOIN `fitbit-data-exploration.FitBit_Tracker.daily intensities` AS intensities ON activity.Id = intensities.Id AND activity.ActivityDate = Intensities.ActivityDay JOIN `fitbit-data-exploration.FitBit_Tracker.daily steps` AS steps ON activity.Id = steps.Id AND activity.ActivityDate = steps.ActivityDay JOIN `fitbit-data-exploration.FitBit_Tracker.daily calories` AS calories ON activity.Id = calories.Id AND activity.ActivityDate = calories.ActivityDay;
内容的提问来源于stack exchange,提问作者Rayby
相关产品推荐
相关产品推荐

