上游本该传来数字,却突然塞进一段文字。为了不让数据管线停摆,一个直觉做法是:先把所有字段都存成字符串,什么都接住。Reddit 用户 Similar-Bug-350 把它称为“通用类型拓宽”。场景是 medallion architecture——数据先进入保存原始输入的 bronze(铜)层,再到 silver 层清洗定型,最后由 gold 层服务报表与分析。
这并非全无依据。据 Databricks 官方文档,铜层应保留未经验证、可重放和审计的原始数据;为避免意外的 schema drift(上游字段或类型突然变化)造成数据丢失,多数原始字段可存为 string、VARIANT 或 binary。但铜层本来就不直接供分析师使用。问题在于,全转字符串等于推迟类型契约:数字能否计算、日期是否合法,要由每个下游重新解析和校验。据 Polars 官方文档,严格转换遇到坏值会报错;关闭严格模式也只是把失败值变成 null。普通字符串还会重复占用内存,并让 join(按共同字段合并数据)承担字符串比较成本。灵活性是真的,代价只是没有消失,而是顺流而下。