случай, когда vs sql присоединяется к нативному слиянию против форматов - PullRequest
0 голосов
/ 28 мая 2018

Мне приходится иметь дело с большим количеством кода, который, по моему мнению, должен работать намного быстрее, и я подозреваю, что некоторые проблемы связаны с чрезмерным использованием case when в PROC SQL.

Примеркода, взятого из SQL-запроса PROC, будет выглядеть следующим образом:

 (case 
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('F2F' 'F2' 'ME' 'VI' 'AP') then 'F2F'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('T' 'CB' 'CE' 'VOICE') then 'TEL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL='' and AFFC_BRANCH in ('CC_FR' 'CC_GENT' 'CC_LIEGE' 'CC_NL') then 'TEL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('DM_EMAIL' 'EMAIL' 'EMAIL_PS' 'OE' 'EMA' 'DM_' 'CI' 'LI' 'MP') then 'EMAIL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('DM_LETTER' 'MA') then 'MAIL'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('EMAIL_OLB' 'OB') then 'IM'
when t3.AFFC_AFF_CONTACT_ID^=. and t3.AFFC_CHANNEL in ('' 'OT' 'SM' 'EMESSAGE' 'OC') and DWH_CTI_CONTACT.CTIC_CHANNEL='' then 'OTHER'
when t3.AFFC_AFF_CONTACT_ID=. and DWH_CTI_CONTACT.CTIC_CONTACT_ID^=. and t3.AFFC_CHANNEL ='' and DWH_CTI_CONTACT.CTIC_CHANNEL^='' then DWH_CTI_CONTACT.CTIC_CHANNEL
  end) AS Channel

Этот тип экземпляра можно перекодировать различными способами, используя таблицы поиска, используемые с объединениями SQL, или объединяя с SAS, или, возможно, используя форматы (которые яне смотрел много).Может быть, есть еще другие способы, о которых я не знаю.

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

1 Ответ

0 голосов
/ 28 мая 2018

В целом, трудно консультировать по вопросам производительности, не рассматривая всю программу на высоком уровне.Тем не менее, я не думаю, что выбор логики для этого вида поиска, вероятно, будет иметь большое значение для общей производительности - в SAS любой вариант, который минимизирует дисковый ввод-вывод, обычно близок к оптимальному.

При прочих равных условиях я бы посоветовал найти вариант, обеспечивающий баланс между простотой обслуживания и избеганием повторяющегося кода.С этой целью я бы, вероятно, воспользовался поисковыми таблицами, поскольку их легко подобрать другим людям (особенно новичкам в SAS), и вы можете добавлять строки по мере необходимости, не меняя код в случае появления новых категорий.

Если вы хотите избежать использования большого количества дисковых операций ввода-вывода при использовании таблиц поиска в соединениях SQL, рассмотрите возможность создания для них соответствующих индексов и использования операторов sasfile для буферизации меньших в памяти перед их использованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...