Столбец разделов не хранится в файлах, поэтому, avro или не avro, это не имеет значения в этом контексте. Столбец раздела соответствует подпапке раздела в папке таблицы и хранится в метаданных.
Исторически столбец разделов является последним. Dynami c разбиение с использованием Insert
перезапись таблицы разделов (partition_column) SELECT * from ... `- довольно распространенный сценарий. Hive будет знать, что раздел - это последний столбец.
Динамические столбцы c должны указываться последними среди столбцов в инструкции SELECT и в том же порядке, в котором они появляются в PARTITION () clause.
Вы можете изменить порядок отображаемых столбцов при запуске SELECT *
, только создав view
, в котором вы перечисляете все столбцы в нужном порядке, ИЛИ явно выбираете столбцы по своему выбору.
Кроме того, в соответствии с теорией Кодда порядок столбцов и строк не имеет значения, вы всегда должны явно указывать желаемый порядок столбцов в порядке выбора и строк, используя ORDER BY, вместо того чтобы полагаться на порядок столбцов и порядок строк в таблице. или посмотреть. Но в Hive столбец разбиения является последним в таблице.
Учтите также следующее: вы можете даже не знать, что вы выбираете: таблицу или представление. И вы можете быть не уведомлены, что вышестоящая система решила изменить таблицу или представление в конце концов. Представление или таблица могут изменить порядок столбцов. Рассматривайте то же самое как таблицу, когда делаете выбор. Это просто уровень абстракции. Используйте явный список столбцов, чтобы ваша программа всегда работала надежно и не имела сильной зависимости от порядка столбцов в базовой таблице / представлении, что несущественно.