Big Query上传CSV自动识别日期:如何区分日与月?
Big Query CSV日期自动检测相关问题解答
问题1:对于02-03-1999这类模糊日期,Big Query如何判定02是日而非月?
当遇到日和月数值都在1-12范围内的模糊日期时,Big Query会结合样本数据中的其他日期记录来判断:
- 如果样本里存在
30-05-1999这类日期(30不可能作为月份),系统会直接确定格式为DD-MM-YYYY,因此02-03-1999会被解析为1999年3月2日。 - 如果所有日期的日和月都在1-12之间,系统会默认采用
DD-MM-YYYY的解析规则,将前两位判定为日。
问题2:若CSV日期格式为MM-DD-YYYY(如02-03-1999代表1999年2月3日),Big Query能否正确识别并转为YYYY-MM-DD格式?
不一定,分两种情况:
- 如果样本数据中存在
13-05-2000这类日期(13作为月份无效),系统会因无法匹配DD-MM-YYYY格式,转而尝试其他格式,但大概率会将该列识别为STRING类型,而非DATE类型。 - 如果所有日期的月和日都在1-12之间,系统会默认按
DD-MM-YYYY解析,导致02-03-1999被错误识别为1999年3月2日。
这种场景下不建议依赖自动检测,最好手动指定字段类型为DATE,并明确设置日期解析格式为%m-%d-%Y。
问题3:Big Query区分日和月的底层判定逻辑是什么?
核心逻辑是样本扫描+格式有效性验证:
- 首先抽取CSV中的部分样本数据(默认是数据集的前若干行或一定比例的记录)。
- 尝试匹配常见日期格式,优先验证格式的有效性:比如某格式下是否存在无效日期(如
31-04-2020,4月没有31天,就会排除DD-MM-YYYY的可能)。 - 结合默认区域设置:系统默认优先采用非美式日期格式(
DD-MM-YYYY),但如果样本中大量符合美式格式(MM-DD-YYYY)的有效日期且无冲突,也会切换为对应格式。 - 若所有候选格式都无冲突(即所有日期的日和月都在1-12之间),则默认采用
DD-MM-YYYY解析;若无法确定唯一格式,会将字段识别为STRING类型。
内容的提问来源于stack exchange,提问作者Dharminder Singh
相关产品推荐
相关产品推荐

