修复flight-sql-js-client 支持连接dremio

flight-sql-js-client 是基于grpc+ arrow flight 的原生arrow flight sql client,上次我也说过连接dremio 是有问题的,通过实际上的分析(结合wireshark 以及jave remote debug) 发现实际的请求是可以处理成功的,而且用户认证实际是成功的,只是client 在处理协议的时候不完整,以下说明下解决方法

内部原因

因为dremio 在处理auth 上使用了自己的auth2默认的认证(实际上也是标准的arrow flight rpc 模式),支持对于auth 的token 是基于了rpc 的status 处理的,并没有通过metadata 那个事件处理的,所以数据处理上就有缺陷

解决方法

添加对于status 的处理就可以了,参考如下

grpc_util.ts

call.on("status", (status) => {
  if(status.code === 0) {
    this.responses_.push({ metadata: new Metadata(status.metadata) });
  }
});

说明

修改之后连接dremio 是可以的,目前我也已经发了一个pr,临时使用的可以自己直接修改构建,基于原生grpc 的arrow flight sql 访问还是挺方便的

参考资料

https://github.com/voltrondata/sqlflite

https://github.com/lancedb/flight-sql-js-client

https://github.com/lancedb/flight-sql-js-client/pull/7

posted on 2025-04-01 08:00  荣锋亮  阅读(36)  评论(0)    收藏  举报

导航