uniqueidentifier 类型用来存储guid,sql server内部存储为16个固定字节的二进制数据,在dremio 当前的arp 类型映射中,存储为了varbinary,机制上没有问题,但是很多时候大家希望使用可视化的字符串格式uuid(因为映射为varbinary,界面显示就是一个base64格式了)
解决方法
方法比较多,一种就是使用自定义函数,一种就是修改类型映射
- 直接使用内置十六进制处理函数
会有格式不一致,但是基本可以用,尤其是mongdb 这类,不存在特殊字符的(-)
UPPER(to_hex(<field>))- 自定义函数处理
频繁调用,性能可能不是很好
CREATE FUNCTION uuid(id VARBINARY) RETURNS VARCHAR RETURN CONCAT(
SUBSTR(TO_HEX(CAST(id AS VARBINARY)), 1, 8), '-',
SUBSTR(TO_HEX(CAST(id AS VARBINARY)), 9, 4), '-',
SUBSTR(TO_HEX(CAST(id AS VARBINARY)), 13, 4), '-',
SUBSTR(TO_HEX(CAST(id AS VARBINARY)), 17, 4), '-',
SUBSTR(TO_HEX(CAST(id AS VARBINARY)), 21, 12)
)- 类型映射
- source:
name: "uniqueidentifier"
max_precision: 8000
literal_length_limit: 8000
required_cast_args: "precision"
dremio:
name: "varchar"- 实际处理
可以开发自己的arp (扩展版sql server) 或者直接修改ce jdbc plugin mssql 的arp yaml 定义
说明
以上是问题的几种解决方法,通过代码模式的修改的代码我已经放github 了,大家可以参考,同时构建包也发布了(24.3版本的,新版本类似)
















