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