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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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