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