blob: f58ee1cb88d99ec7b47e99515317a628952314e8 [file] [log] [blame] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
# Thrift-based Apache connectors
This library contains code for ADBC drivers built on top of the Thrift protocol with Arrow support:
- Hive
- Impala
- Spark
Each driver is at a different state of implementation.
## Custom generation
Typically, [Thrift](https://thrift.apache.org/) code is generated from the Thrift compiler. And that is mostly true here as well. However, some files were further edited to include Arrow support. These contain the phrase `BUT THIS FILE HAS BEEN HAND EDITED TO SUPPORT ARROW SO REGENERATE AT YOUR OWN RISK` at the top. Some of these files include:
```
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBinaryColumn.cs
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TBoolColumn.cs
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TByteColumn.cs
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TDoubleColumn.cs
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI16Column.cs
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI32Column.cs
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TI64Column.cs
arrow-adbc/csharp/src/Drivers/Apache/Thrift/Service/Rpc/Thrift/TStringColumn.cs
```
# Hive
The Hive classes serve as the base class for Spark and Impala, since both of those platform implement Hive capabilities.
Core functionality of the Hive classes beyond the base library implementation is under development, has limited functionality, and may produce errors.
# Impala
The Imapala classes are under development, have limited functionality, and may produce errors.
# Spark
The Spark classes are intended for use against native Spark.
For more details, see [Spark Driver](Spark/README.md)
## Known Limitations
1. The API `SparkConnection.GetObjects` is not fully tested at this time
1. It may not return all catalogs and schema in the server.
1. It may throw an exception when returning object metadata from multiple catalog and schema.
1. When a `NULL` value is returned for a `BINARY` type it is instead being returned as an empty array instead of the expected `null`.
1. Result set metadata does not provide information about the nullability of each column. They are marked as `nullable` by default, which may not be accurate.
1. The **Impala** driver is untested and is currently unsupported.
1. The underlying Thrift interface only supports little-endian platforms.