powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Datastage
41 сообщений из 41, показаны все 2 страниц
Datastage
    #38687794
Всем привет,

рабоаю за границей. С Datastage 8.0.1 BuildNr 1.2 не имею ничего общего, но коллеги дискутируют на одну тему:
До этого времени получали файлы с латинским шрифтом и записывали данные с Datastage в базу данных. Поля в файлах имеют потоянную величину. Теперь будут пресылать в файлах русские буквы. Мой вопрос, можно ли прочитать с Datastage русские буквы или äöü, если поля имеют постоянную величину, илу нужно вводить разделительный знак?

Спасибо заранее...
...
Рейтинг: 0 / 0
Datastage
    #38687816
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hans Christian Andersen,

можно прочитать любую кодировку (аккуратнее с unicode - размерчик в два раза увеличивается)
...
Рейтинг: 0 / 0
Datastage
    #38687820
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hans Christian Andersen,

За уточнениями лучше обратиться к Hunterik'у - очень рекомендую.
...
Рейтинг: 0 / 0
Datastage
    #38687831
knudsen,

коллеги сделали следующее

файл выглядет так (3 поля, в каждом три символа.
asdйцуффф

Поменяли лементы Datastage на utf-8.
Поля имеют тип NVARCHAR (3 CHAR).

Результат, русские буквы читаются, но часть. Вместо 3 символов, читается 2...

В чем проблема ?
...
Рейтинг: 0 / 0
Datastage
    #38687841
knudsen,

Емаил, телефон?
...
Рейтинг: 0 / 0
Datastage
    #38687842
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hans Christian Andersen,
можно уточнить предварительно в какой кодировке вы привыкли работать?
- кодировка входного файла
- NLS проекта DataStage
- NLS базы конечной
...
Рейтинг: 0 / 0
Datastage
    #38687864
Hunterik,

спасибо за участие.
база:
NLS_CHARACTERSET WE8ISO8859P15 . Будет меняться может на UTF8.


Datastage:
General NLS Settinig:
MS1252-CS

Project NLS Setting:
ISO8859-1

P.S. Пока пробуем считать файл с Datastage и выгрузить данные в другой файл без участия БД.
...
Рейтинг: 0 / 0
Datastage
    #38687881
Hunterik,

File ANSI
...
Рейтинг: 0 / 0
Datastage
    #38687904
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж...

Ладно, давайте в общем, чтобы прочитать поле файла с данными, записанными в какой-то кодировке, нужно чтобы Sequential File работал в этой кодировке с данным полем (настройка может наследоваться от проекта, переписываться настройками задания, переписываться настройками элемента, переписыватья настройками отдельного поля).

Предположим, у вас файл в 1251.
Всё остальное по настройкам к работе с русским не очень располагает, потому можно так:

- в настройках Sequential File для NLS ставите windows-1251 для данного примера.
- текстовые поля с русским отмечаете, как Unicode (эта опция задействует NLS-преобразования)
при этом если у вас размерность поля три СИМВОЛА, то varchar(3) Unicode корректно их прочтёт и дальше - это будет просто набор байт внутри задания DataStage, причём русский символ будет хранится двумя байтами.

Если вы внутри задания где-то, скажем в трансформере, снимете опцию Unicode для данного поля, оставив varchar(3), то получите неявное преобразование varchar(3) Unicode для 'ЯЯЯ' (6 байт) в varchar(3) (3 байта), которое приведёт к порче данных, будет Я (2 байта) + 1 байт нечитаемого символа, остальное вы убъёте, соответствующее предупреждение будет в журнале задания.

Возможно, что-то подобное вы и сделали. Если же вы протащите от одного файла до другого сквозь всё задание varchar(3) Unicode с указанием правильной кодировки для чтения и записи файлов, всё должно быть хорошо.
Наверное так.
...
Рейтинг: 0 / 0
Datastage
    #38687916
А что, если у меня файл в Юникод?
...
Рейтинг: 0 / 0
Datastage
    #38687931
Hunterik,

вопрос поставлю глобально. Теперь файлы для чтения будут приходить в Юникод и нужно, весь проект поменять, что бы была возможность читать любые символы. Свойства файлов (разделение полей по постоянной величине) не должны меняться для решения проблемы.
...
Рейтинг: 0 / 0
Datastage
    #38687987
[quot Hunterik]
- текстовые поля с русским отмечаете, как Unicode (эта опция задействует NLS-преобразования)
/quot]

как попасть на эту опцию?
...
Рейтинг: 0 / 0
Datastage
    #38688028
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что ж, тогда и ответ глобально. =)

Я работал в основном либо на проектах UTF-8, либо на проектах windows-1251 с русским языком.
У вас проект в ISO8859-1 - это латинский алфавит. Без проверки я не могу сказать, с какими проблемами вы столкнётесь.

Полагаю также, что как только вы начнёте писать в базу данные, они будут ломаться по той причине, что клиенты СУБД работают у вас сейчас, скорее всего, в кодировке ОС.
Я предполагаю, что у вас UNIX/Linux раз кодировка ISO8859-1 для проекта.

Разделение полей по постоянной величине - это видимо поля с фиксированной длиной... Трудности перевода. =)

Работа с различными кодировками в DataStage подчиняется следующим правилам:
1. В Администраторе можете посмотреть какая NLS настроена для проекта, у вас ISO8859-1, значит для работы с русским вы будете вынуждены при разработке менять настройки на уровнях ниже.
2. Настройка на уровне проекта влияет на настройку NLS всех заданий, но её можно поменять на уровне задания, однако...
3. Вы можете указать NLS и на уровне элемента Sequential Stage (Stage -> NLS Map) и эта настройка перепишет настройки задания.
4. Если и так не хочется, то можете читать определённые колонки в нужной кодировке (Stage -> NLS Map -> Allow per-column mapping), а далее задаётся NLS Map на уровне колонок.

Указание правильной кодировки даст возможность заданию DataStage читать данные корректно.
Для текстовых полей должна выставляться также опция Unicode (Extended атрибут) в случае необходимости использования конвертации с использованием NLS Map-ов элемента (читаем файл в кодировке, отличной от кодировки задания).

Мне кажется логичным в вашем случае сделать перевод проекта DataStage на UTF-8 - вы сможете читать свой файлик без заморочек, либо 1251 - тогда с конвертацией в Sequential File элементе (Stage -> NLS Map -> UTF-8 + Unicode на полях), в последующих элементах Unicode с колонок можно будет снять (зависит!см.ниже). General NLS Settiing сделаете MS1251-CS в Administrator client.

При этом, если вы решитесь на UTF-8, то вы должны будет понимать, что латинские символы будут передаваться по линкам, как один байт, а русские, как два.
В кодировке 1251 - один байт и те, и другие символы. Японский не надо будет грузить в будущем? =)

Строковые функции в DataStage над текстовыми полями без опции Unicode работают в байтовом режие, попробуете сделать F[1,1] от буквы 'Я' - в проекте UTF-8 испортите данные, в проекте 1251 всё будет хорошо.
Если для поля задана опция Unicode, то работа идёт в посимвольном режиме в обоих случаях и данные испортить нельзя - получите 'Я'.

И в том и в другом случае, вам придётся при работе с СУБД познакомится ещё с рядом переменных, которые к DataStage отношения не имеют.
Вам надо будет указывать, что приложение (задание DataStage) работает с данными в кодировке UTF-8 или 1251: IANAAppCodePage (ODBC), DB2CODEPAGE (DB2), NLS_LANG (Oracle), ...
Иначе клиент СУБД будет просить данные в одной кодировке (ISO8859-1), DataStage будет их ожидать в другой - получите интересный результат.
Также можно перевести сервер на другую лоакль, либо можно будет поиграться с dsenv на предмет выставления работы процессов движка в нужной локали (локаль UTF-8.EN_US должна быть установлена).

Я бы вам посоветовал не менять резко боевой проект и продуктивный сервер, а потренироваться где-нибудь рядом.
Если вы во всём этом плохо ориентируетесь, то лучше обратиться в сервис (IBM, партнёры).
...
Рейтинг: 0 / 0
Datastage
    #38688065
Hunterik,

спасибо за подробное описание. "поля с фиксированной длиной" - поняли правильно. Я работаю с SAP и с БД.
Коллеги разбираются в Datastage, но в вопросе кодировке потерялись...
Изменили Файл на UTF 8. Sequential File поменяли тоже в UTF 8. Поля декларирую как VARCHAR или Nvarchar.
Если открываю Sequential File, обрезает колонки, где находятся русские буквы.
Не могу понять почему
...
Рейтинг: 0 / 0
Datastage
    #38688072
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте пример задания и файла с данными.
Только посмотреть обещаю не сразу, может, вечером.
...
Рейтинг: 0 / 0
Datastage
    #38688174
Hunterik,

Файл
...
Рейтинг: 0 / 0
Datastage
    #38688178
UTF-Format in Stage:
...
Рейтинг: 0 / 0
Datastage
    #38688180
Column
...
Рейтинг: 0 / 0
Datastage
    #38688183
Values in Sequential Stage File
...
Рейтинг: 0 / 0
Datastage
    #38688192
При попытке показать днные( aaaäöüäö1 ) получаю ошибку:
CopyOfxfm_utf8..Input.to_T: nls_read_external() - NLS input mapping error, row 1, column s2 data 'ä?' external C3A4C3
CopyOfxfm_utf8..Input.to_T: nls_read_external() - NLS input mapping error, row 1, column s3 data '?ü' external B6C3BC
...
Рейтинг: 0 / 0
Datastage
    #38688291
и еще, кирлицу Sequential Stage File не может отобразить.
Показывает вопросительные знаки.

P.S. Есть ли у Вас skype?
...
Рейтинг: 0 / 0
Datastage
    #38688340
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не хотел Вас огорчать, не отвечая в Skype или любом другом средстве общения по Вашему желанию. У всех есть работа...

В архиве простой пример, корректно работает - пробуйте.

Но для начала настройте-ка своего Windows-клиента, чтобы он корректно отображал содержимое текстового файла с русскими символами. В архиве пример содержимого файла в картинке, так что, полагаю, справитесь - будете видеть к чему стремиться.

В администраторе DataStage тоже выставьте MS1251-CS (General->NLS->Client), перезапуск Desinger после этого обязателен.

Я максимально приблизился к вашим настройкам (ставил ISO8859-1 для проекта).
На всякий случай содержимое файла в hex после передачи на Linux (UTF-8 with BOM!):
[root@IIS912FULL tmp]# od -x HCA_UTF8_FL.txt
0000000 bbef d1bf d187 d082 77be 6f68 bad0 b0d0
0000020 bad0 000a
0000023

Передавайте файл с примером данных ТОЛЬКО в бинарном режиме, иначе рискуете его попортить.
Удачи.
...
Рейтинг: 0 / 0
Datastage
    #38688461
спасибо за консульцию.В понедельик буду пробывать.
Вопрос:
Зачем выставлять в администраторе DataStage MS1251-CS? Я же работаю и с ISO 8859-1 (ÜäÖ).
...
Рейтинг: 0 / 0
Datastage
    #38688467
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хочу, чтобы Вы windows научили работать с русским, а после этого уже сказали, как взаимодествовать клиенту с сервером: IKC
Пользуйтесь документацией - она хорошая, правда.
...
Рейтинг: 0 / 0
Datastage
    #38688489
Hunterik,

спасибо за документацию. Буду разбиратъся, хотя это задание коллег.
Windows вроде корректно отображает кирилицу. Не отображал Sequential File Stage.
Скажите, а если не зацикливаться на русском и расширить задачу. Скажем, известно, что текст может приходить со всей Европы(Болгария, Польша...). Как бытъ тогда?

Заранее спасибо...
...
Рейтинг: 0 / 0
Datastage
    #38688496
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
utf8.
Все основные европейские языки укладываются в два байта. Вся первая половина базовой плоскости - в три.
Плюс - байтовый поток полностью совместимый со стандартным CRT.
...
Рейтинг: 0 / 0
Datastage
    #38688499
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддерживаю.
...
Рейтинг: 0 / 0
Datastage
    #38688578
HunterikВ администраторе DataStage тоже выставьте MS1251-CS (General->NLS->Client), перезапуск Desinger после этого обязателен.
...
Рейтинг: 0 / 0
Datastage
    #38688581
Про UTF8 - я в курсе.
Техническая сторона интересует, т.к. не работаю с Datastage...
 Я правильно понимаю,нужно поменять в администраторе DataStage General->NLS->Client на UTF8? Кроме того, в Datastage File тоже должен быть установлен UTF8?

Спасибо за ваши ответы...
...
Рейтинг: 0 / 0
Datastage
    #38688602
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположим вы решили перейти на обработку в utf8, для этого:
1. Вы переводите ПРОЕКТЫ DataStage на работу в UTF8 (выбираете проект->NLS->Server Maps+Parallel Maps)
2. Эта настройка автоматически унаследуется на нижних уровнях где оставлены значения по умолчанию (Project Default), там где нзначения менялись пользователем - всё сохранится. Прочитайте, что я писал раньше про переопределение на нижних уровнях...
Например, если придёт файл в 1251 - вы сможете его прочитать заданием, работающим в utf8 в проекте с utf8, только надо будет элементу, читающему данный файл указать, что файл в соответствующей кодировке, чтобы чтение прошло корректно.
Разберётесь с примером, что я вчера выложил - будет понятнее.
3. Client настраивается так, чтобы бы корректно происходило взаимодействие и отображение символов. У меня 1251 при utf-ных серверах, но я работаю только с русским и английским (без национальных спец.симолов вроде умляутов), у себя - "будете посмотреть", может и utf8 поставите.
...
Рейтинг: 0 / 0
Datastage
    #38688925
Hunterik,

cпасибо вам большое. Завтра попробую ваше решение...
...
Рейтинг: 0 / 0
Datastage
    #38689345
Hunterik,

попробовали загрузить твой файл в версии 8.0.1.
получили ошибку:
HCA.dsx does not appear to be a valid DataStage export file or is from an incompatible release.
A valid DataStage export file is expected to be in Windows format (i.e. using CRLF line terminators).

При попытке поменять настройки клиента (Administrator Client->General->NLS) на UTF8, получили ошибку:
Map 'UTF8' is unsuitable for client/server use -
Does not map the UniVerse mark character IM to a single byte

Завтра будет возможность попробовать на версии 8.5
...
Рейтинг: 0 / 0
Datastage
    #38690437
Hunterik,

Какая версия Dstage у Вас?
...
Рейтинг: 0 / 0
Datastage
    #38690555
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень плохо, что вы мечетесь и пробуете всё подряд. Менять один параметр за раз!

У меня 8.7 и 9.1, вам делал на 9.1 - что под рукой было, на 8.7 импортируется.

Предлагаю вам попробовать следующую последовательность действий:
1. Выставляете Client/Server в Administrator как он у вас был (WIN1252-CS?) - соответствие кодировке Windows.
У вас Windows в какой кодировке - 1252?
2. Пробуете импортировать, далее, смотря, что получаете.

Если будет крик о несоответствии версий, то можете попробовать открыть dsx и поправить Server version на 8.5.
Вообще, официально, переход с даунгрейдом версий не поддерживается, но версий, соответствующих вашим у меня нет.

От 8.0.1 отказались - эта версия снимается с поддержки вот-вот, а 8.5 - это промежуточная версия между очень хорошим 8.7 и стареющими 8.0-8.1:
Withdrawal from support
Program
number VRM date Program release name
5724-Q36 8.1.2 04/30/15 IBM InfoSphere Information Server
5724-Q36 8.0.1 09/30/14 IBM InfoSphere Information Server
...
Рейтинг: 0 / 0
Datastage
    #38690559
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще, давно есть 9.1.2, а неделю назад IBM запилила 11.3! =)
...
Рейтинг: 0 / 0
Datastage
    #38690923
HunterikПредположим вы решили перейти на обработку в utf8, для этого:
1. Вы переводите ПРОЕКТЫ DataStage на работу в UTF8 (выбираете проект->NLS->Server Maps+Parallel Maps)
2. Эта настройка автоматически унаследуется на нижних уровнях где оставлены значения по умолчанию (Project Default), там где нзначения менялись пользователем - всё сохранится. Прочитайте, что я писал раньше про переопределение на нижних уровнях...
Например, если придёт файл в 1251 - вы сможете его прочитать заданием, работающим в utf8 в проекте с utf8, только надо будет элементу, читающему данный файл указать, что файл в соответствующей кодировке, чтобы чтение прошло корректно.
Разберётесь с примером, что я вчера выложил - будет понятнее.
3. Client настраивается так, чтобы бы корректно происходило взаимодействие и отображение символов. У меня 1251 при utf-ных серверах, но я работаю только с русским и английским (без национальных спец.симолов вроде умляутов), у себя - "будете посмотреть", может и utf8 поставите.

Попытался сделать, все как вы сказали
1. Загрузить Ваш файл
2. Клиента перевести на UTF8

Кодировка Client/Server в Administrator WIN1252-CS. Windows должен быть 1252. Dstage у коллеги проинсталирован. Будем пробовать Ваш файл в 8.5 загрузить.

Я их тоже спросил, почему старую версию используют. Говорят, что через пару месяцев будут переходить на 9.1
...
Рейтинг: 0 / 0
Datastage
    #38690977
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если приложение не юникодное, то принимать windows-1251 при системной windows-1252 оно не обязано.
"Язык неюникодных приложений" можно выбирать независимо для системы (пусть остаётся 1252) и для пользователя (отдельная учётка с 1251).
Как вариант.
...
Рейтинг: 0 / 0
Datastage
    #38691010
Hunterik,

Ваш пример работает на 8.5. Но это немного другое решение проблемы. Вы чиаете всю строку в Stage File, а затем разбиваете ее на 3 поля. Можно ли, без прмежуточных шагом, читать файл в Stage File, состоящий из 3 полей???
...
Рейтинг: 0 / 0
Datastage
    #38691073
Technote (FAQ)
Using IBM InfoSphere DataStage to read in UTF8 data as fixed length

Question
Can the DataStage sequential file stage be used to read in UTF8 data as fixed length?

Answer
UTF-8 is not a fixed size character set, characters may be 1, 2 or 3 bytes long. The server sequential file stage is not capable of handling this format as the columns are fixed width at the byte level. So a given column must be n bytes wide. Clearly this will only work with fixed width character sets.

Neither a server nor a parallel job sequential file stage can cope with a fixed-width file where the row length is not also a fixed number of bytes. Both of them take "fixed width" to mean that each column is a fixed number of bytes, not characters. Which means that they cannot work with an NLS map where the character length is not the same as the byte length (such as UTF8). This applies when the data has 2-byte UTF8 chars combined with single byte characters.

The only way of processing such a file is to change the job to read it as a single variable-length column per row (assuming there is a row delimiter such as newline), using a UTF8 map. Then have a Transformer stage that uses substringing to substring the row into each column. There is also a column import stage that would allow the data to be split into columns after reading it in as UTF8, but this would only be available in a parallel job.

Source:
http://www-01.ibm.com/support/docview.wss?uid=swg21455000
...
Рейтинг: 0 / 0
Datastage
    #38691165
Фотография Hunterik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hans Christian Andersen,
ну собственно да.

Я попробовал читать только с использованием SeqFile - для fixed length полей не пошло, а так как время дорого - сделал, как делаю обычно - прочитал файл строками, а разбираю уже позже в Import Column Stage. =)

Кстати, именно такой способ чтения является довольно хорошим по производительности при работе с большими файлами, за счёт распределения процесса чтения и парсинга. Трансформер, кстати, несмотря на то, что его в техноте ставят, как альтернативу, будет работать медленнее, чем Import Column за счёт того, что вы будете делать множество обращений вида column[m,n] - для трёх полей не так критично, для большого количества полей, трансформер существенно проиграет. =)

Тема закрыта? =)
...
Рейтинг: 0 / 0
Datastage
    #38691794
Hunterik,

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

Спасибо вам большое за консультацию. Они теперь четко знают, как менять кодировки.

Спасибо всем и успехов...
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Datastage
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]