【问题标题】:Hive table or view? Which should be the right approach?蜂巢表或视图?哪个应该是正确的方法?
【发布时间】:2017-05-16 03:06:45
【问题描述】:

我是 HDFS/HIVE 的新手。需要一些建议。我有 RDBMS 数据建模的背景。

我需要一份每日报告。该报告需要从两个暂存表 (HIVE) 中获取数据。

如果我在 HIVE 中创建一个表,编写一个视图以从暂存中获取记录以填充 HIVE 表。使用选择一日数据的 where 子句创建指向 HIVE 表的 HIVE 视图?

  1. HIVE 暂存表 ---> 2. 用于填充 HIVE 表的视图 --> 3. HIVE 表 ----> 4. 用于从 3 中创建的 HIVE 表中获取数据的视图。

如果我在两个暂存的 HIVE 表之上创建一个视图(使用 where 子句连接两个表以获取一日数据)会怎样?

  1. HIVE 暂存表 ---> 2. 查看以从 HIVE 暂存表中获取数据

我想了解 HIVE 最佳实践和解决方案策略。

【问题讨论】:

    标签: hadoop hive hdfs


    【解决方案1】:

    查看或不查看,但您需要 ETL 过程来加载表。 ETL 过程可以加入、聚合等,因此您将能够以星形/雪花或报表表的形式使用最终加入和聚合的数据。为什么在这里需要视图?复用一些常用的查询,降低一些长的复杂查询的复杂度,对数据做接口,创建逻辑实体等。你不一定需要 View 简单地连接表和加载数据到另一个表。一切都取决于您的要求。如果报表应该快速查询数据,那么数据应该由 ETL 过程预先计算。视图只是查询的包装,每次查询数据时都会计算。

    【讨论】:

    • 视图会有一些变换逻辑。这不是简单的一对一映射。两者之间有一些计算/推导。这就是我提到填充 HIVE 表的视图的原因。您可以将其视为 ETL 过程。
    • 查看是ETL的最后阶段吗?将最终视图具体化并创建表可能会更好,因为查询表更快,并且可以在负载不重要时调度将加载具体化表的 ETL 过程,并且报告将更快地查询数据。
    • 如果您的数据访问模式是一次写入 - 多次读取,您绝对应该在 Hive 表中实现您的联接。在时间和集群资源方面,加入大数据表可能会非常昂贵。
    【解决方案2】:

    我认为最好的方法是您有 0 个视图、1 个单表,并将您的分区设为日期字段(但您不能按日期进行分区,因此您必须将其存储为字符串)......这使得最终用户更容易只有 1 个表...更少的表。

    这使您的用户能够只参与他们想要的最新日期,或利用整个表格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      相关资源
      最近更新 更多