hujianhong created CALCITE-5867:
-----------------------------------
Summary: Add BLOB data type in SqlTypeName
Key: CALCITE-5867
URL: https://issues.apache.org/jira/browse/CALCITE-5867
Project: Calcite
Issue Type: New Feature
Components: core
Reporter: hujianhong
Assignee: hujianhong
Fix For: 1.35.0
In java.sql.JDBCType, there are binary, varbinary, and blob types for binary
objects. However, there are only two types of binary and varbinary in
SqlTypeName of Apache Calcite.
In addition, for binary and varbinary types, we usually use the following code
to read and write in JDBC:
{code:java}
//write
PreparedStatement ps = conn. preparedStatment();
ps.setBytes(1, new byte[]{xxx});
//read
ResultSet rs = xxx;
rs. next();
byte[] b1 = rs. getBytes(1); {code}
For the Blob type, we usually use the following code in JDBC for streaming read
and write:
{code:java}
//write
PreparedStatement ps = conn. preparedStatment();
ps.setBlob(1, inputstream);
//read
ResultSet rs = xxx;
rs. next();
Blob b1 = rs.getBlob(1); // or InputStream in = rs.getBinaryStream(2); {code}
Because the BLOB is large, it cannot be read in one row like binary and
varbinary objects, but needs to be read in a stream.
In our scenario, our storage layer both supports binary, varbinary, and blob
types, but because there is no native support BLOB data type in Apache Calcite,
our approach is to map the BLOB type of the storage layer to the
binary/varbinary type of Apache calcite, so as to read and write BLOB types
through calcite.
However, BLOB objects are read and written as binary/varbinay types, which will
put a lot of pressure on the memory of the server, easily cause OOM on the
server, and bring great challenges to the stability of the system. Therefore,
we expect to add BLOB type support in Apache Calcite, and use streams to
support BLOB type reading and writing with less memory, so as to avoid OOM
pressure caused by one-time reading and writing of BLOB objects to the system.
------------------
MySQL support BLOB data type: https://dev.mysql.com/doc/refman/8.0/en/blob.html
In addition, Avatica currently does not support streaming reading and writing
of BLOB types. Therefore, in order to solve this problem, in our scenario, we
support the MySQL protocol on the server side, and can directly use the MySQL
client to read and write BLOB objects in streaming mode.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)