BigQuery按id和date关联表时出现INT64类型错误求助
BigQuery FULL JOIN 错误原因及解决方法
错误原因
你遇到的错误核心是FULL JOIN的特性导致的字段引用问题。FULL JOIN会返回两张表的所有行,当某一行只存在于其中一张表时,另一张表的所有字段都会是NULL。BigQuery中,如果你直接引用这类NULL行的字段(比如calories.id),相当于试图从一个NULL值(而非合法的行记录)中访问字段,而字段本身是INT64类型,就会触发“无法在INT64类型值上访问字段id”的错误。
另外需要排查细节:你提到表中有date字段,但SQL里用的是day,如果实际字段名是date,这种字段名不匹配也可能间接引发类型错误,需确认字段名一致。
解决方法
用COALESCE统一获取关联字段
COALESCE函数会返回第一个非NULL的值,这样无论行来自哪张表,都能拿到有效的id和日期:SELECT COALESCE(calories.id, distance_info.id) AS id, COALESCE(calories.day, distance_info.day) AS day, -- 若表中字段是date,替换成date calories.calories, distance_info.total_distance FROM `fitbitproject18677.daily.calories` FULL JOIN `fitbitproject18677.daily.distance_info` ON calories.id = distance_info.id AND calories.day = distance_info.day -- 字段名不一致的话同步修改给表起明确别名(可选但推荐)
用短别名替代长表名,能避免歧义,让SQL更清晰:SELECT COALESCE(c.id, d.id) AS id, COALESCE(c.day, d.day) AS day, c.calories, d.total_distance FROM `fitbitproject18677.daily.calories` AS c FULL JOIN `fitbitproject18677.daily.distance_info` AS d ON c.id = d.id AND c.day = d.day确认字段名匹配
仔细核对两张表的字段名:如果日期字段实际是date而非day,把SQL中所有day替换成date,避免因字段不存在导致的隐性错误。
内容的提问来源于stack exchange,提问作者TribeCalledQuest
相关产品推荐
相关产品推荐

