Текущее время: Пт, мар 29 2024, 00:42

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Open SQL - online, экспорт/импорт большого объёма таблиц БД
СообщениеДобавлено: Вт, июл 09 2019, 21:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Наверняка многим знакома ситуация, когда нужно делать разработку, а данных для отладки в системе разработки просто нет и не предвидится. В лучшем случае предоставляют данные в тестовой системе, но после изменения "каждой запятой" переносить разработку через транспортную систему это извращение. Поэтому периодически возникает потребность просто взять из тестовой системы кусок данных и перенести в систему разработки в "песочницу".
Поскольку обычно нужны не все данные таблицы, а часть за какой-нибудь период или отобрать по какому-то признаку, то пришлось реализовать динамические запросы на Open SQL, а также просмотр в ALV Grid для визуального анализа.

p.s.
Давно лежит, начал забывать про её возможности и особенности. Поэтому начал делать описание, буду дописывать и обновлять здесь по мере возникновения вопросов.

Скачать можно здесь:
https://sites.google.com/site/vvnabap/fajly/zitc_download_parts

Описание:

DOWNLOAD PARTS

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

2. Что умеет
Экспорт данных из таблиц БД в файлы на компьютер пользователя.
Импорт данных в таблицы БД из файлов с компьютера пользователя.
Выборка данных таблиц БД и просмотр в виде ALV Grid.
Выборка данных для просмотра и экспорта на основе динамического запроса Open SQL.

3. Как это сделано
Задача разделяется на два процесса.
Первый процесс диалоговый, занимается чтением-записью файлов на компьютере пользователя.
Второй работает в фоне, занимается неразрывной выборкой данных БД, разделяет их на части и передаёт через Shared memory первому процессу.

4. Как пользоваться
Селекционный экран имеет две группы режимов. Первая группа: Select, Export, Import. Вторая группа: Show, Test, Work. Их комбинации задают режим работы программы:



Select & Show - Выбрать данные из БД и отобразить их на экране.
Select & Test - Для отладки программы.
Select & Work - Для отладки программы.

Export & Show - Выбрать данные из БД и отобразить их на экране, используя механизм двух процессов.
Export & Test - Экспорт данных из БД в тестовом режиме без сохранения файлов.
Export & Work - Экспорт данных из БД в рабочем режиме с сохранением файлов.

Import & Show - Считать данные из файлов и отобразить на экране.
Import & Test - Считать данные из файлов в тестовом режиме без сохранения в БД.
Import & Work - Импортировать данные из файлов в рабочем режиме с сохранением в БД.

MANDT - Задаёт мандант, из которого будут выбираться мандант-зависимые таблицы. Для мандант-независимых таблиц должно быть пусто.

Table - Список выгружаемых/загружаемых таблиц, можно по маске.

Query - Запрос на языке Open SQL для выгрузки данных из БД. Поля MANDT и Table не учитываются.

Parts - Номера выгружаемых/загружаемых частей.

Part size - Размер части в количестве записей.

Path - Каталог для выгрузки/загрузки файлов.

BIN/TXT - формат выгрузки файлов. BIN - представление в виде байтовой последовательности без преобразования, поэтому самый быстрый. TXT - в виде текстового файла с разделителями табуляции (импорт не поддерживается).

Zip - упаковка каждого файла в Zip.

Process ID - идентификатор для связи между двумя процессами.

Waiting (seconds) - максимально время ожидания процессов.

Кнопка "Unlock Import" - разблокировка режима импорта, простая защита от случайной порчи данных БД. В появившемся диалоге нужно просто ввести слово "import".


Кнопка "Settings" - дополнительный уровень защиты, позволяет настроить список мандантов разрешённых для импорта.



5. Форматы файлов

BIN - байтовый, для экспорта/импорта.
TXT - текстовый, только для экспорта.

При экспорте файлы сохраняются в каталог Path, который по умолчанию имеет такую структуру:
'C:\TEMP\' + sy-host + '\' + T000-Logsys + '\' + sy-sysid + sy-mandt + '\'

Для каждой выгружаемой таблицы или запроса создаётся подкаталог:
<имя таблицы>.TABLE
<имя таблицы>.QUERY

В эти подкаталоги сохраняются файлы, по одному на каждую часть. Файлы именуются по маске DATA.N.EXT.
Где:
DATA - константа
N - номер части
EXT - расширение (BIN,TXT)

Файл с номером части "0" это заголовок, в нём сохраняется описание структуры таблицы в текстовом виде, поэтому расширение всегда "TXT".
Остальные файлы имеют нумерацию от "1" и далее, расширение "BIN" или "TXT" в зависимости от выбора на селекционном экране.

Особенностью файлов "*.BIN" является то, что данные сохраняются в двоичном (байтовом) виде, без какого-либо преобразования. Структура одной записи таблицы БД представляется в виде строки байт фиксированной длины. Файл представляется в виде последовательной записи таких строк. Это обеспечивает максимальную скорость выгрузки/загрузки.
Недостатком такого формата являются невозможность обработки таблиц, содержащих поля переменной длины типа "string" или "xstring". Также возникнут проблемы, если кодировки в экспортируемой и импортируемой системах не совпадают.

Файлы "*.TXT" используются только для выборочной выгрузки, чтобы иметь возможность посмотреть их и проанализировать, например в Excel. Для этого формата производится преобразование данных, что заметно замедляет процесс.

Упаковка файлов в Zip сокращает объём передаваемых данных и время чтения/записи на компьютере пользователя, что в целом заметно ускоряет весь процесс.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Последний раз редактировалось Parazit Чт, июл 11 2019, 13:06, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 06:46 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
отличная "воровайка", главное до продуктива код дотащить :D

Не совсем понял концепцию перегрузки связанных таблиц. Последовательность загрузки вручную задаётся?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 09:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
А зачем тут shared memory?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 10:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
pberezin написал:
отличная "воровайка", главное до продуктива код дотащить :D

Не совсем понял концепцию перегрузки связанных таблиц. Последовательность загрузки вручную задаётся?

В продуктив не надо! :)

Нет никакой концепции, тупо копируются данные выбранных таблиц. Чисто ручной инструмент! Если у вас по задаче выборка из связанных таблиц, значит переносите только данные этих таблиц. Я для таких целей создал отдельный мандант.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 10:56 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Kengur написал(а):
А зачем тут shared memory?

Затем, что я не нашёл другого способа, как во время выполнения одного непрерывного Select-а сохранять файлы на компьютер пользователя. А shared memory (или shared buffer) это общая область памяти для независимых процессов.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 11:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Я бы просто частями в разные файлы сохранял. Но интересно посмотреть как люди решают простые задачи сложными техническими ухищерениями :D

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 11:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Kengur написал(а):
Я бы просто частями в разные файлы сохранял. Но интересно посмотреть как люди решают простые задачи сложными техническими ухищерениями :D

Я бы с удовольствием поучился у гуру, как во время выполнения одного запроса из БД можно сохранять файлы на компьютер пользователя, не вывалившись в дамп из-за неявного commit?

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 11:43 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Ну например через секондари коннект :roll:

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 11:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Занятно. Чем то напоминает service worker в javascript :D

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 12:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Kengur написал(а):
Ну например через секондари коннект :roll:

И каким же образом через secondary connection можно выгружать файлы?

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 13:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Parazit написал:
Kengur написал(а):
Ну например через секондари коннект :roll:

И каким же образом через secondary connection можно выгружать файлы?

Селект нельзя в нем делать?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 20:50 
Модератор
Модератор

Зарегистрирован:
Пт, окт 06 2006, 15:20
Сообщения: 338
Откуда: Москва
Пол: Мужской
А можно спросить - у вас какая БД используется ?
Если Оракл, то изобретённый вами велосипед вряд ли кому будет нужен.
Скорость замеряли с какой работает ваш импорт/экспорт ?
Не понимаю, чем вам стандартные средства не подошли....


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 21:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Kengur написал(а):
Parazit написал:
И каким же образом через secondary connection можно выгружать файлы?

Селект нельзя в нем делать?

Можно, но при сохранении файла выполняется неявный commit, соединение сбрасывается, при получении следующей порции дамп.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Ср, июл 10 2019, 23:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
bdmalex написал:
А можно спросить - у вас какая БД используется ?
Если Оракл, то изобретённый вами велосипед вряд ли кому будет нужен.
Скорость замеряли с какой работает ваш импорт/экспорт ?
Не понимаю, чем вам стандартные средства не подошли....

Без разницы какая, поскольку используется Open SQL. Поэтому же нет проблем и с кластерными таблицами. Я переносил данные из S4HANA (HANA) в древнюю NW7.01 (MS SQL).

Более того, можно написать и выполнить любой запрос на Open SQL, отобразив результат в ALV Grid. То есть можно отлаживать запросы напрямую в тестовой системе, затем переносить в разработку Select-ы. В этом случае очевидно преимущество Open SQL перед Native SQL, тем более что доступ к "SQL Command Editor" (тр.ST04) не всегда есть.

Скорость выгрузки посмотрел на примере таблицы ACDOCA, 1млн. записей за ~5-7 минут. Размер несжатых данных ~5Гб, сжатых ~130Мб. Учитывая, что нет необходимости выгружать всю систему или даже таблицу, то более чем приемлемо.

Приведу примеры, где пригодилась утилита:

1. Одна компания занимается внутренним аудитом у крупного заказчика. Выборочно выгружают нужные данные и загружают в свою систему на Oracle (не SAP) для анализа.

2. Они же пишут SQL запросы и выгружают данные для анализа в Excel.

3. Один заказчик поначалу поставил нас в суровые условия, что все разработки мы должны делать у себя, а им приносить только транспортные файлы. Но на тот момент у нас ещё не было свой системы разработки S4HANA, поэтому запросы к некоторым таблицам невозможно написать, поскольку их просто нет. Для прямого доступа в их систему выдали только одну учётку, в общем условия нерабочие. Я создал в нашей системе нужные таблицы (например, ACDOCA) и перенёс часть данных за один период.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программа экспорта/импорта большого объёма данных таблиц БД
СообщениеДобавлено: Чт, июл 11 2019, 01:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Parazit написал:
Одна компания занимается внутренним аудитом у крупного заказчика. Выборочно выгружают нужные данные и загружают в свою систему на Oracle (не SAP) для анализа.

У PWS есть такой инструмент. Таблицы и условия выборки задаются в Exel-файле.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB