Почему столбчатые базы данных, такие как Snowflake и Redshift, не могут изменить порядок столбцов? - PullRequest
0 голосов
/ 09 января 2020

Я работал с Redshift и сейчас тестирую Snowflake. Обе колоночные базы данных. Все, что я читал об этом типе баз данных, говорит о том, что они хранят информацию по столбцам, а не по строкам, что помогает при массовой параллельной обработке (MPP).

Но я также видел, что они не могут изменить порядок столбца или добавить столбец между существующими столбцами (не знаю о других столбчатых базах данных). Единственный способ добавить новый столбец - добавить его в конце. Если вы хотите изменить порядок, вам необходимо заново создать таблицу с новым порядком, удалить старый и изменить имя нового (это называется глубокая копия ). Но иногда это невозможно из-за зависимостей или даже использования памяти.

Меня больше удивляет тот факт, что это можно сделать в строковых базах данных, а не в столбчатых. Конечно, должна быть причина, почему это еще не функция, но у меня явно недостаточно информации об этом. Я думал, что это будет просто вопрос изменения порядкового номера таблиц в information_schema, но, очевидно, не все так просто.

Кто-нибудь знает причину этого?

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Порядок, в котором столбцы хранятся внутри, не может быть изменен без их удаления и повторного создания.

Ваш SQL может извлекать столбцы в любом порядке.

Общее требование к иметь столбцы, перечисленные в определенном порядке, предназначенном для просмотра.

Вы можете определить вид в нужном порядке столбцов и использовать вид в требуемой операции.

CREATE OR REPLACE TABLE CO_TEST(B NUMBER,A NUMBER);
INSERT INTO CO_TEST VALUES (1,2),(3,4),(5,6);
SELECT * FROM CO_TEST;
SELECT A,B FROM CO_TEST;

CREATE OR REPLACE VIEW CO_VIEW AS SELECT A,B FROM CO_TEST;
SELECT * FROM CO_VIEW;

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

0 голосов
/ 13 января 2020

Как правило, порядок столбцов в таблице не считается атрибутом первого класса. Столбцы можно получить в любом порядке, перечислив имена в этом порядке.

Акцент на порядке столбцов в таблице предполагает частое использование SELECT *. Я бы настоятельно рекомендовал не использовать SELECT * в столбцовых базах данных без явного предложения LIMIT, чтобы минимизировать влияние.

Если необходимо изменить порядок столбцов, вы делаете это в Redshift, создав новую пустую версию таблицы со столбцами в нужном порядке, а затем с помощью ALTER TABLE APPEND очень быстро переместите данные в новую таблицу.

https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE_APPEND.html

...