#teradata #teradatasql
Вопрос:
Я использую TTU (быстрая загрузка) для загрузки данных в таблицу БД. Ниже приведен сценарий fastld для загрузки данных:
LOGON 127.0.0.1/test,*****;
DATABASE MyDb;
BEGIN LOADING "MyTable"
ERRORFILES error_table_1_607712459, error_table_2_1744826307
CHECKPOINT 0;
SET RECORD VARTEXT DELIMITER ',' QUOTE YES '"' ;
DEFINE in_field_0 (VARCHAR(1000)),in_field_1 (VARCHAR(1000)),
FILE = /tmp/fastload_data_file390318d5-b42d-47d6-8c0f-6822a0bbb6ef.dat;
INSERT INTO "MyTable" ("data","num" ) VALUES (:in_field_0,:in_field_1);
END LOADING;
LOGOFF;
Файл данных: fastload_data_file390318d5-b42d-47d6-8c0f-6822a0bbb6ef.dat
"Hello World", "1"
"","2"
" ", "3"
null, "4"
После загрузки: MyTable
msg num
Hello World 1
null 2
3
null 4
Когда файл данных содержит пустую строку («»), быстро загрузите вставку null в базу данных. Я пробовал использовать TTU 16.20 и 17.00 в ОС Ubuntu, поведение одинаковое в разных версиях. Мне интересно, как избежать вставки Null в таблицу. Есть какие-нибудь предложения?
Комментарии:
1. Я думаю, что вам нужно включить
nullif
в определение своей колонки —field_0 (VARCHAR(1000),nullif='')
2. @Andrew Я не хочу вставлять значения null, ожидая, что fastload вставит пустые строки в таблицу. В приведенном выше примере для 2-й строки fastld вставляет значение null в таблицу для пустой строки. Я хочу избежать этого.
3. Дерьмо, я понял все наоборот, нуллиф-это противоположность тому, что ты хочешь. В вашей вставке попробуйте использовать coalesce —
...values ( COALESCE(:msg,'' '')
. Не уверен, что это применимо для быстрой загрузки.4. ОБЪЕДИНЕНИЕ недопустимо для быстрой загрузки или загрузки TPT. Вам потребуется использовать какую-либо другую утилиту, такую как MultiLoad или ОБНОВЛЕНИЕ TPT.
5. Да, @Фред, ты прав. Я вижу, что это ограничение от утилиты быстрой загрузки. Они упомянули об этом в разделе «Нулевое поле» на своей странице документа docs.teradata.com/r/r_6Z4JwVMhANtZFCIKEx7Q/…