```
clickhouse-local -mn --query='SELECT * FROM table' --stacktrace --input-format=ArrowStream < test.arrow
```

```
Code: 43. DB::Exception: Nested type LowCardinality(String) cannot be inside Nullable type: While executing ArrowBlockInputFormat: While executing File. (ILLEGAL_TYPE_OF_ARGUMENT), Stack trace (when copying this message, always include the lines below):

0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0xba2879a in /usr/bin/clickhouse
1. DB::DataTypeNullable::DataTypeNullable(std::__1::shared_ptr<DB::IDataType const> const&) @ 0x160bb75f in /usr/bin/clickhouse
2. std::__1::shared_ptr<DB::DataTypeNullable> std::__1::allocate_shared<DB::DataTypeNullable, std::__1::allocator<DB::DataTypeNullable>, std::__1::shared_ptr<DB::IDataType const>, void>(std::__1::allocator<DB::DataTypeNullable> const&, std::__1::shared_ptr<DB::IDataType const>&&) @ 0x160f56e8 in /usr/bin/clickhouse
3. DB::readColumnFromArrowColumn(std::__1::shared_ptr<arrow::ChunkedArray>&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<DB::ColumnWithTypeAndName>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::shared_ptr<DB::ColumnWithTypeAndName> > > >&, bool, bool, bool, bool&) @ 0x17b9ccbc in /usr/bin/clickhouse
4. DB::ArrowColumnToCHColumn::arrowColumnsToCHChunk(DB::Chunk&, std::__1::unordered_map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::shared_ptr<arrow::ChunkedArray>, std::__1::hash<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::equal_to<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, std::__1::shared_ptr<arrow::ChunkedArray> > > >&) @ 0x17ba15a3 in /usr/bin/clickhouse
5. DB::ArrowColumnToCHColumn::arrowTableToCHChunk(DB::Chunk&, std::__1::shared_ptr<arrow::Table>&) @ 0x17ba0ffc in /usr/bin/clickhouse
6. DB::ArrowBlockInputFormat::generate() @ 0x17b8e270 in /usr/bin/clickhouse
7. DB::ISource::tryGenerate() @ 0x17b60b95 in /usr/bin/clickhouse
8. DB::ISource::work() @ 0x17b606e6 in /usr/bin/clickhouse
9. DB::ExecutionThreadContext::executeTask() @ 0x17b7cf0a in /usr/bin/clickhouse
10. DB::PipelineExecutor::executeStepImpl(unsigned long, std::__1::atomic<bool>*) @ 0x17b71df0 in /usr/bin/clickhouse
11. DB::PipelineExecutor::executeStep(std::__1::atomic<bool>*) @ 0x17b715c0 in /usr/bin/clickhouse
12. DB::PullingPipelineExecutor::pull(DB::Chunk&) @ 0x17b81b43 in /usr/bin/clickhouse
13. DB::StorageFileSource::generate() @ 0x171394d7 in /usr/bin/clickhouse
14. DB::ISource::tryGenerate() @ 0x17b60b95 in /usr/bin/clickhouse
15. DB::ISource::work() @ 0x17b606e6 in /usr/bin/clickhouse
16. DB::ExecutionThreadContext::executeTask() @ 0x17b7cf0a in /usr/bin/clickhouse
17. DB::PipelineExecutor::executeStepImpl(unsigned long, std::__1::atomic<bool>*) @ 0x17b71df0 in /usr/bin/clickhouse
18. DB::PipelineExecutor::executeImpl(unsigned long) @ 0x17b70e64 in /usr/bin/clickhouse
19. DB::PipelineExecutor::execute(unsigned long) @ 0x17b70bfd in /usr/bin/clickhouse
20. void std::__1::__function::__policy_invoker<void ()>::__call_impl<std::__1::__function::__default_alloc_func<ThreadFromGlobalPool::ThreadFromGlobalPool<DB::PullingAsyncPipelineExecutor::pull(DB::Chunk&, unsigned long)::$_0>(DB::PullingAsyncPipelineExecutor::pull(DB::Chunk&, unsigned long)::$_0&&)::'lambda'(), void ()> >(std::__1::__function::__policy_storage const*) @ 0x17b80e13 in /usr/bin/clickhouse
21. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xbaf5268 in /usr/bin/clickhouse
22. void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void ThreadPoolImpl<std::__1::thread>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()> >(void*) @ 0xbaf85fd in /usr/bin/clickhouse
23. ? @ 0x7fdefda5d609 in ?
24. clone @ 0x7fdefd982133 in ?
```

[test.zip](https://github.com/ClickHouse/ClickHouse/files/9196695/test.zip)
{
            auto arrow_nested_column = getNestedArrowColumn(arrow_column);
            auto nested_column = readColumnFromArrowColumn(arrow_nested_column, column_name, format_name, false, dictionary_values, read_ints_as_dates, allow_null_type, skip_columns_with_unsupported_types, skipped);
            if (skipped)
                return {};
            auto offsets_column = readOffsetsFromArrowListColumn(arrow_column);
            const auto * tuple_column = assert_cast<const ColumnTuple *>(nested_column.column.get());
            const auto * tuple_type = assert_cast<const DataTypeTuple *>(nested_column.type.get());
            auto map_column = ColumnMap::create(tuple_column->getColumnPtr(0), tuple_column->getColumnPtr(1), offsets_column);
            auto map_type = std::make_shared<DataTypeMap>(tuple_type->getElements()[0], tuple_type->getElements()[1]);
            return {std::move(map_column), std::move(map_type), column_name};
        }
        case arrow::Type::LIST:
        {
            auto arrow_nested_column = getNestedArrowColumn(arrow_column);
            auto nested_column = readColumnFromArrowColumn(arrow_nested_column, column_name, format_name, false, dictionary_values, read_ints_as_dates, allow_null_type, skip_columns_with_unsupported_types, skipped);
            if (skipped)
                return {};
            auto offsets_column = readOffsetsFromArrowListColumn(arrow_column);
            auto array_column = ColumnArray::create(nested_column.column, offsets_column);
            auto array_type = std::make_shared<DataTypeArray>(nested_column.type);
            return {std::move(array_column), std::move(array_type), column_name};
        }
        case arrow::Type::STRUCT:
        {
            auto arrow_type = arrow_column->type();
            auto * arrow_struct_type = assert_cast<arrow::StructType *>(arrow_type.get());
            std::vector<arrow::ArrayVector> nested_arrow_columns(arrow_struct_type->num_fields());
            for (size_t chunk_i = 0, num_chunks = static_cast<size_t>(arrow_column->num_chunks()); chunk_i < num_chunks; ++chunk_i)
            {