есть таблица events_distributed с полями a Int32, b Int32, c_xxx String, c_yyy String, c ENGINE Distributed и четыре шарда events_sharded с ENGINE ReplicatedMergeTree на разных машинах.
При вставке в events_distributed в одну из нод видим в логах ошибки вида:
There is no column with name c. There are columns: a, b, c_xxx, e.what() = DB::Exception (from 111.222.33.444:59118) (in query: INSERT INTO events_sharded (a, b, c_xxx, c_yyy) FORMAT RowBinary), Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x28ae4d6]
1. clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1f) [0x102a3af]
2. clickhouse-server(DB::ITableDeclaration::check(DB::Block const&, bool) const+0x922) [0x29b3472]
3. clickhouse-server(DB::MergeTreeDataWriter::splitBlockIntoParts(DB::Block const&)+0x35) [0x2a3e845]
4. clickhouse-server(DB::MergeTreeBlockOutputStream::write(DB::Block const&)+0x40) [0x29c1f90]
5. clickhouse-server(DB::PushingToViewsBlockOutputStream::write(DB::Block const&)+0x486) [0x2b38906]
6. clickhouse-server(DB::copyData(DB::IBlockInputStream&, DB::IBlockOutputStream&, std::atomic<bool>*)+0x91) [0x2af5aa1]
7. clickhouse-server(DB::PushingToViewsBlockOutputStream::write(DB::Block const&)+0x41d) [0x2b3889d]
8. clickhouse-server(DB::MaterializingBlockOutputStream::write(DB::Block const&)+0x28) [0x2b27698]
9. clickhouse-server(DB::AddingDefaultBlockOutputStream::write(DB::Block const&)+0x235) [0x2c6f295]
10. clickhouse-server(DB::ProhibitColumnsBlockOutputStream::write(DB::Block const&)+0x4f) [0x2c892af]
11. clickhouse-server(DB::SquashingBlockOutputStream::finalize()+0x455) [0x2c507f5]
12. clickhouse-server(DB::SquashingBlockOutputStream::writeSuffix()+0x11) [0x2c50981]
13. clickhouse-server(DB::TCPHandler::processInsertQuery(DB::Settings const&)+0x2ce) [0x104405e]
14. clickhouse-server(DB::TCPHandler::runImpl()+0x67a) [0x10447aa]
15. clickhouse-server(DB::TCPHandler::run()+0x1c) [0x104540c]
16. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x315d0af]
17. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x10b) [0x317ac3b]
18. clickhouse-server(Poco::PooledThread::run()+0x87) [0x337b807]
19. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x96) [0x333d456]
При этом на сам POST запрос ClickHouse возвращает 200 OK.
Проверили схемы на всех машинах — все поля присутствуют и в локальных _sharded, и в _distributed таблицах.
ClickHouse server version 1.1.54245.
Вопросы:
1. Почему в списке There are columns: a, b, c_xxx указаны не все столбцы events_sharded?
2. Почему кликхаус репортит попытку вставить столбец c, если прям там же, в приведённом запросе на вставку в шард, никакой попытки вставить это поле нету? (INSERT INTO events_sharded (a, b, c_xxx, c_yyy) FORMAT RowBinary).
Возможно, он при выводе названия поля съедает всё что после _?
3. Вставка в distributed таблицу это неблокирующая операция? Т.е. даже если клиенту вернулось 200 ОК, то ещё нет гарантии, что данные запишутся во все шарды?
4. Что делать?) Пересоздать все distributed и локальные таблицы?
Спасибо за внимание)
Вы делали ALTER'ы? Distributed-таблицы и удаленные таблицы никак не синхронизируются при Альтерах. 3. Возвращается Ок если данные записались в локальное хранилище Distributed-таблицы. Затем эти данные в фоне вставляются в шарды. Поэтому если вставка в шарды не пройдет, то вы заметите это только по логам. Если вставка в шард завершилась неудачей, то она будет повторена через таймаут. 2. Он репортит, что во время вставки данных из локального хранилища в удаленную таблицу, она ожидает колонку c, а ее нет в вставляемом блоке. Проверьте что к тому моменту времени таблица на 111.222.33.444 имела нужную структуру. 1. Возможно ли так что, вы когда-то вставляли только (a, b, c_xxx)? 4. Зависит от того какая стуктура Distributed таблиц у вас была до этого.
Обсуждают сегодня