загрузка файла UCS-2LE в Netezza - PullRequest
0 голосов
/ 15 марта 2020

У меня есть несколько 30ГБ / 1 млрд. Файлов записей, которые мне нужно загрузить в Netezza. Я подключаюсь, используя pyodbc, и выполняю следующие команды.

create temp table tbl1(id bigint, dt varchar(12), ctype varchar(20), name varchar(100))  distribute on (id)

insert into tbl1
select * from external 'C:\projects\tmp.CSV'
using (RemoteSource 'ODBC' Delimiter '|' SkipRows 1 MaxErrors 10 QuotedValue DOUBLE)

Вот фрагмент из файла nzlog

Found bad records

bad #: input row #(byte offset to last char examined) [field #, declaration] diagnostic, 
   "text consumed"[last char examined]
----------------------------------------------------------------------------------------
1: 2(0) [1, INT8] contents of field, ""[0x00<NUL>]
2: 3(0) [1, INT8] contents of field, ""[0x00<NUL>]

, а файл nzbad имеет "NUL" между каждым символом.

Я создал новый файл с первыми 2 миллионами строк. Затем я запустил iconv на нем

iconv -f UCS-2LE -t UTF-8 tmp.CSV > tmp_utf.CSV

Новый файл загружается без ошибок, используя те же команды. Можно ли как-нибудь загрузить файлы без преобразования iconv? Для запуска iconv.

требуется очень много времени.

1 Ответ

0 голосов
/ 15 марта 2020

UCS-2LE не поддерживается Netezza, я надеюсь, ради вас достаточно, что UTF-8 достаточно для ваших данных (нет древних языков и т. П.)

Вам необходимо сосредоточиться на выполнении преобразование выполняется быстрее:

  1. поиск в inte rnet для более эффективной реализации процессора, чем / of iconv
  2. Одновременное преобразование нескольких файлов одновременно (столько же, сколько у вас ЦП) - баллы минус один, вероятно, макс). Возможно, вам придется разделить оригинальные файлы, прежде чем сделать это. Однако загрузчик netezza предпочитает относительно большие файлы, поэтому, возможно, вы захотите собрать их вместе во время загрузки для увеличения скорости на этом шаге:)
...