#sas #vertica
#sas #vertica
Вопрос:
Наша организация находится в процессе перехода с PADB на Vertica. У нас есть аналитик, который использует SAS. Я преобразовал их инструменты и макросы, чтобы иметь возможность работать с PADB в Vertica. Но когда дело доходит до загрузки данных из SAS в Vertica, производительность не такая, как раньше.
Я вижу, что время выполнения с 1-2 минут становится 2-3 часами.
Я использую ODBC, поскольку не смог использовать другой метод, например :
proc sql exec;
connect to odbc (datasrc=EDW authdomain=VERTICA);
execute(COPY CRM_COMMON.new_load_test FROM local
'/data/saswork/SAS_work765E0000405D_cammsaim238/SAS_workB45C0000405D_cammsaim238/test1.csv' PARSER fcsvparser() ) by odbc;
disconnect from odbc;
quit;
Это не работает, я получаю примечание: ПРИМЕЧАНИЕ: данные не найдены / не изменены.
Я пытался использовать proc append и proc dataset и proc copy, все идет медленно. Я пытался использовать bulkload, но он недоступен.
Есть идеи о том, что я могу сделать или попытаться ускорить передачу данных? Дайте мне знать! ——-ОБНОВЛЕНИЕ —- Я пробовал различные другие способы и все еще получаю ошибку, когда я проверяю журнал, похоже, проблема с нулевыми значениями из моих данных… есть идеи?
proc sql exec;
/* Loading converted csv file to ParAccel */ connect to odbc (datasrc=EDW authdomain=VERTICA); execute(COPY CRM_COMMON.new_load_test FROM local '/data/saswork/SAS_work765E0000405D_cammsaim238/SAS_workB45C0000405D_cammsaim238/test1.csv' DELIMITER ',' ) by odbc;
disconnect from odbc;
quit;
Комментарии:
1. Виден ли путь к файлу CSV на сервере, на котором запущен EDW (или VERTICA)?
2. да, это видно, мне также удалось добавить опцию прерывания или ошибки, и это помогает с типом ошибки, отклоняющей вставку
Ответ №1:
Удается загружать данные с помощью этого :
Я использовал опцию прервать при ошибке, чтобы получить более подробную информацию об ошибке, а также опцию отклонить, чтобы просмотреть запись, которая не удалась
в конечном итоге проблема заключалась в нулевых значениях именно с меткой времени. Я не нашел подходящего решения для загрузки данных любого типа с учетом меньшего количества нулей и формата, но мне удалось загрузить данные быстрее, чем при использовании ODBC
Я попробовал опцию, завершающую nullcols, но это не помогает с нулевыми значениями
proc sql exec;
/* Loading converted csv file to ParAccel */
connect to odbc (datasrc=EDW authdomain=VERTICA);
execute(COPY CRM_COMMON.test_low FROM local '/data/saswork/SAS_work765E0000405D_cammsaim238/SAS_workB45C0000405D_cammsaim238/test_low.csv' DELIMITER ',' abort on error
rejected data '/data/saswork/SAS_work765E0000405D_cammsaim238/SAS_workB45C0000405D_cammsaim238/reject_low.csv' ) by odbc;
disconnect from odbc;
quit;
Комментарии:
1. Я бы также добавил
EXCEPTIONS '/data/saswork/SAS_work765E0000405D_cammsaim238/SAS_workB45C0000405D_cammsaim238/test_low.log'
предложение и поместилREJECTMAX 50
предложение вместо вашегоABORT ON ERROR
. Это позволяет подготовиться к нескольким различным типам ошибок за одну попытку загрузки. И неудивительно, что это занимает гораздо больше времени. Управление ошибками, когда это становится необходимым, значительно замедляет процесс копирования.2. Хорошая идея! Большое спасибо!!