应该是我的hive分区策略和视图策略,以便查询可以在10秒内有效地运行并返回结果

问题描述 投票:1回答:1

我的用例是我有两个数据源:1。Source1(作为速度层)2。Hive外部表在S3之上(作为批处理层)

我使用Presto通过视图查询来自两个数据源的数据。我想创建一个视图,它将来自两个来源的数据联合起来:“创建视图测试为select * from Source1.table union all select * from hive.table”

我们在Source1中保留24小时数据,24小时后数据将通过配置单元迁移到s3。

Source1表的列是:timestamp,logtype,company,category

用户将使用时间戳范围查询数据(可查询最近15/30分钟,最后x小时,最后x天,最后x个月等数据)示例:“select * from test where timestamp>(now() - interval '15 'minute)“,”select * from test where timestamp>(now() - interval'12'hour)“,”select * from test where timestamp>(now() - interval'1'day)“

为了满足用户查询,我需要对hive表进行分区,并且用户不应该知道底层的状态,即如果用户查询最后x分钟数据,他/她不应该打扰如果presto正在从Source1读取数据或蜂巢。

我的hive分区策略和视图策略应该是什么,以便查询可以在10秒内有效地运行并返回结果?

hive bigdata data-warehouse presto data-partitioning
1个回答
0
投票

对于配置单元,应使用将在过滤器中查询的分区列。 在你的情况下,这是时间戳。但是,如果使用时间戳,它将为每秒(或毫秒)创建一个分区,具体取决于列中的数据。 一个更好的解决方案是创建像yearmonthdayhour(来自时间戳)的列,并将它们用作分区列。

同样的策略适用于Kudu,但是建议它可以创建热点,因为所有新到达的记录将转到相同(最近)的分区,这将限制插入(并且可能是查询)性能。 要克服使用一个附加列作为散列分区以及时间戳派生列。 例如yearmonthdayhourlogtype

© www.soinside.com 2019 - 2024. All rights reserved.