Bra*_*ric
5
hive
presto
trino
我有几个 hive 表是从 spark 和 hive 插入覆盖的。分析师也可以在 presto 上访问这些表。自然地,我们会遇到一些时间窗口,因为 presto 忽略了锁,因此用户会访问不完整的数据集。
我能想到的选项:
- 将 presto-hive 连接器分叉以适当地支持 hive S 和 X 锁。这不是太糟糕,但要花时间正确地做。
- 插入覆盖完成后,交换 hive 元存储上的表位置。这很好,但有点乱,因为我们喜欢在数据库级别存储显式位置并让表继承位置。
- 停止对这些表进行插入覆盖,而只是为已更改的内容添加一个新分区,然后在写入新分区后,更改 hive 表以查看它。然后我们就可以在数据之上拥有视图,这些视图将正确协调每一行的最新版本。
- 停止在 s3 上执行插入覆盖,它有一个很长的从 hive staging 到目标表的复制窗口。如果我们将所有插入覆盖转移到 hdfs,我们仍然会遇到问题,但它已经超过了执行速度明显更快的 hdfs mv 所需的时间跨度。(可能不好:仍有一个窗口我们可以获得不完整的数据)
我的问题是人们通常如何处理?这似乎是一个有明确解决方案的常见场景,但我似乎错过了它。对于可以查询 hive Metastore 并直接与 hdfs/s3 交互而不尊重 hive 锁的任何第三方工具,通常可以询问这一点。