整体架构:
- seatunnel:2.3.12
- amoro:0.8
- doris:3.0.8
在使用这3个组件搭建湖仓一体的过程中发现存在数据湖的问题。比如seatunnel的iceberg sink配置如下:
sink {
Iceberg {
plugin_input = "out_table"
catalog_name = "warehouse"
namespace = "your_warehose_db"
table = "your_sink_table"
iceberg.catalog.config = {
warehouse: "warehouse"
uri: "http://amoro:1630/api/iceberg/rest"
catalog-impl = "org.apache.iceberg.rest.RESTCatalog"
s3.endpoint = "https://minio-s3:9000"
s3.region="us-east-1"
s3.use-path-style= true
s3.access-key-id = "admin"
s3.secret-access-key = "admin"
}
iceberg.table.partition-keys = "hour(create_at)" <- 重点配置
}
}
然后在amoro的客户端中去查询(本质是spark sql)发现没有时区问题。但是使用doris查询需要+8小时查询查询到数据。也就是说通过seatunnel ETL操作后插入到iceberg的数据使用spark和doris查询时区不一致。但是我整个seatunnel,s3,doris都是采用相同的时区。
最终解决方法:
- 使用doris创建iceberg表,并指定分区key
PARTITION BY LIST(date_hour(create_at)) ()
PROPERTIES(
"compression-codec" = "zstd",
"write-format" = "parquet"
);
3. 删除seatunnel的iceberg.table.partition-keys参数