Невозможно выполнить массовую загрузку троек в виртуозный граф с помощью функций массовой загрузки

Я пытаюсь загрузить триплеты в Virtuoso с помощью функций массовой загрузки, упомянутых здесь: https://github.com/dbpedia/dbpedia-docs/wiki/Loading-Data-Virtuoso. Иногда массовая загрузка работает, иногда нет.

Итак, вот что я сделал (я работаю на машине с CentOS):

Скачал/установил Virtuoso (последняя версия)

Запустил Virtuoso на порту 8890, указав файл virtuoso.ini по умолчанию:

virtuoso -f virtuoso.ini

Запустил интерпретатор iSQL, который идет в комплекте:

./isql 1111

Загружены функции массовой загрузки (например, их можно найти здесь: https://github.com/mysema/rdfbean/blob/master/rdfbean-virtuoso/doc/rdfloader.sql):

LOAD rdfloader.sql

Залил первый тройной файл (~500 Мб):

ld_dir('/path/to/dir1','*.gz','http://graph.1.com');
rdf_loader_run();

(давайте назовем эту транзакцию 1, она работала хорошо)

Пытался загрузить другой файл на другой график

ld_dir('/path/to/dir2','*.gz','http://graph.2.com');
rdf_loader_run();

(назовем эту транзакцию 2)

Это не сработало, и хотя файл журнала Virtuoso не указывал на источник ошибки, в таблице SQL, в которую записываются события транзакций (DB.DBA.LOAD_LIST), указывалось, что что-то не так со строкой 16061:

37000 SP029: TURTLE RDF loader, line 16061: syntax error processed pending to here.

Я соответственно поправил файл, набрал в интерпретаторе iSQL почти ту же команду, что и транзакция 2:

ld_dir('/path/to/dir2','*.gz','http://graph.3.com');
rdf_loader_run();

(назовем эту транзакцию 3)

А сейчас ничего не происходит. DB.DBA.LOAD_LIST даже не содержит этой новой транзакции. Он содержит только транзакции 1 и 2.

Кто-нибудь знает, что происходит под капотом и почему здесь ничего не происходит?


person user1190900    schedule 04.12.2015    source источник
comment
Последняя версия может означать многое. Пожалуйста, обновите свой вопрос, указав вывод virtuoso-t -? (при необходимости изменив двоичное имя в соответствии с вашим развертыванием).   -  person TallTed    schedule 22.12.2015


Ответы (1)


Просто для дальнейшего использования

Если во время операции массовой загрузки возникает ошибка, перед продолжением необходимо очистить таблицу DB.DBA.LOAD_LIST.

private static final String clearBulkLoadTbl = "DELETE FROM DB.DBA.load_list";

private void clearBulkLoadHistory() throws SQLException {
    PreparedStatement clearBulkLoadTblStmt;
    clearBulkLoadTblStmt = virt_conn.prepareStatement(clearBulkLoadTbl);                        
    clearBulkLoadTblStmt.executeUpdate();
}

Надеюсь, это поможет кому-то.

person ViNi89    schedule 12.01.2016