配置单元分区列

os8fio9y  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(403)

我们在Hive里有一个avro分区表。查询表时,分区列显示在末尾。有没有办法先显示分区列?
如: select * from tablea 输出:

Col1 col2 partition_column

预期产量:
分区\列col1 col2

htrmnn0y

htrmnn0y1#

分区列不存储在文件中,所以,avro与否,在这个上下文中无关紧要。分区列对应表文件夹中的分区子文件夹并存储在元数据中。
历史上分区列是最后一个。使用动态分区 Insert overwrite table partition(partition\u column)select*from…是相当常见的场景。配置单元将知道分区是最后一列。 动态分区列必须在select语句中列的最后一个指定,并按照它们在partition()子句中出现的顺序指定。 运行时可以更改列的显示顺序SELECT *只有通过创建view` 在其中,可以按所需顺序列出所有列,也可以在select中显式选择列。
另外,根据codd的理论,列和行顺序是无关紧要的,您必须始终使用ORDERBY在select和rows order中显式指定所需的列顺序,而不是依赖于表或视图中的列顺序和行顺序。但在hive中,分区列是表中的最后一列。
还要考虑一下:您甚至可能不知道从表或视图中选择什么。而且您可能不会收到上游系统最终决定更改表或视图的通知。视图或表可以更改列的顺序。在执行选择操作时,请考虑将视图与表相同。它只是抽象层次。使用显式列列表可以使程序始终可靠地工作,并且对基础表/视图中的列顺序没有很强的依赖性,这是无关紧要的。

相关问题