2010-11-23 2 views
0

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

ответ

1

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

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

1

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

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

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

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