Код: Выделить всё
File path: part-00000-ab37e746-619d-46f6-be96-28ae4d767576-c000.snappy.parquet
Created by: parquet-mr version 1.13.1 (build db4183109d5b734ec5930d870cdae161e408ddba)
Properties:
org.apache.spark.version: 3.5.0
org.apache.spark.sql.parquet.row.metadata: {"type":"struct","fields":[{"name":"qual","type":"double","nullable":true,"metadata":{}} ... ]}
Schema:
message spark_schema {
optional double qual;
...
}
Код: Выделить всё
clickhouse_driver.errors.ServerException: Code: 349.
DB::Exception: Cannot convert NULL value to non-Nullable type: while converting column `qual` from type Nullable(Float64) to type Float64: While executing ParquetBlockInputFormat: While executing File. Stack trace:
0. DB::Exception::Exception(std::__1::basic_string const&, int, bool) @ 0xa82d07a in /usr/bin/clickhouse
1. DB::FunctionCast::prepareRemoveNullable(std::__1::shared_ptr const&, std::__1::shared_ptr const&, bool) const::'lambda0'(std::__1::vector&, std::__1::shared_ptr const&, DB::ColumnNullable const*, unsigned long)::operator()(std::__1::vector&, std::__1::shared_ptr const&, DB::ColumnNullable const*, unsigned long) const @ 0xd24fc00 in /usr/bin/clickhouse
2. COW::immutable_ptr std::__1::__function::__policy_invoker::__call_impl(std::__1::__function::__policy_storage const*, std::__1::vector&, std::__1::shared_ptr const&, DB::ColumnNullable const*, unsigned long) @ 0xd24f96c in /usr/bin/clickhouse
3. DB::ExecutableFunctionCast::executeImpl(std::__1::vector const&, std::__1::shared_ptr const&, unsigned long) const @ 0xd11ccb4 in /usr/bin/clickhouse
4. DB::IExecutableFunction::executeWithoutLowCardinalityColumns(std::__1::vector const&, std::__1::shared_ptr const&, unsigned long, bool) const @ 0x12e2a17e in /usr/bin/clickhouse
5. DB::IExecutableFunction::executeWithoutSparseColumns(std::__1::vector const&, std::__1::shared_ptr const&, unsigned long, bool) const @ 0x12e2a8ad in /usr/bin/clickhouse
6. DB::IExecutableFunction::execute(std::__1::vector const&, std::__1::shared_ptr const&, unsigned long, bool) const @ 0x12e2b8af in /usr/bin/clickhouse
7. DB::IFunctionBase::execute(std::__1::vector const&, std::__1::shared_ptr const&, unsigned long, bool) const @ 0xcd27f0d in /usr/bin/clickhouse
8. DB::castColumn(DB::ColumnWithTypeAndName const&, std::__1::shared_ptr const&) @ 0x13cf5304 in /usr/bin/clickhouse
9. DB::ArrowColumnToCHColumn::arrowColumnsToCHChunk(DB::Chunk&, std::__1::unordered_map&) @ 0x1488312d in /usr/bin/clickhouse
10. DB::ArrowColumnToCHColumn::arrowTableToCHChunk(DB::Chunk&, std::__1::shared_ptr&) @ 0x148823c0 in /usr/bin/clickhouse
11. DB::ParquetBlockInputFormat::generate() @ 0x1492f347 in /usr/bin/clickhouse
12. DB::ISource::tryGenerate() @ 0x148414b5 in /usr/bin/clickhouse
13. DB::ISource::work() @ 0x1484107a in /usr/bin/clickhouse
14. DB::ExecutionThreadContext::executeTask() @ 0x14860b23 in /usr/bin/clickhouse
15. DB::PipelineExecutor::executeStepImpl(unsigned long, std::__1::atomic*) @ 0x1485539e in /usr/bin/clickhouse
16. DB::PipelineExecutor::executeStep(std::__1::atomic*) @ 0x14854aa0 in /usr/bin/clickhouse
17. DB::PullingPipelineExecutor::pull(DB::Chunk&) @ 0x148652ec in /usr/bin/clickhouse
18. DB::StorageFileSource::generate() @ 0x13ee9d7a in /usr/bin/clickhouse
19. DB::ISource::tryGenerate() @ 0x148414b5 in /usr/bin/clickhouse
20. DB::ISource::work() @ 0x1484107a in /usr/bin/clickhouse
21. DB::SourceWithProgress::work() @ 0x14a8c662 in /usr/bin/clickhouse
22. DB::ExecutionThreadContext::executeTask() @ 0x14860b23 in /usr/bin/clickhouse
23. DB::PipelineExecutor::executeStepImpl(unsigned long, std::__1::atomic*) @ 0x1485539e in /usr/bin/clickhouse
24. DB::PipelineExecutor::executeImpl(unsigned long) @ 0x148541e9 in /usr/bin/clickhouse
25. DB::PipelineExecutor::execute(unsigned long) @ 0x14853ef8 in /usr/bin/clickhouse
26. ? @ 0x14864647 in /usr/bin/clickhouse
27. ThreadPoolImpl::worker(std::__1::__list_iterator) @ 0xa86f4b7 in /usr/bin/clickhouse
28. ? @ 0xa872ebd in /usr/bin/clickhouse
29. ? @ 0x400086d609 in ?
30. clone @ 0x40009a9293 in ?
Код: Выделить всё
import clickhouse_driver
clickhouse = clickhouse_driver.Client('localhost')
parquet_file = 'part-00000-ab37e746-619d-46f6-be96-28ae4d767576-c000.snappy.parquet'
res = clickhouse.execute(f"SELECT * FROM file('{parquet_file}', Parquet) LIMIT 3;")
print(res)
РЕДАКТИРОВАТЬ:
Я попробовал локальный кликхаус
p>
Код: Выделить всё
./clickhouse local -q "DESCRIBE file('part-00000-ab37e746-619d-46f6-be96-28ae4d767576-c000.snappy.parquet', Parquet);"
Код: Выделить всё
qual Nullable(Float64)
И выполнение запроса с помощью локального Clickhouse также сработало:
Код: Выделить всё
./clickhouse local -q "SELECT qual FROM file('part-00000-ab37e746-619d-46f6-be96-28ae4d767576-c000.snappy.parquet', Parquet) LIMIT 3;"
Код: Выделить всё
34.85
Похоже, эта проблема возникает при использовании образа докера yandex/clickhouse:latest.
Однако: при использовании локальной установки сервера clickouse не воспроизвел проблему.
Подробнее здесь: https://stackoverflow.com/questions/785 ... lable-type