SAP HANA: наиболее эффективный способ вставки / импорта данных в таблицы из файлов CSV
Мы хотим дать пользователю возможность загружать и вставлять / импортировать данные в таблицы. Данные от пользователей находятся в файлах CSV.
Итак, мы думали о трех возможностях:
- Прямой импорт через приложение XSJS -> (Пакет) Вставить каждую строку
- Импорт через
IMPORT FROM
заявление - SDI (Репликация)
В настоящее время мы предпочитаем прямой импорт (вставки XSJS), поскольку пользователь может открыть диалоговое окно выбора файла и выбрать файл. (Простота)
К сожалению, вставки очень медленные (20 мин / 1 млн. Строк).
Пакетная вставка сокращается примерно до 5 мин.
Параллельный вызов пакетного импорта XSJS с пакетами по 100 КБ сокращается примерно до 1 минуты.
Однако команда импорта CSV IMPORT FROM
с 4-мя потоками намного быстрее чем 1 минута (около 15 сек)
Поэтому вопрос заключается в том, как быстро импортировать данные в HANA (желательно с технологией XSJS).
Системная среда
Мы создали веб-интерфейс пользователя с XS Engine для выполнения различных задач, требующих больших объемов данных.
Новая задача - загрузить данные в SAP HANA для дальнейшей обработки.
Данные в файлах CSV от компаний-партнеров
1 ответ
Подача данных через XSJS - это подход, который требует, чтобы данные пересекали многие границы системы. Использование инструмента загрузки данных на основе JDBC/ODBC обычно является лучшим способом.
IMPORT
а также IMPORT FROM
Обе команды на стороне сервера требуют доступа к общему ресурсу файловой системы, к которому также могут обращаться узлы SAP HANA.
Они в первую очередь предназначены для "технической" загрузки данных, например, для создания системных копий и перемещения данных разработчика / администратора.
Конечный пользователь не является целевой аудиторией.
Учитывая то, что вы упомянули, что ваши конечные пользователи должны иметь возможность загружать данные, в качестве варианта здесь можно предоставить такой инструмент загрузки данных (возможно, даже написать простое).
Кроме того, использование SDI может быть приемлемым вариантом, если структура данных меняется не часто.
Мы провели небольшой тест на Java, который был быстрым (Java с многопоточностью в два раза быстрее XSJS).
Так как Заказчик хочет иметь веб-интерфейс, а Java Webstart устарел и имеет еще несколько проблем, мы используем теперь веб-решение:
var conn = $.hdb.getConnection();
conn.executeUpdate('INSERT INTO ' + schemaName + '.' + targetTableName + ' VALUES(' + placeholder + ')', argsArray);
Это важно
- использовать более новый
$.hdb
соединение не$.db
соединение (многие учебники используют$.db
подключение. - использовать пакетную вставку