mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 17:12:03 +00:00
Experiment with ArrowStream streaming
This commit is contained in:
parent
ef7571c226
commit
4ea363006b
@ -78,7 +78,7 @@ void ArrowBlockInputFormat::prepareReader()
|
|||||||
{
|
{
|
||||||
if (stream)
|
if (stream)
|
||||||
{
|
{
|
||||||
auto stream_reader_status = arrow::ipc::RecordBatchStreamReader::Open(asArrowFile(in));
|
auto stream_reader_status = arrow::ipc::RecordBatchStreamReader::Open(asArrowInputStream(in));
|
||||||
if (!stream_reader_status.ok())
|
if (!stream_reader_status.ok())
|
||||||
throw Exception(ErrorCodes::UNKNOWN_EXCEPTION,
|
throw Exception(ErrorCodes::UNKNOWN_EXCEPTION,
|
||||||
"Error while opening a table: {}", stream_reader_status.status().ToString());
|
"Error while opening a table: {}", stream_reader_status.status().ToString());
|
||||||
|
@ -83,6 +83,47 @@ arrow::Status RandomAccessFileFromSeekableReadBuffer::Seek(int64_t position)
|
|||||||
return arrow::Status::OK();
|
return arrow::Status::OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ArrowInputStream::ArrowInputStream(ReadBuffer & in_) : in(in_)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
arrow::Result<int64_t> ArrowInputStream::Read(int64_t nbytes, void * out)
|
||||||
|
{
|
||||||
|
return in.read(reinterpret_cast<char *>(out), nbytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
arrow::Result<std::shared_ptr<arrow::Buffer>> ArrowInputStream::Read(int64_t nbytes)
|
||||||
|
{
|
||||||
|
std::string file_data;
|
||||||
|
{
|
||||||
|
WriteBufferFromString file_buffer(file_data);
|
||||||
|
copyData(in, file_buffer, nbytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
return arrow::Buffer::FromString(std::move(file_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
arrow::Status ArrowInputStream::Abort()
|
||||||
|
{
|
||||||
|
return arrow::Status();
|
||||||
|
}
|
||||||
|
|
||||||
|
arrow::Result<int64_t> ArrowInputStream::Tell() const
|
||||||
|
{
|
||||||
|
return in.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
arrow::Status ArrowInputStream::Close()
|
||||||
|
{
|
||||||
|
return arrow::Status();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ArrowInputStream::closed() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<arrow::io::RandomAccessFile> asArrowFile(ReadBuffer & in)
|
std::shared_ptr<arrow::io::RandomAccessFile> asArrowFile(ReadBuffer & in)
|
||||||
{
|
{
|
||||||
if (auto * fd_in = dynamic_cast<ReadBufferFromFileDescriptor *>(&in))
|
if (auto * fd_in = dynamic_cast<ReadBufferFromFileDescriptor *>(&in))
|
||||||
@ -104,6 +145,11 @@ std::shared_ptr<arrow::io::RandomAccessFile> asArrowFile(ReadBuffer & in)
|
|||||||
return std::make_shared<arrow::io::BufferReader>(arrow::Buffer::FromString(std::move(file_data)));
|
return std::make_shared<arrow::io::BufferReader>(arrow::Buffer::FromString(std::move(file_data)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<arrow::io::InputStream> asArrowInputStream(ReadBuffer & in)
|
||||||
|
{
|
||||||
|
return std::make_shared<ArrowInputStream>(in);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,7 +61,25 @@ private:
|
|||||||
ARROW_DISALLOW_COPY_AND_ASSIGN(RandomAccessFileFromSeekableReadBuffer);
|
ARROW_DISALLOW_COPY_AND_ASSIGN(RandomAccessFileFromSeekableReadBuffer);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ArrowInputStream : public arrow::io::InputStream
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit ArrowInputStream(ReadBuffer & in);
|
||||||
|
arrow::Result<int64_t> Read(int64_t nbytes, void* out) override;
|
||||||
|
arrow::Result<std::shared_ptr<arrow::Buffer>> Read(int64_t nbytes) override;
|
||||||
|
arrow::Status Abort() override;
|
||||||
|
arrow::Result<int64_t> Tell() const override;
|
||||||
|
arrow::Status Close() override;
|
||||||
|
bool closed() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
ReadBuffer & in;
|
||||||
|
|
||||||
|
ARROW_DISALLOW_COPY_AND_ASSIGN(ArrowInputStream);
|
||||||
|
};
|
||||||
|
|
||||||
std::shared_ptr<arrow::io::RandomAccessFile> asArrowFile(ReadBuffer & in);
|
std::shared_ptr<arrow::io::RandomAccessFile> asArrowFile(ReadBuffer & in);
|
||||||
|
std::shared_ptr<arrow::io::InputStream> asArrowInputStream(ReadBuffer & in);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user