2016-06-05 2 views
0

Мне нужно написать приложение в C#, которое читает миллиард записей из файлов, а затем через IMPALA ODBC записывает записи на таблицу Impala. Я уже пытался выполнить вставку запроса, используя один оператор с параметромodbc impala bad writing performance

INSERT INTO table VALUES (?,?,.....,?) 

или с использованием нескольких вставок:

INSERT INTO table VALUES (?,?,.....,?),(?,?,.....,?),...,(?,?,.....,?) 

Но пихты очень медленно и создать один файл на HDFS для каждой записи; во-вторых, более быстрый, но запрос очень долго и миллиарды записей я получаю следующее сообщение об ошибке:

[Cloudera][SQLEngine] (31580) The length of the statement exceeds the maximum: 16384.

Кто-то имеет какое-то решение для моей проблемы, учитывая, что я должен использовать C# как язык для моего приложения.

Thanks

+0

Какой тип файлов вы чтения записей из? –

+0

Csv или текстовый файл. – marley1990

ответ

0

Я думаю, вам нужен другой подход, чтобы сделать это. То есть не читайте CSV через C#, чтобы просто отправлять значения внутри сервера. Вместо этого выпустите команды на сервер, чтобы прочитать файл для вас.

Для начала создайте таблицу для файла CSV в базе данных. Вы решаете, нужно ли это делать программно или с помощью инструмента. Затем прочитайте CSV с оператором LOAD DATA в новой таблице. Затем используйте оператор INSERT INTO SELECT ... для управления созданной таблицей.

Псевдо пример кода:

CREATE TABLE DataHeap(whatever the structure of your CSV is) 
LOAD DATA INPATH 'HDFS-PATH-TO-CSV-FILE' INTO TABLE DataHeap 
INSERT INTO YOUR-DESTINATION-TABLE SELECT whatever FROM DataHeap WHERE ... 
+0

Спасибо, он отлично работает и улучшает производительность моего приложения. – marley1990

Смежные вопросы