Проблема с производительностью при загрузке данных SAS в Vertica

#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. Хорошая идея! Большое спасибо!!