dremio jdbc 插件时间增量处理的一些问题
dremio 支持一些增量数据处理能力,同时可以选择增量字段,目前dremio 是提供了一些实现,比如反射数据基于iceberg对于增量
可以是不同的数据源(jdbc 的,文件系统的,iceberg 的),日常大家可能选择基于时间戳的(尤其业务系统是基于时间标识的append 类型的)
对于时间类型(timestamp),不同数据库会有不同的精度支持,比如mysql 也支持精度,postgres 也是支持精度的
timestamp问题
目前postgres 对于timestamp 默认的精度是6位(可以自己调整),但是默认dremio 对于timestamp 的处理精度为3,所以如果对于pg append 类型的表进行
增量处理就会发现数据有问题(数据会重复)
- 精度检查
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
解决方法
- 数据distinct 处理
对于增量之后的数据,使用distinct,可以规避重复数据 - 统一精度规避数据问题
将source 的timestamp 精度类型调整为3
dremio 增量一个简单处理
- 参考sql 格式
如下会包含一个$_dremio_$_update_$
的增量字段,后续查询会使用此字段进行增量查询
一个int 类型的
"sensor_data_store"."q3", "sensor_data_store"."t", "sensor_data_store"."electricquantitypercentage", "sensor_data_store"."versionnumber" COLLATE "C", "sensor_data_store"."id" AS "$_dremio_$_update_$" FROM "public"."sensor_data_store" WHERE ("sensor_data_store"."id" > 309371)","e1 [main]"
一个timestamp 类型的
"sensor_data_store"."versionnumber" COLLATE "C", "sensor_data_store"."ingress_data" AS "$_dremio_$_update_$" FROM "public"."sensor_data_store" WHERE ("sensor_data_store"."ingress_data" > TIMESTAMP '2024-01-06 06:55:47.617')","e3
dremio 反射存储的iceberg 元数据信息
说明
实际上精度的问题在不少系统都会有类似的问题,只是我们很多时候应该注意下,否则会有莫名的问题,注意dremio 也是可以创建iceberg 表的,可以指定timestamp 的精度,但是实际存储还是3位精度的
参考资料
https://docs.dremio.com/current/sonar/reflections/refreshing-reflections
https://docs.dremio.com/cloud/reference/sql/information-schema/columns/#fields
com/dremio/exec/store/iceberg/IncrementalReflectionByPartitionUtils.java
com/dremio/service/reflection/IncrementalUpdateServiceUtils.java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-01-12 dremio FabricServer 服务简单说明
2023-01-12 apache drill rpc 简单说明
2022-01-12 Appactive 阿里云开源的应用多活基础框架
2022-01-12 juicefs 内部一个定时元数据备份
2021-01-12 postgres fdw extensions 容器镜像
2021-01-12 使用har分析web 应用性能
2021-01-12 postgres-fdw 集成cratedb 的尝试的几个问题