如何将Excel数据集字段转为TIME类型以解决BigQuery UNION DISTINCT报错
解决BigQuery UNION DISTINCT类型不兼容问题
问题原因
你的两个表中ride_length字段类型不一致:一个是TIME类型,另一个是STRING类型,而UNION DISTINCT要求所有对应字段的类型完全匹配,因此触发报错。
方案一:在Excel中转换字符串为时间类型
如果STRING类型的ride_length是标准时间格式(如HH:MM:SS),可以直接在Excel中处理:
- 方法1:修改单元格格式
- 选中
ride_length列所有单元格 - 右键选择「设置单元格格式」
- 切换到「时间」选项卡,选择匹配的格式(如
13:30:55),点击确定
- 选中
- 方法2:公式转换(适用于直接改格式无效的情况)
在空白列输入公式=TIMEVALUE(A1)(A1为目标单元格),下拉填充后,复制该列并右键选择「粘贴为数值」,最后替换原ride_length列。
方案二:直接在BigQuery查询中转换类型(推荐)
无需重新导出导入Excel,直接在查询时将STRING类型字段转为匹配的类型,确保两个表字段类型一致:
场景1:字符串为标准时间格式(如HH:MM:SS)
使用PARSE_TIME()函数指定格式转换:
SELECT ride_length FROM `my-1st-project-230118.my_google_capstone.202204-divvy-trip` UNION DISTINCT -- 假设202109的ride_length是STRING类型,转成TIME SELECT PARSE_TIME("%H:%M:%S", ride_length) AS ride_length FROM `my-1st-project-230118.my_google_capstone.202109-divvy-trip`
如果你的字符串是MM:SS格式,把格式符改成"%M:%S"即可。
场景2:字符串为骑行时长(可能超过24小时)
TIME类型仅支持00:00:00到23:59:59,若ride_length是超过24小时的时长,建议统一转为DURATION类型:
-- 将TIME类型转成DURATION SELECT CAST(ride_length AS DURATION) AS ride_length FROM `my-1st-project-230118.my_google_capstone.202204-divvy-trip` UNION DISTINCT -- 将STRING时长转成DURATION SELECT CAST(CONCAT('0 ', ride_length) AS INTERVAL) AS ride_length FROM `my-1st-project-230118.my_google_capstone.202109-divvy-trip`
内容的提问来源于stack exchange,提问作者M_ Wall
相关产品推荐
相关产品推荐

