【发布时间】:2014-02-22 03:27:30
【问题描述】:
我已经看到了一些关于创建具有CLUSTERED BY 和SORTED BY 分区的表的很好的解释。这与创建带有分区的表然后使用CLUSTER BY 填充表(例如使用INSERT OVERWRITE)相比如何? CLUSTER BY 是表中的持久排序吗?
【问题讨论】:
我已经看到了一些关于创建具有CLUSTERED BY 和SORTED BY 分区的表的很好的解释。这与创建带有分区的表然后使用CLUSTER BY 填充表(例如使用INSERT OVERWRITE)相比如何? CLUSTER BY 是表中的持久排序吗?
【问题讨论】:
即使 INSERT OVERWRITE + CLUSTER BY 会生成具有持久排序数据的表,除了创建 CLUSTERED BY 表之外,没有其他方法可以告诉 hive 数据已经排序。只有当 Hive 知道排序数据并因此可以优化查询时,您才能从排序数据(例如排序合并连接)中受益。除非您指定该表是聚集(排序)的,否则数据不一定按照生成或传递给写入器的顺序写入磁盘。通常(堆)表在理论上没有排序。写入器进程不会以与输入相同的顺序写入数据,因为它是缓冲(延迟写入)和并行的。
【讨论】: