把一箱货从一辆车直接搬到另一辆车,确实能少走仓库;但如果双方连“每箱装多少”都说不清,麻烦仍在。ADBC(Arrow Database Connectivity)也是如此:它让应用用统一接口连接不同数据库,并以 Apache Arrow 的内存列式格式交换数据,尽量做到“零拷贝”——复用已有数据,减少复制和转换。Columnar 用一年把这套标准做成生产级驱动后发现,真正棘手的不是搬运,而是类型系统:不同系统如何表示数字、文本、时间和空值。
最典型的是数值精度。SQL 的 numeric 类型没有统一的最高位数:SQL Server 最多 38 位,ClickHouse 76 位,MySQL 和 MariaDB 65 位,Postgres 则允许明确声明超过 1000 位。更麻烦的是,驱动必须在看到实际数据前,仅凭数据库文档决定对应的 Arrow 类型。这意味着,即使几乎没人使用四位数精度,驱动也得提前处理这种边界。零拷贝降低了数据搬运成本,却不会自动统一各家的含义;跨语言传输真正昂贵的部分,往往是把这些差异定义清楚。