Импорт большого TSV файла

637 views
Skip to first unread message

Евгений Иванов

unread,
Aug 17, 2017, 3:21:59 PM8/17/17
to ClickHouse
Как правильно загрузить большой файл, превышающий лимиты по памяти на запрос?

Выполняю:
cat /data/transactions | clickhouse-client --query="INSERT INTO stat.xxx FORMAT TabSeparated"

Где размер файла - 4GB, max_memory_usage - 1GB.

Получаю: 
Code: 210. DB::NetException: Connection reset by peer while writing to socket

В логе:
2017.08.17 22:03:52.749853 [ 23 ] <Trace> TCPConnectionFactory: TCP Request. Address: 127.0.0.1:58236
2017.08.17 22:03:52.750179 [ 23 ] <Debug> TCPHandler: Connected ClickHouse client version 1.1.54245, user: default.
2017.08.17 22:03:52.754630 [ 23 ] <Debug> executeQuery: (from 127.0.0.1:58236) INSERT INTO stat.xxx FORMAT TabSeparated
2017.08.17 22:03:56.789852 [ 23 ] <Error> executeQuery: Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 1.04 GiB (attempt to allocate chunk of 134217728 bytes), maximum: 953.67 MiB, e.what() = DB::Exception (from 127.0.0.1:58236) (in query: INSERT INTO stat.xxx FORMAT TabSeparated), Stack trace:


0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x29b2626]
1. clickhouse-server(MemoryTracker::alloc(long)+0xbc0) [0x29b4a40]
2. clickhouse-server(Allocator<false>::alloc(unsigned long, unsigned long)+0x2a) [0x29be3aa]
3. clickhouse-server() [0x236ed6a]
4. clickhouse-server(DB::DataTypeString::deserializeBinaryBulk(DB::IColumn&, DB::ReadBuffer&, unsigned long, double) const+0x1fb) [0x237336b]
5. clickhouse-server(DB::NativeBlockInputStream::readData(DB::IDataType const&, DB::IColumn&, DB::ReadBuffer&, unsigned long)+0x134) [0x235d434]
6. clickhouse-server(DB::NativeBlockInputStream::readImpl()+0x7d5) [0x235de95]
7. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2353bd1]
8. clickhouse-server(DB::TCPHandler::receiveData()+0x7e) [0x10c8dbe]
9. clickhouse-server(DB::TCPHandler::receivePacket()+0x1e1) [0x10c9501]
10. clickhouse-server(DB::TCPHandler::readData(DB::Settings const&)+0x1a9) [0x10c9889]
11. clickhouse-server(DB::TCPHandler::processInsertQuery(DB::Settings const&)+0x274) [0x10c9bb4]
12. clickhouse-server(DB::TCPHandler::runImpl()+0x6b9) [0x10ca3f9]
13. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x10caf6b]
14. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x32b47af]
15. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x13b) [0x32babeb]
16. clickhouse-server(Poco::PooledThread::run()+0xb7) [0x3525be7]
17. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0xa5) [0x34f1c25]
18. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7fb4226eb6ba]
19. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7fb421d0c3dd]


2017.08.17 22:03:56.842611 [ 23 ] <Debug> MemoryTracker: Peak memory usage (for query): 936.00 MiB.
2017.08.17 22:03:56.852364 [ 23 ] <Debug> MemoryTracker: Peak memory usage (for user): 936.00 MiB.
2017.08.17 22:03:56.852541 [ 23 ] <Debug> MemoryTracker: Peak memory usage (total): 936.00 MiB.
2017.08.17 22:03:56.852694 [ 23 ] <Information> TCPHandler: Processed in 4.098 sec.
2017.08.17 22:03:56.877163 [ 23 ] <Error> ServerErrorHandler: Code: 99, e.displayText() = DB::Exception: Unknown packet from client, e.what() = DB::Exception, Stack trace:


0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x29b2626]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x10b079f]
2. clickhouse-server(DB::TCPHandler::receivePacket()+0x21f) [0x10c953f]
3. clickhouse-server(DB::TCPHandler::runImpl()+0x575) [0x10ca2b5]
4. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x10caf6b]
5. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x32b47af]
6. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x13b) [0x32babeb]
7. clickhouse-server(Poco::PooledThread::run()+0xb7) [0x3525be7]
8. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0xa5) [0x34f1c25]
9. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7fb4226eb6ba]
10. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7fb421d0c3dd]

Александр Ат

unread,
Aug 22, 2017, 6:51:45 AM8/22/17
to ClickHouse
я не уверен если в кх чтение файла порциями и instert поэтапно, но 
когда происходит большой insert, каждая колонка проходит валидацию, если произошла ошибка в запросе, то запрос полностью откатывается. (самая приятная штука)

у себя на проекте когда перекидывал дамп с mysql (50 миллионов записей) -> csv ( любой строковой формат )  в кх делал это через скрипт по 10к записей через php

читал 10к записей сохранял в файл, когда сделал все дампы,  у меня след этап был чтение этих дампов и отправка их в кх.
формировал  большой запрос insert table_name values (...), (...)  из файла и отправлял.
Reply all
Reply to author
Forward
0 new messages