Колонка Hive - PullRequest
       106

Колонка Hive

1 голос
/ 03 марта 2020

У нас есть таблица разделов avro в улье. Когда мы запрашиваем таблицу, столбец раздела отображается в конце. Можно ли сначала отобразить столбец раздела?

Например: select * from tablea

Вывод:

Col1 col2 partition_column

Ожидаемый вывод:

Partition_column col1 col2

1 Ответ

1 голос
/ 03 марта 2020

Столбец разделов не хранится в файлах, поэтому, avro или не avro, это не имеет значения в этом контексте. Столбец раздела соответствует подпапке раздела в папке таблицы и хранится в метаданных.

Исторически столбец разделов является последним. Dynami c разбиение с использованием Insert перезапись таблицы разделов (partition_column) SELECT * from ... `- довольно распространенный сценарий. Hive будет знать, что раздел - это последний столбец.

Динамические столбцы c должны указываться последними среди столбцов в инструкции SELECT и в том же порядке, в котором они появляются в PARTITION () clause.

Вы можете изменить порядок отображаемых столбцов при запуске SELECT *, только создав view, в котором вы перечисляете все столбцы в нужном порядке, ИЛИ явно выбираете столбцы по своему выбору.

Кроме того, в соответствии с теорией Кодда порядок столбцов и строк не имеет значения, вы всегда должны явно указывать желаемый порядок столбцов в порядке выбора и строк, используя ORDER BY, вместо того чтобы полагаться на порядок столбцов и порядок строк в таблице. или посмотреть. Но в Hive столбец разбиения является последним в таблице.

Учтите также следующее: вы можете даже не знать, что вы выбираете: таблицу или представление. И вы можете быть не уведомлены, что вышестоящая система решила изменить таблицу или представление в конце концов. Представление или таблица могут изменить порядок столбцов. Рассматривайте то же самое как таблицу, когда делаете выбор. Это просто уровень абстракции. Используйте явный список столбцов, чтобы ваша программа всегда работала надежно и не имела сильной зависимости от порядка столбцов в базовой таблице / представлении, что несущественно.

...