From e6a76a58d35261efccd1fba8ce05177c13a49020 Mon Sep 17 00:00:00 2001 From: Ahmed Adel Date: Fri, 15 Jan 2021 05:11:56 -0800 Subject: [PATCH] feat(db-engine): Add support for Apache Solr (#12403) * [db engine] Add support for Apache Solr * Fixing typo --- docs/installation.rst | 9 +++++ .../docs/Connecting to Databases/index.mdx | 1 + .../docs/Connecting to Databases/solr.mdx | 18 ++++++++++ .../Connecting to Databases/spark-sql.mdx | 2 +- setup.py | 1 + superset/db_engine_specs/solr.py | 34 +++++++++++++++++++ 6 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 docs/src/pages/docs/Connecting to Databases/solr.mdx create mode 100644 superset/db_engine_specs/solr.py diff --git a/docs/installation.rst b/docs/installation.rst index d48b1a995d..095f6bea8c 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -533,6 +533,8 @@ Here's a list of some of the recommended packages. | Apache Pinot | ``"apache-superset[pinot]"`` | ``pinot+http://CONTROLLER:5436/`` | | | | ``query?server=http://CONTROLLER:5983/`` | +------------------+-------------------------------------------------------------------+-------------------------------------------------+ +| Apache Solr | ``pip install sqlalchemy-solr`` | ``solr://`` | ++------------------+---------------------------------------+-----------------------------------------------------------------------------+ | Apache Spark SQL | ``"apache-superset[hive]"`` | ``jdbc+hive://`` | +------------------+-------------------------------------------------------------------+-------------------------------------------------+ | BigQuery | ``"apache-superset[bigquery]"`` | ``bigquery://`` | @@ -685,6 +687,13 @@ You should then be able to connect to your BigQuery datasets. To be able to upload data, e.g. sample data, the python library `pandas_gbq` is required. +Apache Solr +------------ + +The connection string for Apache Solr looks like this :: + + solr://{username}:{password}@{host}:{port}/{server_path}/{collection}[/?use_ssl=true|false] + Elasticsearch ------------- diff --git a/docs/src/pages/docs/Connecting to Databases/index.mdx b/docs/src/pages/docs/Connecting to Databases/index.mdx index 715e99aa1a..493fc307e6 100644 --- a/docs/src/pages/docs/Connecting to Databases/index.mdx +++ b/docs/src/pages/docs/Connecting to Databases/index.mdx @@ -30,6 +30,7 @@ A list of some of the recommended packages. |[Apache Impala](/docs/databases/impala)|```pip install impala```|```impala://{hostname}:{port}/{database}```| |[Apache Kylin](/docs/databases/kylin)|```pip install kylinpy```|```kylin://:@:/?=&=```| |[Apache Pinot](/docs/databases/pinot)|```pip install pinotdb```|```pinot+http://CONTROLLER:5436/ query?server=http://CONTROLLER:5983/```| +|[Apache Solr](/docs/databases/solr)|```pip install sqlalchemy-solr```|```solr://{username}:{password}@{hostname}:{port}/{server_path}/{collection}``` |[Apache Spark SQL](/docs/databases/spark)|```pip install pyhive```|```hive://hive@{hostname}:{port}/{database}``` |[Azure MS SQL](/docs/databases/sqlserver)||```mssql+pymssql://UserName@presetSQL:TestPassword@presetSQL.database.windows.net:1433/TestSchema``` |[Big Query](/docs/databases/bigquery)|```pip install pybigquery```|```bigquery://{project_id}```| diff --git a/docs/src/pages/docs/Connecting to Databases/solr.mdx b/docs/src/pages/docs/Connecting to Databases/solr.mdx new file mode 100644 index 0000000000..b9edbc61c6 --- /dev/null +++ b/docs/src/pages/docs/Connecting to Databases/solr.mdx @@ -0,0 +1,18 @@ +--- +name: Apache Solr +menu: Connecting to Databases +route: /docs/databases/solr +index: 10 +version: 1 +--- + +## Apache Solr + +The [sqlalchemy-solr](https://pypi.org/project/sqlalchemy-solr/) library provides a +Python / SQLAlchemy interface to Apache Solr. + +The connection string for Solr looks like this: + +``` +solr://{username}:{password}@{host}:{port}/{server_path}/{collection}[/?use_ssl=true|false] +``` diff --git a/docs/src/pages/docs/Connecting to Databases/spark-sql.mdx b/docs/src/pages/docs/Connecting to Databases/spark-sql.mdx index fe35629262..92136aaca9 100644 --- a/docs/src/pages/docs/Connecting to Databases/spark-sql.mdx +++ b/docs/src/pages/docs/Connecting to Databases/spark-sql.mdx @@ -2,7 +2,7 @@ name: Apache Spark SQL menu: Connecting to Databases route: /docs/databases/spark-sql -index: 10 +index: 11 version: 1 --- diff --git a/setup.py b/setup.py index 3c0bbed5bc..998360bf3d 100644 --- a/setup.py +++ b/setup.py @@ -123,6 +123,7 @@ setup( "dremio": ["sqlalchemy-dremio>=1.1.5, <1.2"], "drill": ["sqlalchemy-drill==0.1.dev"], "druid": ["pydruid>=0.6.1,<0.7"], + "solr": ["sqlalchemy-solr >= 0.2.0"], "elasticsearch": ["elasticsearch-dbapi>=0.1.0, <0.2.0"], "exasol": ["sqlalchemy-exasol>=2.1.0, <2.2"], "excel": ["xlrd>=1.2.0, <1.3"], diff --git a/superset/db_engine_specs/solr.py b/superset/db_engine_specs/solr.py new file mode 100644 index 0000000000..c9f6264670 --- /dev/null +++ b/superset/db_engine_specs/solr.py @@ -0,0 +1,34 @@ +# 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. + +from superset.db_engine_specs.base import BaseEngineSpec + + +class SolrEngineSpec(BaseEngineSpec): # pylint: disable=abstract-method + """Engine spec for Apache Solr""" + + engine = "solr" + engine_name = "Apache Solr" + + time_groupby_inline = False + time_secondary_columns = False + allows_joins = False + allows_subqueries = False + + _time_grain_expressions = { + None: "{col}", + }