Сохранение автоматически увеличенных столбцов в чайнике Pentaho - PullRequest
0 голосов
/ 23 ноября 2010

В Pentaho Kettle, скажем, кто-то хочет скопировать данные между двумя одинаковыми таблицами, A и B. Если есть столбец, который автоматически увеличивается, есть ли способ сохранить значение этого столбца при копировании данных из A в B ? Является ли поведение базы данных с автоинкрементными столбцами специфичным или Kettle нашел для этого общее решение?

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Тим ответит разумно. Обычно я делаю то же самое: делаю таблицу B идентичной таблице A, за исключением того, что PK в таблице B не является автоинкрементным столбцом.

(Попытка всегда вставлять данные в одном и том же порядке была бы плохой идеей. Это, конечно, было бы хрупко, как заметил Тим. Но на самом деле, это было бы хуже, чем это. Во-первых, вы не можете выполнять массовые вставки. потребуется фиксировать каждую строку индивидуально. Кроме того, обычно вы не можете быть уверены, что следующее используемое значение будет следующим целым числом. СУБД отвечает за выбор следующего значения. Существует множество ситуаций, когда следующее введенное значение не будет следующее более высокое целое число.)

Но важной деталью является то, что СУБД по-разному обрабатывают автоматически увеличивающиеся поля. Во многих случаях поведение автоинкрементного поля заключается в предоставлении значения, если вставленное значение равно NULL, но принятии явного значения, если оно задано. В других случаях база данных будет отклонять попытки вставить значение в автоинкрементное поле.

Так что, если вы сталкиваетесь с первым случаем, тогда на самом деле не проблема оставить таблицу A и таблицу B полностью идентичными. Ваше задание ETL будет вставлять значения в таблицу B, а автоинкрементный характер столбца PK будет просто игнорироваться.

1 голос
/ 23 ноября 2010

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

В качестве альтернативы можно сделать таблицы идентичными в отношении типов данных столбцов, но не иметь автоматически увеличивающийся столбец в зеркальной таблице.Просто сделайте этот столбец в зеркальной таблице целым числом, без возможности автоинкремента.

...