我们在 hive 中有 avro 分区表。当我们查询表时,分区列显示在最后。有什么方法可以首先显示分区列吗?
例如:select * from tablea
输出:
Col1 col2 partition_column
预期输出:
分区列 col1 col2
我们在 hive 中有 avro 分区表。当我们查询表时,分区列显示在最后。有什么方法可以首先显示分区列吗?
例如:select * from tablea
输出:
Col1 col2 partition_column
预期输出:
分区列 col1 col2
分区列不存储在文件中,因此,avro 与否,在此上下文中无关紧要。分区列对应表文件夹中的分区子文件夹,并存储在元数据中。
从历史上看,分区列是最后一个。使用Insert
覆盖表分区 (partition_column) SELECT * from ...` 的动态分区是相当常见的场景。Hive 会知道分区是最后一列。
动态分区列必须在 SELECT 语句中的列中最后指定,并且与它们在 PARTITION() 子句中出现的顺序相同。
您可以更改运行时显示的列的顺序,SELECT *
仅通过创建一个view
以所需顺序列出所有列的方法,或者在您的选择中明确选择列。
同样根据 Codd 的理论,列和行顺序无关紧要,您必须始终使用 ORDER BY 在选择和行顺序中明确指定所需的列顺序,而不是依赖表或视图中的列顺序和行顺序。但在 Hive 中,分区列是表中的最后一个。
还要考虑一下:您甚至可能不知道您从什么中选择:表格或视图。并且您可能不会收到上游系统最终决定更改表或视图的通知。视图或表格可以更改列的顺序。在进行选择时考虑将视图与表格相同。它只是抽象级别。使用显式列列表使您的程序始终可靠地工作,并且对基础表/视图中的列顺序没有很强的依赖关系,这是无关紧要的。