(Gracias a Pedro hoy tenemos este post 😉 )
Apache Calcite es en esencia un meta-driver JDBC, o dicho de otra forma, un driver JDBC que se puede conectar sobre un buen número de datastores (tanto relacionales como no) ofreciendo un interfaz JDBC.
Por ejemplo para esta conexión con MySQL:
Puedo crear una conexión con el driver JDBC de Calcite:
De modo que el cliente usará este driver.
Otra funcionalidad interesante es el gran número de adapters que ofrece Calcite, que permite conectarnos con estos stores, consultarlos en SQL y tratarlos como si fueran tablas:
- Cassandra adapter (calcite-cassandra)
- CSV adapter (example/csv)
- Druid adapter (calcite-druid)
- Elasticsearch adapter (calcite-elasticsearch)
- File adapter (calcite-file)
- Geode adapter (calcite-geode)
- JDBC adapter (part of calcite-core)
- MongoDB adapter (calcite-mongodb)
- OS adapter (calcite-os)
- Pig adapter (calcite-pig)
- Solr cloud adapter (solr-sql)
- Spark adapter (calcite-spark)
- Splunk adapter (calcite-splunk)
- Eclipse Memory Analyzer (MAT) adapter (mat-calcite-plugin)
- Apache Kafka adapter
Dentro de Calcite un proyecto muy interesante es Calcite Avatica que se puede definir como un framework para construir drivers JDBC.
Avatica está compuesto por 2 piezas:
- El Server Avatica que es un servidor HTTP
- El Cliente Avatica que es un driver JDBC que permite conectar con los adapters Calcite
- Protocolo Cliente-Servidor JSON sobre RPC
Su Arquitectura es esta:
Para usar Avatica lo más fácil es decargarse su imagen Docker (https://calcite.apache.org/avatica/docs/docker.html) y lanzarlo con una conexión con una BD JDBC:
$ docker run –rm -p 8765:8765
-v /home/user/my-database-jars/:/my-database-jars –entrypoint="" -it avatica-server
/usr/bin/java -cp "/home/avatica/classpath/*:/my-database-jars/*"
org.apache.calcite.avatica.standalone.StandaloneServer -p 8765
-u "jdbc:my_jdbc_url"