среда, 8 октября 2014 г.

SAS connect to Hadoop. Способ подсоединения через Filename. Part1

Всем добрый день.















Сегодня рассмотрим пример, как можно создавать файлы в hadoop, а также делать записи в эти файлы и после забирать данные.



Визуально схема взаимодействия SAS и Hadoop выглядит следующим образом:






















Итак самое главное, что Вам нужно сделать, это написать следующий конфигурационный xml файлик:



















Где сервер hadoop_main_node, нужно заменить на Ваш сервер, а точнее на гловной Node hadoop.

После этого пишем обычный filename с указанием access method - HADOOP, обязательно в опциях нужно указать путь к конфигурационному xml файлу.

























В приведенном примере мы созадли файл test.txt и записали туда одну записть "TEST test Test1"

Теперь убедимся в том, что данный файл появился в файловой структуре Hadoop:




Первая команда была выполнена до запуска sas кода, вторая уже после. Сравнив, мы видим, что появился наш файлик test.txt.

Теперь давайте попробуем забрать эти данные. Делается это также просто:




















Мы видим, что в work появился файлик Test, в котором есть как раз одна наша запись.

В дальнейших уроках мы рассмотрим другой метод соединения с Hadoop, а именно через SAS/Access.

Вкратце обо всех трех способах взаимодействия SAS и Hadoop писал в прошлой статье.

До скорых встеч.
С уважением,
Тимаков Николай.

SAS Access to Hadoop. Соединение с Hadoop через SAS Access. Part 2.

Всем привет.













Итак, вчера мы рассмотрели способ соединения SAS напрямую с HDFS - файловой системой Hadoop (со статье можно ознакомиться, перейдя по ссылке).

Сегодня же рассмотрим другой подход, а именно тот, который SAS пропагандирует как наиболее правильный, т.к. Вам не нужно будет изучать другой язык, а писать можно по старинке через SAS Data Step или через Proc SQL.





Для начала посмотрим на тот как происходит соединение:




Елси вы внимательно посмотрите на эту картинку и ту, что была во вчерашнем посте, то заметите, что JARs файлы все также нужны. Однако уже не нужно писать конфигурационный xml файл. Также стоит обратить внимание, что соединение идет через Hive Server.

И так давайте рассмотрим пример соединения:



Для большей наглядности подключены опции sastrace, sastraceloc, notsuffix. 

Из лога видно, как проходит соединение. По умолчанию соединение идет с базой данных DEFAULT, однако можно конечно же указать любую имеющуюся другую базу. 

Также всегда идет в конце выполнение кода SHOW TABLES - для того чтобы вы могли видеть список таблиц в вашей библиотеке. 

Теперь давайте попробуем прогрузить таблицу размером чуть больше двух гигабайта и с более чем 13 миллионами записей:



Можно увидеть в логе, как SAS Access преобразует кода Data step в код Hive SQL.

Прогрузка 13 697 371 строк заняла чуть больше минуты.

Теперь давайте удалим данную таблицу, написав код через Proc SQL:



Также в логах можно видеть преобразование кода в Hive SQL.

Даный пример более наглядно с комментариями можно посмотреть в ниже приведенном виде-уроке:





Если есть какие-то вопросы задавайте. 

SAS plus Hadoop. А для чего нужно вообще связка Hadoop и SAS?

SAS plus Hadoop. А для чего нужно вообще связка Hadoop и SAS?

Всем привет.












Не для кого не секрет, что объем данных, с которыми мы работаем постоянно растет.
И анализировать возрастающий объем становиться все сложнее. Скорость работы ваших программ постоянно увеличивается и долего не всегда она увеличивается пропорционально объему поступаемых данных.




Так вот сейчас все большую популярность набирают MPP системы.

И речь уже не стоит в том "будут ли компании внедрять подобные системы или нет ?", а стоит лишь вопрос "когда ?"

Причем зачастую решение принимается, когда уже нет больше сил терперь, то что работает сейчас.

Так вернемся к нашему заголовку.

Одно и применений связки SAS + Hadoop - это просто хранение данных, как в решение SAS Visual Analytics. Там Hadoop используется как источник для LASR Server и позволяет быстро подгружать в оперативную память необходимые для анализа данные.
Скорость увеливается в десятки раз, по сравнению с тем, как если бы грузились бы данные просто с внешненго источника.

Другое применение связки SAS + Hadoop - это  проваливание вычислений в Hadoop (или другую MPP платформу, как например Teradata, Greenplum и другие).
Примером может служить решение "SAS Scoring Accelerator" для различных платформ.

В данном случае скоринговые модели считаются на сторонее MPP платформы, что дает значительный выигрыш во времени потраченное на скоринг.

14 комментариев:

  1. О SAS Scoring Accelerator много говорят. На практике это, к сожалению, работает очень, очень плохо. Дело заключается в том, что MPP решения обычно внедряют в проектах DWH и это подразумевает наличие ETL-процессов, которые запускаются по времени. При этом в MPP системах данные "размазываются" по разным нодам (в идеале равномерно), и каждая задача нагружает всю систему целиком. Вполне очевидно, что регламентные ETL - процессы имеют высший приоритет. Он-лайн скоринг, как говорится, это интересно, но поддержку ключевых бизнес-процессов никто не отменял. Как следствие, в некоторые моменты времени производительность этих акселераторов сильно проседает. Дальше интереснее. В сколь-либо крупной организации (а другие либо не могут себе позволить закупку MPP решений, либо не испытывают в них нужды) в ЦХД живут десятки витрин и ETL -процессов, а уровень утилизации либо высокий либо очень высокий. Хотя бы потому, что проекты ЦХД обычно презентуются высокому руководству как способ экономии на закупке железа, в духе, что раньше у нас было 10 отдельных систем, каждая мощностью X и стоимостью Y, которые работали на 40% своей мощности в среднем, в теперь будет одна, мощностью 4,4X и стоимостью 5Y, мощности которой будут использоваться рационально.
    Ну да. Только ее загрузка будет за 90% в среднем. Звучит красиво, если не задумываться, что в худшем случае, который будет случаться не так уж и редко (попробуйте добиться идеальной синхронизации и идеальной работы всех процессов), ETL - процессы в очереди стоять будут. А весь смысл акселераторов в том, что они используют СВОБОДНЫЕ ресурсы MPP системы. Которых при таком раскладе не будет вовсе. И закупать дорогое железо, чтобы был резерв мощности на случай, когда Вам приспичит скоринг погонять, никто не будет. В России я ни от одного конечного пользователя в адрес связки акселератор+MPP цензурных слов не слышал, за исключением, единственного, по-моему, исключения, когда этот MPP изначально внедряли для быстрого обсчета моделей в операционном контуре, а не в рамках проекта общекорпоративного DWH, где этот обсчет - дело десятой степени важности.
    Ну и по мелочи: в один момент времени у Вас может быть только одна версия акселератора и одна версия SAS. Если в организации два проекта, то первый проект сможет перейти но новую версию SAS только вместе со вторым, иначе один из этих проектов останется без акселератора. Проекты же в больших организациях редко меньше года длятся. И в середине проекта версию ПО менять в здравом уме никто не будет. В итоге на новую версию Вы перейдете через пару лет в лучшем случае, потому что пока второй проект доделают, откроется третий или вторая фаза первого. А ведь проекты могут быть еще и в разных подразделениях, что согласования отнюдь не упрощает.
    Кроме того, у этих самых акселераторов есть неприятная особенность, что запускать в них более-менее удобно можно лишь модели, которые сделаны в Miner. Если Вы выпилили что-то в Guide, для запуска модели на стороне MPP системы придется попрыгать с бубном и поработать напильником. Положим, модели текущего кредитования (для рисков) или модели отклика (для CRM) в Miner делаются удобно. Но вот уже с LGD моделями не все так радужно, а лабать в Miner NII и EaR - это разновидность мазохизма. С другой стороны, эти модели и на жутко больших объемах гонять обычно не надо. Но тогда возникает один неприятный вопрос: а где их вообще гонять, если мы изначально ставку на обсчет на стороне хранилища сделали. Понятно, что если припрет, можно и на личной персоналке обсчитать, но, спрашивается, если очереди на "он-лайн" скоринг для одной задачи надо ждать пару дней, а вторую приходится считать, где получится, зачем вся эта возня с акселераторами вообще нужна? Дешевле просто вывести в штат человека, который модели реализовывать в Java, PL\SQL или Teradata SQL или предложить подчиненным освоить нужный язык, благо научиться кодировать конструкции вида "если- то, иначе" много ума и усилий не требуется. Обойдется на порядок дешевле затрат на проект и стоимости лицензии и работать будет лучше.
    Ответить
    Ответы
    1. Про все остальное не знаю, но прокомментирую последний абзац. Если это написано про алгоритмы реализованные в Miner:
      > благо научиться кодировать конструкции вида "если-то, иначе" много ума и усилий не требуется
      ,то это конечно не верно. (Хотя верно, но только до той степени что к if-else + циклам можно свести любую самую сложную программу). В Miner-е реализованы сложные методы и, думаю, оттестированы. Может быть за основу взяты Open source продукты, это не известно. Но самому реализовывать всё что есть в майнере совсем не обязательно, потому что все равно придется писать тесты и сравнивать с уже существующими имплементациями. Проще сразу взять уже готовые библиотеки в которых код "revisited and tested". Если, нужна Java, то можно взять Weka (там есть GUI интерфейс, но можно использовать довольно легко и jar файлы прямо в своем исходном коде).
    2. Иван, здравствуйте.

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

      Где-то я разделяю вашу точку зрения, где-то нет.
      Прежде всего везде нужно подходить с умом и понимать еще до внедрения какие задачи будет решать данная система.

      Часто бывает так, что уже существуют рабочие модели, которые отрабатывают по расписанию. Такие модели действительно надо оборачивать в ETL и ставить на расписание.

      Что косается online скоринга, то здесь нужно думать. В данном случае, пологаю, модели могут быть не сложные и общет может идти на сервере SAS (тем более если "проваленные процессы" в MPP систему будут висеть в очереди).
      Конечно всего не предусмотришь и многое начинаешь понимать лишь при внедрении.

      Что касается новых версий - здесь я с Вами соглашусь. Не так просто заказчику перейти на новую версию, да и делают они это с большой неохотой, т.к. на старой написано уже много кода и нужно платить дополнительные деньги просто за перенос этого кода на новую версию и чтобы все работало. До сих пор есть те, кто использует SAS 9.1.3.

      По поводу того кого взять в штат, здесь какждый решает задачу сам. Порой грамотного специалиста по SAS найти труднее и дороже, чем тоже по Java или PL/SQL.
  2. Аlexander, абзац "if-then-else" относился к решающим правилам, которые получаются на выходе Miner, и процедуре внедрения этих правил в операционный контур посредством, например, BRMS приложения (от FICO, Experian или CRIF) или непосредственно в ETL-машине, а не к процедурам/алгоритмам, с помощью которых Вы это решающее правило (скоринговую карту, если угодно, или модель и.т.д.) получаете.
    В самом Miner, хочу обратить внимание, нет почти ничего, чего бы не было в SAS BASE+STAT+...(или в Guide, который есть ничто иное как просто графическая оболочка над ядром), зато ряд процедур, которые удобно вызываются в Guide (там есть вполне удобный редактор), в Miner можно вызвать только через ублюдочный нод SAS Сode, в котором писать что-то длиннее пары строк, мягко говоря, неудобно. Зато за отдельные деньги к Miner докупаются допноды Ctredit Scoring, в которых есть, например, IG. Этот нод действительно экономит массу времени при разработке типовых моделей и реализовывать его самостоятельно, как это пытались делать в одной из дочек европейского банка, здравомыслящие люди точно не будут, в этом я с Вами соглашусь. Miner, повторюсь еще раз, хорош там, где надо быстро клепать типовые модели определенного вида, или где молспецу, который глубоко не разбирается в работе процедур, нужно без надрыва сделать модель, или если надо быстро что-то сделать, и принципиально время, а качество - достаточно вполне себе среднее (ложка к обеду бывает иногда очень дорога). Здесь Miner - вне конкуренции.
    Но речь в моем посте была про другое: передача модели из SAS в MPP cопряжена с рядом сложностей, если Вы разрабатываете модель не в Miner, а в Guide. Иногда эту модель (набор весов при атрибутах, а не алгоритм, еще раз повторюсь) дешевле тупо самому руками реализовать в этой MPP cистеме, пользуясь инструментами MPP системы, а не пытаться сделать то, что рекомендует вендор. И опять-таки, как бы Вы туда (в MPP) модель не передавали, средствами SAS Score Accelerator или ручками, никакого "вау-эффекта" в большинстве случаев Вы не получите. Просто потому, что в MPP-системе будет острый дефицит машинных мощностей. Или потому, что настройки уровня изоляции транзакций хранилища рассчитана изначально лишь на подготовку сводов, а не на обработку он-лайн событий. Или потому, что Ваша MPP относится к классу блочных со всеми их достоинствами и недостатками.
    Бывают в жизни огорчения.
    А деньги организации приносят, вообще говоря, не модели сами по себе (это просто отчет, грубо говоря), а только лишь работа этой модели в операционном контуре. Нет этого - нет денег. Нет денег - аналитики будут лишь сервсным подразделением, которое плодит никому ненужные презентации с красивыми графиками, и рассуждают о кораблях, бороздящих просторы театра.
    Ответить
    Ответы
    1. Понятно Иван, значит неправильно понял. Я на все это как раз смотрю с точки зрения чисто аналитика ) Да, очень интересно, не знал о таких проблемах. После прочтения появилось ощущение что всё-таки некоторые проблемы созданы SAS искуственно, так чтобы люди пользовлись не только Base/Guide, но и Miner не обходили стороной!)
    2. Я последние годы смотрю на все это с точки зрения миноритарного акционера, и меня интересует не столько Gini, KS или SSI, сколько ROI и NPV от инвестиций в ту или иную инициативу в целом. Просто для справки: при создании подразделения по моделированию, у людей до 70-80% времени при этом самом моделировании уходит на подготовку данных. А ведь собственно моделирование - это ведь еще не все. Документирование, внедрение в операционный контур или, как минимум, участие в тестировании этого внедрения (даже если есть BRMS надо убедиться, что при внесении модели нигде не ошиблись с знаком, цифрой, ряазрядностью, именованием переменных), отчетность, мониторинг эффективности, what-if анализ, управление требованиями к информационным системам, бизнес-анализ и.т.д. В итоге, при внимательном изучении вопроса, собственно моделированием люди не так уж много и занимаются. Это я не к тому, что моделирование - бесполезная трата времени, а к тому, что ключ к повышению эффективности лежит вовсе не в выборе самого крутого алгоритма, а завязан на подходы к проектированию фронт-систем, организации бизнес-процессов, зрелости ИТ-инфраструктуры, качество данных (которое ни один MDM проект сам по себе не обеспечит, если на входе полный трэш).
    3. Иван,
      Не совсем с Вами соглашусь. 70-80% тратить на подготовку данных можно лишь в начале проекта. Когда же подразделение по моделированию работает не один год, то процесс подготовки данных уже должен быть давно выстроен. И тратить на это более 30% процентов времени уже непозволительно. Тем более должны быть специализации. Подготовку данных лучше отдавать отвечающим за это подразделениям, а те кто строят модели должны строить модели, тестировать их, переобучать и смотреть, что бы они не устаревали.
      Что косается документации, тоже вопрос. Обычно когда подразделение внутреннее, то не особо следят за документацией. К тому же сейчас IT средства позволяют сделать автоматическую документацию в виде word или pdf документа не тратя на это время.
      Соглашусь с Вами в том, что очень важно, чтобы на входе был порядок. 
    4. > у людей до 70-80% времени при этом самом моделировании уходит на подготовку данных

      Известная тема!) Если данные подготовлены "хорошо", то и самый простой алгоритм выдаст хорошие результаты. Ведь в подготовку данных можно включить и features selection процесс, аппроксимацию missing data и много чего еще. Да, это наверное и есть основная проблема в моделировании в индустрии - подготовка данных, а запустить на них нод в майнере любой сможет) Интерпретировать и tuning тоже конечно надо, но это интересная работа, в отличии от подготовки )
    5. Этот комментарий был удален автором.
    6. > Я последние годы смотрю на все это с точки зрения миноритарного акционера, и меня интересует не столько Gini, KS или SSI, сколько ROI и NPV от инвестиций в ту или иную инициативу в целом.

      А есть открытые данные? Интересно было бы посмотреть) Или они только акционерам доступны?
  3. Этот комментарий был удален автором.
    Ответить
  4. Я про самое начало и говорил. Простое создание БД масштаба отдела (в простейшем случае реплики фронта и кредитной системы, например), позволяет повысить эффективность процесса разработки моделей намного сильнее, чем закупка самого продвинутого инструмента для моделирования.
    После того, как эта БД превращается в настоящую аналитическую БД, где есть не только исходные данные в форме, в которой их можно непосредственно в стат.пакет засунуть, но и предрассчитанные поведеческие агрегаты, а на 3 специалистов по моделированию выводится 1 специалист по работе с данными, который в разы быстрее может посчитать сложные атрибуты, загрузить в БД данные из нового источника во время пилота, автоматизировать аналитическую отчетность и.т.д, время разработки моделей снижается в разы.
    Опять-таки, если из операционного модуля в аналитическую БД передаются ID моделей, которые были применены к текущей заявке, это не только 1/N testing позволяет сделать удобным при прогоне champion challenger. Это же дает возможность легко автоматизировать верификацию моделей, даже когда этих моделей будут сотни. Собственно IV посчитать, KS, Gini, SSI и статистику Хосмера-Лемешоу (или какую-то ее вариацию) для контроля стабильности калибровки - задача не бог какой сложности.
    Принципиальна организация процесса. Самая совершенная кредитная фабрика или аналитический CRM не даст Вам нормально осуществлять эксперименты в рамках champion challenger, если у Вас в BRMS модуле изначально не задаются iD моделей при внедрении и.т.д.
    Таких тонких мест в процессе зарабатывания денег на аналитике - сотни.
    К сожалению просто иметь толковых специалистов по SAS, Java или Oracle, иметь грамотных аналитиков, бюджеты и проектных менеджеров и.т.д.для достижения успеха (в денежных единицах) недостаточно. Очень многое упирается в менеджмент и организацию взаимодействия между подразделениями.
    Например, если при проектировании фронт-системы изначально не подразумевается, что эти данные будут использоваться в анализе, и вместо заполнения из справочников допускается ввод данных в свободных текстовых полях, а при заполнении идентификаторов типа ИНН не проверяются контрольные суммы и.т.д., то на входе у аналитиков будет такой трэш, что мама не горюй.
    А ведь это, как и наличие "сквозных" ID для клиентов, - из уровня прописных истин.
    При этом, не выстроив процессы даже на базовом уровне, набольшие крупнейших компаний сейчас ломятся за новой серебряной пулей в виде Big Data, In-Memory-Analytic и.т.д., не понимая, что добиться проставления в кредитной системе признака, который бы указывал на судьбу кредита (реструктуризация, списание, мировое соглашение и.т.д.), намного дешевле, надежнее и эффективнее, чем попытка установить эту информацию путем сопоставления неструктурированной информации из различных ИС организации. Особенно, когда у клиента даже идентификатора нет и предлагается искать информацию по ключам типа ФИО+ДР.
    Сколько я уже этих серебряных пуль на своем веку перевидал. Кейс-инструменты, описание и оптимизация бизнес-процессов на пару с UML, гриды, облачные технологии, виртуализация, DWH с MPP и целевые модели данных, аналитика/скоринг - на-стороне - хранилища, аналитика/скоринг - в-оперативке...
    А на практике...Ну пользовали 3NF - стали Data Vault. Щастя нет, а DWH как пилили годами, так и пилят. Да..надо вместо DWH поиметь еще и ODS, и прочие хранилища для он-лайн аналитики. Мда...треш как был, так и остался трешем. Нет, мы поняли - нам надо Map Reduce и свертки - и наступит Щасте. Неа, не наступит.
    Уже гонялись за MDM системами - количество мусора в хранилищах не уменьшилось. Идея грамотно проектировать фронтовые системы и органично развивать ИТ-ландшафт выглядит все еще менее привлекательной, чем покупка и внедрение SAS Data Quality или HF Labs за много-много денег, которые - фокус-покус и решат все проблемы.
    Не решат. Но веру в Поле Чудес в Стране Дураков истребит только конкуренция, если ей когда-то будет суждено возникнуть в нашей стране.
    Ответить
    Ответы
    1. Иван,
      Во многом с Вами согласен. Действительно, порой для значимых улучшений достаточно более качественно и внимательно отнестись к настройкам фрон офисных систем. Это сэкономит много сил в дальнешем при анализе данных.
      Если же из источников мы льем в хранилище Г., то какие бы системы мы не закупали и не вычищали это Г., все равно нормальные модели не построить. Точнее что-то мы построим, но вряд ли они будут точными и приносить желаемый value.
      А так надоже вендорам денежку зарабатывать, вот и пишут в маркетинговых статьях о плюсах своих продуктов и о счастье которое наступит когда вы эти продукты внедрить ).
  5. webinar по теме:
    https://plus.google.com/+sassoftware/posts/ZyRb9eJVq3o

SAS connect to Hadoop. Три способа взаимодействия SAS и Hadoop.

SAS connect to Hadoop. Три способа взаимодействия SAS и Hadoop.

Всем привет.












Уже достаточно давно у всех на слуху слово Hadoop или Big Data.
Многие про это слышали, но мало кто видел.

Тем неменее SAS уже официально является партнером таких мировых лидерова какCloudera  и Hortonworks.

Если зайти на сайт SAS, то можно увдидеть множество макретинговой информации о приимуществах hadoop и визуализации SAS.

Однако когда дело доходит непосредственно до работабы все оказывается не так просто...




Есть официальная документация SAS по тому как настраивать соединение SAS c Hadoop. Его можно посмотреть тут.

А дело в том, что необходимо создавать папку и прописывать путь SAS_HADOOP_JAR_PATH и класть туда специальный jar файлы из уставновленного hadoop. Это может быть как Cloudera, Hortonworks, Apache Hadoop, IBM BigInsigths.  Но какие именно нужны фалы вам об этом никто не скажет. Так сказать разбирайтесь сами. С этим пришлось изрядно повозить.

Так вот возвращаясь к названию статьи есть три способа соединяться с hadoop:

1. Непосредсвенно через файлы. В таком случае обращение идет сразу к файловой системе hadoop HDFS:



2. Через MapReduce. В данном случае вы уже можете писать и запускать свои mapreduce программы.



3. Через SAS/Access. В данном случае взаимодейсвие идет через Hive Server, а не непосредсвенно через hadoop.



Таким образом, как можно видеть, не обязательно иметь SAS Access to Hadoop для того чтобы взаимодейсвовать с Hadoop.

Данные картинки я взял из презентации Jeff Bailey, который непосредсвенно отвечает за плагины SAS Access к различным базам данных.

Если у Вас появятся вопросы, связанные с коннектом SAS и Hadoop обращайтесь. Или поделитесь опытом - сколько времени вы на это потратили :).

С уважением,
Тимаков Николай.

Настройка работы SAS с БД Oracle

Настройка работы SAS с БД Oracle

Всем привет!

Данная статья посвящена тому, как правильно надо настраивать систему для работы с БД Oracle в системах Windows. Так или иначе, какая-то часть информации уже и ранее была опубликована на нашем сайте. Тут будет собрана вся необходимая информация в одном месте!




1. На первом этапе, необходимо убедиться, что SAS Access To Oracle есть в лицензии и установлен. Для этого заходим в SAS Base \ Enterprise guide и вводим следующий код:

proc setinit;
run;

В логе будет отображён список, где и ищем ---SAS/ACCESS Interface to Oracle.

2. Далее, устанавливаем правильную версию клиента Oracle, разрядность которой будет соответствовать разрядности установленного SAS. Для этого заходим на сайт ORACLE, где и ищем необходимую версию и разрядность клиента или базы. После чего скачиваем и устанавливаем дистрибутив. Желательно перезагрузить систему.

Замечу, что изначально рекомендуется установить Oracle Client до установки SAS.

3. В файле TNSNAMES.ORA указываем параметры доступа к нашей БД.
Примерно по следующему пути можно найти необходимый файл:
С:\APP\PRODUCT\11.2.0\CLIENT_1\NETWORK\ADMIN\
В TNS указываются следующие параметры:
NAME =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = HOST_NAME)(PORT = PORT))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SID_NAME)
    )
  )
Подчёркнутое прописывать ручками =)


На этом этапе может возникнуть сразу несколько разных нюансов.
4. Клиент SAS неправильно отображает символы из БД. Это может происходить по нескольким причинам:

Меняем параметры системного файла sas9.cfg. Сначала заходим в sas9.cfg, который лежит по адресу ниже:
!ROOT\SAS\SASHome\SASFoundation\9.3\
!ROOT - это корень где лежит SAS. Это обычно C:\Program Files\ или просто C:\. В общем, то место куда устанавливался SAS.

В этом файле прописан путь к другому sas9.cfg файлу, который нас и интересует. В моём случае это:
-config "C:\SAS\SASHome\SASFoundation\9.3\nls\u8\sasv9.cfg"

 Далее переходим к этому файлу. Обязательно делаем копию этого файла, а далее в конце списка добавляем следующие строки или заменяем те, которые уже как-то есть в списке.
-DBCS
-LOCALE ru_RU
-encoding=utf-8 

Перезапускаем SAS Base и смотрим далее. Если картинка изменилась, но всё равно непонятные символы, то переходим к следующему шагу, иначе сразу к шагу 6.

5. Изменение записей в реестре.
Для правильного отображения меняем параметр NLS_LANG.
Переходим в HKEY_LOCAL_MACHINE\SOFTWARE\oracle\KEY_OraClient11g_home1
И далее меняем параметр на AMERICAN_AMERICA.AL32UTF8

Теперь отображение значений должно быть в норме.

6. Последний момент связан с созданием таблиц на стороне БД. Проблема возникает когда примерно следующий код создаёт табличку:

LIBNAME TEST ORACLE <options>;
PROC SQL;
     CREATE TABLE TEST.A
              (X CHAR(250));
QUIT:


А далее делаем
PROC CONTENTS DATA=TEST.A; RUN;
 
Причём, даже если "провалиться" на БД и написать код, то всё равно размерность будет в 4 раза больше.

Вот такую скромную размерность создаёт SAS при работе с Oracle.
Если посмотреть эту же табличку через SQL Developer, то увидим:
Name  Null               Type          
----       ----                --------------
X                               VARCHAR2(1002)


Всё это происходит по тому, что SAS при работе с Unicode увеличивает размер в 4 раза, как на уровне создания таблички, так и на уровне возвращения запроса.

Для того, чтобы данную проблему избежать необходимо указывать следующие параметры при указании библиотек:
LIBNAME TEST ORACLE <options> DBSERVER_MAX_BYTES=1 DBCLIENT_MAX_BYTES=1;

Теперь SQL Developer возвращает:
Name  Null               Type          
----       ----                --------------
X                               VARCHAR2(250)

Если запустить в SAS процедуру CONTENTS, то она уже возвращает:

На этом всё! Спасибо за внимание!