连接到数据库
Superset 不附带数据库连接功能。将 Superset 连接到数据库的主要步骤是在您的环境中 **安装正确的数据库驱动程序**。
您需要安装要使用为元数据数据库的数据库所需的软件包,以及连接到要通过 Superset 访问的数据库所需的软件包。有关设置 Superset 元数据数据库的信息,请参阅安装文档(Docker Compose,Kubernetes)
本文档尝试将指针指向常用数据库引擎的不同驱动程序。
安装数据库驱动程序
Superset 要求为要连接的每个数据库引擎安装 Python DB-API 数据库驱动程序 和 SQLAlchemy 方言。
您可以在此处阅读有关如何将新的数据库驱动程序安装到 Superset 配置中的更多信息:此处。
支持的数据库和依赖项
下面列出了一些推荐的软件包。请参阅 pyproject.toml 以了解与 Superset 兼容的版本。
数据库 | PyPI 软件包 | 连接字符串 |
---|---|---|
AWS Athena | pip install pyathena[pandas] , pip install PyAthenaJDBC | awsathena+rest://{access_key_id}:{access_key}@athena.{region}.amazonaws.com/{schema}?s3_staging_dir={s3_staging_dir}&... |
AWS DynamoDB | pip install pydynamodb | dynamodb://{access_key_id}:{secret_access_key}@dynamodb.{region_name}.amazonaws.com?connector=superset |
AWS Redshift | pip install sqlalchemy-redshift | redshift+psycopg2://<userName>:<DBPassword>@<AWS 端点>:5439/<数据库名称> |
Apache Doris | pip install pydoris | doris://<用户>:<密码>@<主机>:<端口>/<目录>.<数据库> |
Apache Drill | pip install sqlalchemy-drill | drill+sadrill:// 用于 JDBC drill+jdbc:// |
Apache Druid | pip install pydruid | druid://<用户>:<密码>@<主机>:<端口-默认-9088>/druid/v2/sql |
Apache Hive | pip install pyhive | hive://hive@{hostname}:{port}/{database} |
Apache Impala | pip install impyla | impala://{hostname}:{port}/{database} |
Apache Kylin | pip install kylinpy | kylin://<用户名>:<密码>@<主机名>:<端口>/<项目>?<参数1>=<值1>&<参数2>=<值2> |
Apache Pinot | pip install pinotdb | pinot://BROKER:5436/query?server=http://CONTROLLER:5983/ |
Apache Solr | pip install sqlalchemy-solr | solr://{username}:{password}@{hostname}:{port}/{server_path}/{collection} |
Apache Spark SQL | pip install pyhive | hive://hive@{hostname}:{port}/{database} |
Ascend.io | pip install impyla | ascend://{username}:{password}@{hostname}:{port}/{database}?auth_mechanism=PLAIN;use_ssl=true |
Azure MS SQL | pip install pymssql | mssql+pymssql://UserName@presetSQL:[email protected]:1433/TestSchema |
ClickHouse | pip install clickhouse-connect | clickhousedb://{username}:{password}@{hostname}:{port}/{database} |
CockroachDB | pip install cockroachdb | cockroachdb://root@{hostname}:{port}/{database}?sslmode=disable |
Couchbase | pip install couchbase-sqlalchemy | couchbase://{username}:{password}@{hostname}:{port}?truststorepath={ssl 证书路径} |
Denodo | pip install denodo-sqlalchemy | denodo://{username}:{password}@{hostname}:{port}/{database} |
Dremio | pip install sqlalchemy_dremio | dremio+flight://{username}:{password}@{host}:32010 ,通常有用:?UseEncryption=true/false 。对于旧版 ODBC:dremio+pyodbc://{username}:{password}@{host}:31010 |
Elasticsearch | pip install elasticsearch-dbapi | elasticsearch+http://{user}:{password}@{host}:9200/ |
Exasol | pip install sqlalchemy-exasol | exa+pyodbc://{username}:{password}@{hostname}:{port}/my_schema?CONNECTIONLCALL=en_US.UTF-8&driver=EXAODBC |
Google BigQuery | pip install sqlalchemy-bigquery | bigquery://{project_id} |
Google Sheets | pip install shillelagh[gsheetsapi] | gsheets:// |
Firebolt | pip install firebolt-sqlalchemy | firebolt://{client_id}:{client_secret}@{database}/{engine_name}?account_name={name} |
Hologres | pip install psycopg2 | postgresql+psycopg2://<UserName>:<DBPassword>@<数据库主机>/<数据库名称> |
IBM Db2 | pip install ibm_db_sa | db2+ibm_db:// |
IBM Netezza Performance Server | pip install nzalchemy | netezza+nzpy://<UserName>:<DBPassword>@<数据库主机>/<数据库名称> |
MySQL | pip install mysqlclient | mysql://<UserName>:<DBPassword>@<数据库主机>/<数据库名称> |
OceanBase | pip install oceanbase_py | oceanbase://<UserName>:<DBPassword>@<数据库主机>/<数据库名称> |
Oracle | pip install cx_Oracle | oracle:// |
PostgreSQL | pip install psycopg2 | postgresql://<UserName>:<DBPassword>@<数据库主机>/<数据库名称> |
Presto | pip install pyhive | presto:// |
Rockset | pip install rockset-sqlalchemy | rockset://<api_key>:@<api_服务器> |
SAP Hana | pip install hdbcli sqlalchemy-hana 或 pip install apache-superset[hana] | hana://{username}:{password}@{host}:{port} |
StarRocks | pip install starrocks | starrocks://<用户>:<密码>@<主机>:<端口>/<目录>.<数据库> |
Snowflake | pip install snowflake-sqlalchemy | snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse} |
SQLite | 无需其他库 | sqlite://path/to/file.db?check_same_thread=false |
SQL Server | pip install pymssql | mssql+pymssql:// |
Teradata | pip install teradatasqlalchemy | teradatasql://{user}:{password}@{host} |
TimescaleDB | pip install psycopg2 | postgresql://<UserName>:<DBPassword>@<数据库主机>:<端口>/<数据库名称> |
Trino | pip install trino | trino://{username}:{password}@{hostname}:{port}/{catalog} |
Vertica | pip install sqlalchemy-vertica-python | vertica+vertica_python://<UserName>:<DBPassword>@<数据库主机>/<数据库名称> |
YugabyteDB | pip install psycopg2 | postgresql://<UserName>:<DBPassword>@<数据库主机>/<数据库名称> |
请注意,支持许多其他数据库,主要标准是存在功能齐全的 SQLAlchemy 方言和 Python 驱动程序。搜索关键字“sqlalchemy + (数据库名称)”应该可以帮助您找到正确的位置。
如果您的数据库或数据引擎不在列表中,但存在 SQL 接口,请在 Superset GitHub 存储库 上提交问题,以便我们能够进行文档记录和支持。
如果您想构建一个数据库连接器以进行 Superset 集成,请阅读 以下教程。
在 Docker 映像中安装驱动程序
Superset 要求为要连接的每个附加类型的数据库安装 Python 数据库驱动程序。
在此示例中,我们将逐步介绍如何安装 MySQL 连接器库。连接器库的安装过程对于所有附加库都是相同的。
1. 确定所需的驱动程序
查阅 数据库驱动程序列表 并找到连接到数据库所需的 PyPI 软件包。在此示例中,我们连接到 MySQL 数据库,因此我们需要 mysqlclient
连接器库。
2. 在容器中安装驱动程序
我们需要将 mysqlclient
库安装到 Superset docker 容器中(它是否安装在主机上并不重要)。我们可以使用 docker exec -it <container_name> bash
进入正在运行的容器并在此处运行 pip install mysqlclient
,但这不会永久保存。
为了解决这个问题,Superset docker compose
部署使用 requirements-local.txt
文件的约定。此文件中列出的所有软件包将在运行时从 PyPI 安装到容器中。此文件将被 Git 忽略,以用于本地开发。
在包含 docker-compose.yml
或 docker-compose-non-dev.yml
文件的目录中名为 docker
的子目录中创建文件 requirements-local.txt
。
# Run from the repo root:
touch ./docker/requirements-local.txt
添加上面步骤中确定的驱动程序。您可以使用文本编辑器或从命令行执行此操作,例如
echo "mysqlclient" >> ./docker/requirements-local.txt
如果您运行的是库存(未自定义)Superset 映像,则您已经完成。使用 docker compose -f docker-compose-non-dev.yml up
启动 Superset,驱动程序应该存在。
您可以通过使用 docker exec -it <container_name> bash
进入正在运行的容器并运行 pip freeze
来检查它的存在。PyPI 软件包应该存在于打印的列表中。
如果您运行的是自定义 docker 映像,请使用新驱动程序重新构建本地映像
docker compose build --force-rm
Docker 映像重建完成后,通过运行 docker compose up
重新启动 Superset。
3. 连接到 MySQL
现在您已将 MySQL 驱动程序安装到容器中,您应该能够通过 Superset Web UI 连接到您的数据库。
作为管理员用户,转到设置 -> 数据:数据库连接,然后单击 +DATABASE 按钮。从那里,按照 使用数据库连接 UI 页面 上的步骤操作。
查阅 Superset 文档中您特定数据库类型的页面,以确定连接字符串以及您需要输入的任何其他参数。例如,在 MySQL 页面 上,我们看到连接到本地 MySQL 数据库的连接字符串取决于设置是在 Linux 上运行还是在 Mac 上运行。
单击“测试连接”按钮,这应该会弹出一个消息,提示“连接正常!”。
4. 故障排除
如果测试失败,请检查您的 docker 日志以查找错误消息。Superset 使用 SQLAlchemy 连接到数据库;要对数据库的连接字符串进行故障排除,您可以启动 Superset 应用程序容器或主机环境中的 Python,并尝试直接连接到所需的数据库并获取数据。这样可以排除 Superset,以便隔离问题。
对您希望 Superset 连接到的每种类型的数据库重复此过程。
特定于数据库的说明
Ascend.io
连接到 Ascend.io 的推荐连接器库是 impyla。
预期的连接字符串格式如下
ascend://{username}:{password}@{hostname}:{port}/{database}?auth_mechanism=PLAIN;use_ssl=true
Apache Doris
sqlalchemy-doris 库是通过 SQLAlchemy 连接到 Apache Doris 的推荐方法。
您需要以下设置值来形成连接字符串
- 用户:用户名
- 密码:密码
- 主机:Doris FE 主机
- 端口:Doris FE 端口
- 目录:目录名称
- 数据库:数据库名称
以下是连接字符串的样子
doris://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>
AWS Athena
PyAthenaJDBC
PyAthenaJDBC 是 Amazon Athena JDBC 驱动程序 的 Python DB 2.0 兼容包装器。
Amazon Athena 的连接字符串如下
awsathena+jdbc://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
请注意,您需要像这样转义和编码以形成连接字符串
s3://... -> s3%3A//...
PyAthena
您还可以使用 PyAthena 库(不需要 Java)以及以下连接字符串
awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com/{schema_name}?s3_staging_dir={s3_staging_dir}&...
PyAthena 库还允许您假定特定的 IAM 角色,您可以在 Superset 的 Athena 数据库连接 UI 中的 ADVANCED --> 其他 --> 引擎参数下添加以下参数来定义此角色。
{
"connect_args": {
"role_arn": "<role arn>"
}
}
AWS DynamoDB
PyDynamoDB
PyDynamoDB 是 Amazon DynamoDB 的 Python DB API 2.0 (PEP 249) 客户端。
Amazon DynamoDB 的连接字符串如下
dynamodb://{aws_access_key_id}:{aws_secret_access_key}@dynamodb.{region_name}.amazonaws.com:443?connector=superset
要获取更多文档,请访问:PyDynamoDB WIKI。
AWS Redshift
sqlalchemy-redshift 库是通过 SQLAlchemy 连接到 Redshift 的推荐方法。
此方言需要 redshift_connector 或 psycopg2 才能正常工作。
您需要设置以下值以形成连接字符串
- 用户名:userName
- 密码:DBPassword
- 数据库主机:AWS 端点
- 数据库名称:数据库名称
- 端口:默认值 5439
psycopg2
以下是 SQLALCHEMY URI 的样子
redshift+psycopg2://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>
redshift_connector
以下是 SQLALCHEMY URI 的样子
redshift+redshift_connector://<userName>:<DBPassword>@<AWS End Point>:5439/<Database Name>
使用基于 IAM 的凭据与 Redshift 集群连接:
Amazon Redshift 集群 也支持生成基于 IAM 的临时数据库用户凭据。
您的 Superset 应用程序的 IAM 角色应具有权限 来调用 redshift:GetClusterCredentials
操作。
您需要在 Superset 的 Redshift 数据库连接 UI 中的 ADVANCED --> Others --> ENGINE PARAMETERS 下定义以下参数。
{"connect_args":{"iam":true,"database":"<database>","cluster_identifier":"<cluster_identifier>","db_user":"<db_user>"}}
并且 SQLALCHEMY URI 应设置为 redshift+redshift_connector://
使用基于 IAM 的凭据连接无服务器 Redshift:
Redshift 无服务器 支持使用 IAM 角色进行连接。
您的 Superset 应用程序的 IAM 角色应在 Redshift 无服务器工作组上具有 redshift-serverless:GetCredentials
和 redshift-serverless:GetWorkgroup
权限。
您需要在 Superset 的 Redshift 数据库连接 UI 中的 ADVANCED --> Others --> ENGINE PARAMETERS 下定义以下参数。
{"connect_args":{"iam":true,"is_serverless":true,"serverless_acct_id":"<aws account number>","serverless_work_group":"<redshift work group>","database":"<database>","user":"IAMR:<superset iam role name>"}}
ClickHouse
要将 ClickHouse 与 Superset 一起使用,您需要安装 clickhouse-connect
Python 库。
如果使用 Docker Compose 运行 Superset,请将以下内容添加到您的 ./docker/requirements-local.txt
文件中
clickhouse-connect>=0.6.8
ClickHouse 的推荐连接器库是 clickhouse-connect。
预期的连接字符串格式如下
clickhousedb://<user>:<password>@<host>:<port>/<database>[?options…]clickhouse://{username}:{password}@{hostname}:{port}/{database}
以下是一个真实的连接字符串示例
clickhousedb://demo:[email protected]/default?secure=true
如果您的计算机上本地运行 Clickhouse,则可以使用使用默认用户且没有密码的 http 协议 URL(并且不加密连接)来避免麻烦。
clickhousedb://127.0.0.1/default
CockroachDB
CockroachDB 的推荐连接器库是 sqlalchemy-cockroachdb。
预期的连接字符串格式如下
cockroachdb://root@{hostname}:{port}/{database}?sslmode=disable
Couchbase
Couchbase 的 Superset 连接旨在支持两种服务:Couchbase Analytics 和 Couchbase Columnar。Couchbase 的推荐连接器库是 couchbase-sqlalchemy。
pip install couchbase-sqlalchemy
预期的连接字符串格式如下
couchbase://{username}:{password}@{hostname}:{port}?truststorepath={certificate path}?ssl={true/false}
CrateDB
CrateDB 的推荐连接器库是 crate。您需要为此库也安装 extras。我们建议在您的需求文件中添加类似以下文本的内容
crate[sqlalchemy]==0.26.0
预期的连接字符串格式如下
crate://[email protected]:4200
Databend
Databend 的推荐连接器库是 databend-sqlalchemy。Superset 已在 databend-sqlalchemy>=0.2.3
上测试过。
推荐的连接字符串是
databend://{username}:{password}@{host}:{port}/{database_name}
以下是一个 Superset 连接到 Databend 数据库的连接字符串示例
databend://user:password@localhost:8000/default?secure=false
Databricks
Databricks 现在提供了一个原生的 DB API 2.0 驱动程序 databricks-sql-connector
,它可以与 sqlalchemy-databricks
方言一起使用。您可以使用以下命令同时安装这两个程序
pip install "apache-superset[databricks]"
要使用 Hive 连接器,您需要从集群中获取以下信息
- 服务器主机名
- 端口
- HTTP 路径
这些可以在“配置” --> “高级选项” --> “JDBC/ODBC” 下找到。
您还需要从“设置” --> “用户设置” --> “访问令牌” 中获取访问令牌。
一旦您拥有所有这些信息,请添加一个名为“Databricks Native Connector”的数据库,并使用以下 SQLAlchemy URI
databricks+connector://token:{access_token}@{server_hostname}:{port}/{database_name}
您还需要在“其他” --> “引擎参数” 中添加以下配置,并使用您的 HTTP 路径
{
"connect_args": {"http_path": "sql/protocolv1/o/****"}
}
旧驱动程序
最初,Superset 使用 databricks-dbapi
连接到 Databricks。如果您在使用官方 Databricks 连接器时遇到问题,您可能想尝试一下。
pip install "databricks-dbapi[sqlalchemy]"
在使用 databricks-dbapi
连接到 Databricks 时,有两种方法:使用 Hive 连接器或 ODBC 连接器。两种方式的工作方式类似,但只有 ODBC 可以用于连接到 SQL 端点。
Hive
要连接到 Hive 集群,请在 Superset 中添加一个名为“Databricks Interactive Cluster”的数据库,并使用以下 SQLAlchemy URI
databricks+pyhive://token:{access_token}@{server_hostname}:{port}/{database_name}
您还需要在“其他” --> “引擎参数” 中添加以下配置,并使用您的 HTTP 路径
{"connect_args": {"http_path": "sql/protocolv1/o/****"}}
ODBC
对于 ODBC,您首先需要安装 您的平台的 ODBC 驱动程序。
对于常规连接,在选择“Databricks Interactive Cluster”或“Databricks SQL Endpoint”作为数据库后,使用以下 SQLAlchemy URI 作为 SQLAlchemy URI,具体取决于您的用例
databricks+pyodbc://token:{access_token}@{server_hostname}:{port}/{database_name}
以及连接参数
{"connect_args": {"http_path": "sql/protocolv1/o/****", "driver_path": "/path/to/odbc/driver"}}
驱动程序路径应该是
/Library/simba/spark/lib/libsparkodbc_sbu.dylib
(Mac OS)/opt/simba/spark/lib/64/libsparkodbc_sb64.so
(Linux)
对于连接到 SQL 端点,您需要使用端点的 HTTP 路径
{"connect_args": {"http_path": "/sql/1.0/endpoints/****", "driver_path": "/path/to/odbc/driver"}}
Denodo
Denodo 的推荐连接器库是 denodo-sqlalchemy。
预期的连接字符串的格式如下(默认端口为 9996)
denodo://{username}:{password}@{hostname}:{port}/{database}
Dremio
Dremio 的推荐连接器库是 sqlalchemy_dremio。
ODBC 的预期连接字符串(默认端口为 31010)的格式如下
dremio+pyodbc://{username}:{password}@{host}:{port}/{database_name}/dremio?SSL=1
Arrow Flight(Dremio 4.9.1+。默认端口为 32010)的预期连接字符串的格式如下
dremio+flight://{username}:{password}@{host}:{port}/dremio
这篇由 Dremio 发布的 博文 提供了有关将 Superset 连接到 Dremio 的一些其他有用说明。
Apache Drill
SQLAlchemy
连接到 Apache Drill 的推荐方法是通过 SQLAlchemy。您可以使用 sqlalchemy-drill 包。
完成后,您可以通过两种方式连接到 Drill,通过 REST 接口或通过 JDBC。如果您通过 JDBC 连接,则必须安装 Drill JDBC 驱动程序。
Drill 的基本连接字符串如下所示
drill+sadrill://<username>:<password>@<host>:<port>/<storage_plugin>?use_ssl=True
要连接到在本地机器上以嵌入模式运行的 Drill,您可以使用以下连接字符串
drill+sadrill://127.0.0.1:8047/dfs?use_ssl=False
JDBC
通过 JDBC 连接到 Drill 更加复杂,我们建议您按照 本教程 的步骤进行操作。
连接字符串如下所示
drill+jdbc://<username>:<password>@<host>:<port>
ODBC
我们建议您阅读 Apache Drill 文档 并阅读 GitHub README 以了解如何通过 ODBC 使用 Drill。
Apache Druid
Superset 附带了一个与 Druid 的原生连接器(在 DRUID_IS_ACTIVE
标志后面),但这个连接器正在逐渐被 pydruid 库 中提供的 SQLAlchemy/DBAPI 连接器所取代。
连接字符串如下所示
druid://<User>:<password>@<Host>:<Port-default-9088>/druid/v2/sql
以下是该连接字符串的关键部分
User
:连接到数据库所需的凭据的用户名部分Password
:连接到数据库所需的凭据的密码部分Host
:运行数据库的主机机的 IP 地址(或 URL)Port
:主机机上运行数据库的特定端口
自定义 Druid 连接
在添加与 Druid 的连接时,您可以在 **添加数据库** 表单中通过几种不同的方式自定义连接。
自定义证书
在配置与 Druid 的新数据库连接时,您可以在 **根证书** 字段中添加证书
使用自定义证书时,pydruid 将自动使用 https 方案。
禁用 SSL 验证
要禁用 SSL 验证,请将以下内容添加到 **Extras** 字段中
engine_params:
{"connect_args":
{"scheme": "https", "ssl_verify_cert": false}}
聚合
可以在 Superset 中定义和使用常见的聚合或 Druid 指标。第一个也是最简单的用例是使用在数据源编辑视图中显示的复选框矩阵(**来源** --> **Druid 数据源** --> **[您的数据源]** --> **编辑** --> **[选项卡]** **列出 Druid 列**)。
单击 **GroupBy** 和 **Filterable** 复选框将在探索视图中使列出现在相关的下拉列表中。选中 **Count Distinct**、**Min**、**Max** 或 **Sum** 将导致创建新的指标,这些指标将在保存数据源后出现在 **列出 Druid 指标** 选项卡中。
通过编辑这些指标,您会注意到它们的 JSON 元素对应于 Druid 聚合定义。您可以按照 Druid 文档在 **列出 Druid 指标** 选项卡中手动创建自己的聚合。
后聚合
Druid 支持后聚合,这在 Superset 中有效。您只需像手动创建聚合一样创建指标,但将 postagg
指定为 指标类型
。然后,您需要在 JSON 字段中提供有效的 JSON 后聚合定义(如 Druid 文档中所述)。
Elasticsearch
Elasticsearch 的推荐连接器库是 elasticsearch-dbapi。
Elasticsearch 的连接字符串如下所示
elasticsearch+http://{user}:{password}@{host}:9200/
使用 HTTPS
elasticsearch+https://{user}:{password}@{host}:9200/
Elasticsearch 默认限制为 10000 行,因此您可以在集群上提高此限制,或者在配置中设置 Superset 的行限制
ROW_LIMIT = 10000
例如,您可以在 SQL Lab 中查询多个索引
SELECT timestamp, agent FROM "logstash"
但是,要将可视化用于多个索引,您需要在集群上创建别名索引
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "logstash-**", "alias" : "logstash_all" } }
]
}
然后使用别名 logstash_all 注册您的表格
时区
默认情况下,Superset 使用 UTC 时区进行 Elasticsearch 查询。如果您需要指定时区,请编辑您的数据库,并在其他 --> 引擎参数中输入指定时区的设置
{
"connect_args": {
"time_zone": "Asia/Shanghai"
}
}
关于时区问题的另一个需要注意的问题是,在 Elasticsearch 7.8 之前,如果您想将字符串转换为 DATETIME
对象,您需要使用 CAST
函数,但该函数不支持我们的 time_zone
设置。因此,建议您升级到 Elasticsearch 7.8 之后的版本。在 Elasticsearch 7.8 之后,您可以使用 DATETIME_PARSE
函数来解决此问题。DATETIME_PARSE 函数是为了支持我们的 time_zone
设置,您需要在其他 --> 版本设置中填写您的 Elasticsearch 版本号。Superset 将使用 DATETIME_PARSE
函数进行转换。
禁用 SSL 验证
要禁用 SSL 验证,请将以下内容添加到 **SQLALCHEMY URI** 字段中
elasticsearch+https://{user}:{password}@{host}:9200/?verify_certs=False
Exasol
Exasol 的推荐连接器库是 sqlalchemy-exasol。
Exasol 的连接字符串如下所示
exa+pyodbc://{username}:{password}@{hostname}:{port}/my_schema?CONNECTIONLCALL=en_US.UTF-8&driver=EXAODBC
Firebird
Firebird 的推荐连接器库是 sqlalchemy-firebird。Superset 已在 sqlalchemy-firebird>=0.7.0, <0.8
上测试过。
推荐的连接字符串是
firebird+fdb://{username}:{password}@{host}:{port}//{path_to_db_file}
以下是一个 Superset 连接到本地 Firebird 数据库的连接字符串示例
firebird+fdb://SYSDBA:[email protected]:3050//Library/Frameworks/Firebird.framework/Versions/A/Resources/examples/empbuild/employee.fdb
Firebolt
Firebolt 的推荐连接器库是 firebolt-sqlalchemy。
推荐的连接字符串是
firebolt://{username}:{password}@{database}?account_name={name}
or
firebolt://{username}:{password}@{database}/{engine_name}?account_name={name}
也可以使用服务帐户进行连接
firebolt://{client_id}:{client_secret}@{database}?account_name={name}
or
firebolt://{client_id}:{client_secret}@{database}/{engine_name}?account_name={name}
Google BigQuery
BigQuery 的推荐连接器库是 sqlalchemy-bigquery。
安装 BigQuery 驱动程序
按照 此处的步骤了解如何在通过 docker compose 在本地设置 Superset 时安装新的数据库驱动程序。
echo "sqlalchemy-bigquery" >> ./docker/requirements-local.txt
连接到 BigQuery
在 Superset 中添加新的 BigQuery 连接时,您需要添加 GCP 服务帐户凭据文件(作为 JSON)。
- 通过 Google Cloud Platform 控制面板创建您的服务帐户,授予它对相应 BigQuery 数据集的访问权限,并下载服务帐户的 JSON 配置文件。
- 在 Superset 中,您可以上传该 JSON 文件,也可以以以下格式添加 JSON blob(这应该是您的凭据 JSON 文件的内容)
{
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "...",
"auth_uri": "...",
"token_uri": "...",
"auth_provider_x509_cert_url": "...",
"client_x509_cert_url": "..."
}
-
此外,还可以通过 SQLAlchemy URI 进行连接
BigQuery 的连接字符串如下所示
bigquery://{project_id}
转到 **高级** 选项卡,在数据库配置表单中的 **安全额外信息** 字段中添加一个 JSON blob,并使用以下格式
{
"credentials_info": <contents of credentials JSON file>
}结果文件应具有以下结构
{
"credentials_info": {
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "...",
"client_email": "...",
"client_id": "...",
"auth_uri": "...",
"token_uri": "...",
"auth_provider_x509_cert_url": "...",
"client_x509_cert_url": "..."
}
}
然后您应该能够连接到您的 BigQuery 数据集。
为了能够在 Superset 中将 CSV 或 Excel 文件上传到 BigQuery,您还需要添加 pandas_gbq 库。
目前,Google BigQuery Python SDK 与 gevent
不兼容,因为 gevent
对 Python 核心库进行了一些动态猴子补丁。因此,当您使用 gunicorn
服务器部署 Superset 时,您必须使用除 gevent
之外的其他工作程序类型。
Google Sheets
Google Sheets 的 SQL API 功能非常有限。Google Sheets 的推荐连接器库是 shillelagh。
将 Superset 连接到 Google Sheets 包括几个步骤。这篇 教程 提供了有关设置此连接的最新的说明。
Hana
推荐的连接器库是 sqlalchemy-hana。
连接字符串的格式如下
hana://{username}:{password}@{host}:{port}
Apache Hive
通过 pyhive 库是通过 SQLAlchemy 连接到 Hive 的推荐方式。
预期的连接字符串格式如下
hive://hive@{hostname}:{port}/{database}
Hologres
Hologres 是阿里云开发的一种实时交互式分析服务。它与 PostgreSQL 11 完全兼容,并与大数据生态系统无缝集成。
Hologres 连接参数示例
- 用户名: 您阿里云账号的 AccessKey ID。
- 密码: 您阿里云账号的 AccessKey 密钥。
- 数据库主机: Hologres 实例的公网访问地址。
- 数据库名称: Hologres 数据库的名称。
- 端口: Hologres 实例的端口号。
连接字符串如下所示
postgresql+psycopg2://{username}:{password}@{host}:{port}/{database}
IBM DB2
IBM_DB_SA 库为 IBM 数据服务器提供了 Python/SQLAlchemy 接口。
以下是推荐的连接字符串
db2+ibm_db://{username}:{passport}@{hostname}:{port}/{database}
SQLAlchemy 中实现了两个 DB2 方言版本。如果您连接到没有 LIMIT [n]
语法的 DB2 版本,则推荐使用以下连接字符串以使用 SQL Lab
ibm_db_sa://{username}:{passport}@{hostname}:{port}/{database}
Apache Impala
连接 Apache Impala 的推荐连接器库是 impyla。
预期的连接字符串格式如下
impala://{hostname}:{port}/{database}
Kusto
连接 Kusto 的推荐连接器库是 sqlalchemy-kusto>=2.0.0。
Kusto 的连接字符串(sql 方言)如下所示
kustosql+https://{cluster_url}/{database}?azure_ad_client_id={azure_ad_client_id}&azure_ad_client_secret={azure_ad_client_secret}&azure_ad_tenant_id={azure_ad_tenant_id}&msi=False
Kusto 的连接字符串(kql 方言)如下所示
kustokql+https://{cluster_url}/{database}?azure_ad_client_id={azure_ad_client_id}&azure_ad_client_secret={azure_ad_client_secret}&azure_ad_tenant_id={azure_ad_tenant_id}&msi=False
确保用户具有访问和使用所有必需的数据库/表/视图的权限。
Apache Kylin
连接 Apache Kylin 的推荐连接器库是 kylinpy。
预期的连接字符串格式如下
kylin://<username>:<password>@<hostname>:<port>/<project>?<param1>=<value1>&<param2>=<value2>
MySQL
连接 MySQL 的推荐连接器库是 mysqlclient。
以下是连接字符串
mysql://{username}:{password}@{host}/{database}
主机
- 本地主机:
localhost
或127.0.0.1
- 在 Linux 上运行的 Docker:
172.18.0.1
- 本地部署:IP 地址或主机名
- 在 OSX 上运行的 Docker:
docker.for.mac.host.internal
端口:默认情况下为3306
mysqlclient
的一个问题是,它将无法连接到使用 caching_sha2_password
进行身份验证的较新 MySQL 数据库,因为插件未包含在客户端中。在这种情况下,您应该使用 mysql-connector-python 代替
mysql+mysqlconnector://{username}:{password}@{host}/{database}
IBM Netezza Performance Server
nzalchemy 库为 IBM Netezza Performance Server(又名 Netezza)提供了 Python/SQLAlchemy 接口。
以下是推荐的连接字符串
netezza+nzpy://{username}:{password}@{hostname}:{port}/{database}
OceanBase
sqlalchemy-oceanbase 库是通过 SQLAlchemy 连接 OceanBase 的推荐方法。
OceanBase 的连接字符串如下所示
oceanbase://<User>:<Password>@<Host>:<Port>/<Database>
Ocient DB
连接 Ocient 的推荐连接器库是 sqlalchemy-ocient。
安装 Ocient 驱动程序
pip install sqlalchemy-ocient
连接到 Ocient
Ocient DSN 的格式为
ocient://user:password@[host][:port][/database][?param1=value1&...]
Oracle
推荐的连接器库是 cx_Oracle。
连接字符串的格式如下
oracle://<username>:<password>@<hostname>:<port>
Apache Pinot
连接 Apache Pinot 的推荐连接器库是 pinotdb。
预期的连接字符串格式如下
pinot+http://<pinot-broker-host>:<pinot-broker-port>/query?controller=http://<pinot-controller-host>:<pinot-controller-port>/``
使用用户名和密码的预期连接字符串格式如下
pinot://<username>:<password>@<pinot-broker-host>:<pinot-broker-port>/query/sql?controller=http://<pinot-controller-host>:<pinot-controller-port>/verify_ssl=true``
如果您想使用探索视图或连接、窗口函数等,则启用 多阶段查询引擎。在高级 -> 其他 -> 引擎参数中创建数据库连接时添加以下参数
{"connect_args":{"use_multistage_engine":"true"}}
Postgres
请注意,如果您使用的是 docker compose,则 Postgres 连接器库 psycopg2 与 Superset 一起提供。
Postgres 连接参数示例
- 用户名: UserName
- 密码:DBPassword
- 数据库主机:
- 本地主机:localhost 或 127.0.0.1
- 本地部署:IP 地址或主机名
- AWS 终结点
- 数据库名称:数据库名称
- 端口: 默认情况下为 5432
连接字符串如下所示
postgresql://{username}:{password}@{host}:{port}/{database}
您可以在末尾添加 ?sslmode=require
以要求 SSL
postgresql://{username}:{password}@{host}:{port}/{database}?sslmode=require
您可以在 文档中的表 31-1 中了解 Postgres 支持的其他 SSL 模式。
有关 PostgreSQL 连接选项的更多信息,请参阅 SQLAlchemy 文档 和 PostgreSQL 文档。
Presto
pyhive 库是通过 SQLAlchemy 连接 Presto 的推荐方法。
预期的连接字符串格式如下
presto://{hostname}:{port}/{database}
您也可以传入用户名和密码
presto://{username}:{password}@{hostname}:{port}/{database}
以下是以值形式提供的连接字符串示例
presto://datascientist:[email protected]:8080/hive
默认情况下,Superset 假设在查询数据源时使用的是最新版本的 Presto。如果您使用的是旧版本的 Presto,您可以在额外参数中进行配置
{
"version": "0.123"
}
SSL 安全额外添加 json 配置到额外连接信息。
{
"connect_args":
{"protocol": "https",
"requests_kwargs":{"verify":false}
}
}
RisingWave
连接 RisingWave 的推荐连接器库是 sqlalchemy-risingwave。
预期的连接字符串格式如下
risingwave://root@{hostname}:{port}/{database}?sslmode=disable
Rockset
Rockset 的连接字符串为
rockset://{api key}:@{api server}
从 Rockset 控制台 获取您的 API 密钥。从 API 参考 中找到您的 API 服务器。省略 URL 中的 https://
部分。
要定位到特定虚拟实例,请使用此 URI 格式
rockset://{api key}:@{api server}/{VI ID}
有关更完整的说明,我们建议您参阅 Rockset 文档。
Snowflake
安装 Snowflake 驱动程序
按照 此处 的步骤了解如何在通过 docker compose 在本地设置 Superset 时安装新的数据库驱动程序。
echo "snowflake-sqlalchemy" >> ./docker/requirements-local.txt
连接 Snowflake 的推荐连接器库是 snowflake-sqlalchemy。
Snowflake 的连接字符串如下所示
snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}
连接字符串中不需要架构,因为它是在每个表/查询中定义的。如果为用户定义了默认值,则可以省略角色和仓库,即
snowflake://{user}:{password}@{account}.{region}/{database}
确保用户具有访问和使用所有必需的数据库/架构/表/视图/仓库的权限,因为默认情况下,Snowflake SQLAlchemy 引擎不会在引擎创建期间测试用户/角色权限。但是,在“创建”或“编辑”数据库对话框中按下“测试连接”按钮时,用户/角色凭据将通过在引擎创建期间将“validate_default_parameters”: True 传递给 connect() 方法来进行验证。如果用户/角色未被授权访问数据库,则会在 Superset 日志中记录错误。
如果您想使用 密钥对身份验证 连接 Snowflake。请确保您拥有密钥对,并且公钥已在 Snowflake 中注册。要使用密钥对身份验证连接 Snowflake,您需要将以下参数添加到“安全额外”字段。
请注意,您需要将多行私钥内容合并为一行并在每行之间插入 \n
{
"auth_method": "keypair",
"auth_params": {
"privatekey_body": "-----BEGIN ENCRYPTED PRIVATE KEY-----\n...\n...\n-----END ENCRYPTED PRIVATE KEY-----",
"privatekey_pass":"Your Private Key Password"
}
}
如果您的私钥存储在服务器上,您可以在参数中将“privatekey_body”替换为“privatekey_path”。
{
"auth_method": "keypair",
"auth_params": {
"privatekey_path":"Your Private Key Path",
"privatekey_pass":"Your Private Key Password"
}
}
Apache Solr
sqlalchemy-solr 库为 Apache Solr 提供了 Python/SQLAlchemy 接口。
Solr 的连接字符串如下所示
solr://{username}:{password}@{host}:{port}/{server_path}/{collection}[/?use_ssl=true|false]
Apache Spark SQL
连接 Apache Spark SQL 的推荐连接器库是 pyhive。
预期的连接字符串格式如下
hive://hive@{hostname}:{port}/{database}
SQL Server
连接 SQL Server 的推荐连接器库是 pymssql。
SQL Server 的连接字符串如下所示
mssql+pymssql://<Username>:<Password>@<Host>:<Port-default:1433>/<Database Name>/?Encrypt=yes
也可以使用 pyodbc 并带有参数 odbc_connect 进行连接
SQL Server 的连接字符串如下所示
mssql+pyodbc:///?odbc_connect=Driver%3D%7BODBC+Driver+17+for+SQL+Server%7D%3BServer%3Dtcp%3A%3Cmy_server%3E%2C1433%3BDatabase%3Dmy_database%3BUid%3Dmy_user_name%3BPwd%3Dmy_password%3BEncrypt%3Dyes%3BConnection+Timeout%3D30
StarRocks
sqlalchemy-starrocks 库是通过 SQLAlchemy 连接 StarRocks 的推荐方法。
您需要以下设置值来形成连接字符串
- 用户:用户名
- 密码:DBPassword
- 主机: StarRocks FE 主机
- 目录:目录名称
- 数据库:数据库名称
- 端口: StarRocks FE 端口
以下是连接字符串的样子
starrocks://<User>:<Password>@<Host>:<Port>/<Catalog>.<Database>
StarRocks 在 此处 维持其 Superset 文档。
Teradata
推荐的连接器库是 teradatasqlalchemy。
Teradata 的连接字符串如下所示
teradatasql://{user}:{password}@{host}
ODBC 驱动程序
还有一个名为 sqlalchemy-teradata 的较旧连接器,它需要安装 ODBC 驱动程序。Teradata ODBC 驱动程序可在此处获得:https://downloads.teradata.com/download/connectivity/odbc-driver/linux
以下是要使用的环境变量
export ODBCINI=/.../teradata/client/ODBC_64/odbc.ini
export ODBCINST=/.../teradata/client/ODBC_64/odbcinst.ini
我们建议使用第一个库,因为它没有 ODBC 驱动程序方面的要求,并且更新频率更高。
TimescaleDB
TimescaleDB 是用于时间序列和分析的开源关系型数据库,用于构建功能强大的数据密集型应用程序。TimescaleDB 是 PostgreSQL 扩展,您可以使用标准的 PostgreSQL 连接器库 psycopg2 连接到数据库。
如果您使用的是 docker compose,psycopg2 与 Superset 一起提供。
TimescaleDB 连接参数示例
- 用户名: User
- 密码:密码
- 数据库主机:
- 本地主机:localhost 或 127.0.0.1
- 本地部署:IP 地址或主机名
- 对于 Timescale Cloud 服务:主机名
- 对于 TimescaleDB 托管服务 服务:主机名
- 数据库名称:数据库名称
- 端口: 默认情况下为 5432 或服务的端口号
连接字符串如下所示
postgresql://{username}:{password}@{host}:{port}/{database name}
您可以在末尾添加 ?sslmode=require
以要求 SSL(例如,如果您使用的是 Timescale Cloud)
postgresql://{username}:{password}@{host}:{port}/{database name}?sslmode=require
Trino
支持的 trino 版本 352 及更高版本
连接字符串
连接字符串格式如下
trino://{username}:{password}@{hostname}:{port}/{catalog}
如果您在本地计算机上使用 docker 运行 Trino,请使用以下连接 URL
trino://[email protected]:8080
身份验证
1. 基本身份验证
您可以在连接字符串或 高级 / 安全
中的 安全额外
字段中提供 用户名
/密码
-
在连接字符串中
trino://{username}:{password}@{hostname}:{port}/{catalog}
-
在
安全额外
字段中{
"auth_method": "basic",
"auth_params": {
"username": "<username>",
"password": "<password>"
}
}
注意:如果两者都提供,安全额外
始终优先级更高。
2. Kerberos 身份验证
在 安全额外
字段中,配置如下示例
{
"auth_method": "kerberos",
"auth_params": {
"service_name": "superset",
"config": "/path/to/krb5.config",
...
}
}
auth_params
中的所有字段将直接传递到 KerberosAuthentication
类。
注意:Kerberos 身份验证需要在本地安装 trino-python-client
,并使用 all
或 kerberos
可选功能,即分别安装 trino[all]
或 trino[kerberos]
。
3. 证书身份验证
在 安全额外
字段中,配置如下示例
{
"auth_method": "certificate",
"auth_params": {
"cert": "/path/to/cert.pem",
"key": "/path/to/key.pem"
}
}
auth_params
中的所有字段将直接传递到 CertificateAuthentication
类。
4. JWT 身份验证
配置 auth_method
并将令牌提供给 安全额外
字段
{
"auth_method": "jwt",
"auth_params": {
"token": "<your-jwt-token>"
}
}
5. 自定义身份验证
要使用自定义身份验证,您首先需要将其添加到 Superset 配置文件中的 ALLOWED_EXTRA_AUTHENTICATIONS
允许列表中
from your.module import AuthClass
from another.extra import auth_method
ALLOWED_EXTRA_AUTHENTICATIONS: Dict[str, Dict[str, Callable[..., Any]]] = {
"trino": {
"custom_auth": AuthClass,
"another_auth_method": auth_method,
},
}
然后在 安全额外
字段中
{
"auth_method": "custom_auth",
"auth_params": {
...
}
}
您也可以通过将对您的 trino.auth.Authentication
类或工厂函数(返回 Authentication
实例)的引用提供给 auth_method
来使用自定义身份验证。
auth_params
中的所有字段将直接传递到您的类/函数。
参考:
Vertica
推荐的连接库是 sqlalchemy-vertica-python。 Vertica 连接参数如下:
- 用户名:UserName
- 密码:DBPassword
- 数据库主机
- 本地主机:localhost 或 127.0.0.1
- 本地部署:IP 地址或主机名
- 云端:IP 地址或主机名
- 数据库名称:数据库名称
- 端口:默认 5433
连接字符串的格式如下
vertica+vertica_python://{username}:{password}@{host}/{database}
其他参数
- 负载均衡器 - 备份主机
YugabyteDB
YugabyteDB 是一个基于 PostgreSQL 构建的分布式 SQL 数据库。
请注意,如果您使用的是 docker compose,则 Postgres 连接器库 psycopg2 与 Superset 一起提供。
连接字符串如下所示
postgresql://{username}:{password}@{host}:{port}/{database}
通过 UI 连接
以下是关于如何利用新的数据库连接 UI 的文档。这将为管理员提供增强用户体验的能力,以便用户可以连接到新的数据库。
现在,在新的 UI 中连接到数据库时,有 3 个步骤。
步骤 1:首先,管理员必须通知 Superset 他们想要连接的引擎。此页面由 /available
端点提供支持,该端点会提取当前环境中安装的引擎,因此只会显示支持的数据库。
步骤 2:接下来,系统将提示管理员输入数据库特定的参数。根据该特定引擎是否有可用的动态表单,管理员将看到新的自定义表单或传统的 SQLAlchemy 表单。我们目前已经为(Redshift、MySQL、Postgres 和 BigQuery)构建了动态表单。新表单会提示用户输入连接所需的参数(例如用户名、密码、主机、端口等),并提供错误的即时反馈。
步骤 3:最后,一旦管理员使用动态表单连接到他们的数据库,他们就有机会更新任何可选的高级设置。
我们希望此功能将有助于消除用户进入应用程序并开始创建数据集的一大瓶颈。
如何设置首选数据库选项和图像
我们添加了一个新的配置选项,管理员可以在其中按顺序定义他们首选的数据库。
# A list of preferred databases, in order. These databases will be
# displayed prominently in the "Add Database" dialog. You should
# use the "engine_name" attribute of the corresponding DB engine spec
# in `superset/db_engine_specs/`.
PREFERRED_DATABASES: list[str] = [
"PostgreSQL",
"Presto",
"MySQL",
"SQLite",
]
出于版权原因,每个数据库的徽标不会与 Superset 一起分发。
设置图像
- 要设置首选数据库的图像,管理员必须在
superset_text.yml
文件中使用引擎和图像位置创建一个映射。图像可以托管在您的 static/file 目录内的本地主机或在线(例如 S3)。
DB_IMAGES:
postgresql: "path/to/image/postgres.jpg"
bigquery: "path/to/s3bucket/bigquery.jpg"
snowflake: "path/to/image/snowflake.jpg"
如何将新的数据库引擎添加到可用端点
当前,新的模态支持以下数据库。
- Postgres
- Redshift
- MySQL
- BigQuery
当用户选择列表中没有的数据库时,他们将看到一个旧的对话框,要求提供 SQLAlchemy URI。可以逐步将新数据库添加到新的流程中。为了支持丰富的配置,数据库引擎规范需要具有以下属性
parameters_schema
:一个 Marshmallow 架构,定义配置数据库所需的参数。对于 Postgres,这包括用户名、密码、主机、端口等。(参见)。default_driver
:数据库引擎规范推荐的驱动程序名称。许多 SQLAlchemy 方言支持多种驱动程序,但通常一种是官方推荐的驱动程序。对于 Postgres,我们使用“psycopg2”。sqlalchemy_uri_placeholder
:一个字符串,用于帮助用户在他们想直接键入 URI 时提供帮助。encryption_parameters
:当用户选择加密连接时用于构建 URI 的参数。对于 Postgres,这是{"sslmode": "require"}
。
此外,数据库引擎规范必须实现以下类方法
build_sqlalchemy_uri(cls, parameters, encrypted_extra)
:此方法接收不同的参数并根据它们构建 URI。get_parameters_from_uri(cls, uri, encrypted_extra)
:此方法执行相反的操作,从给定的 URI 中提取参数。validate_parameters(cls, parameters)
:此方法用于表单的onBlur
验证。它应该返回一个SupersetError
列表,指示哪些参数丢失,以及哪些参数肯定不正确(示例)。
对于使用 engine+driver://user:password@host:port/dbname
标准格式的数据库,例如 MySQL 和 Postgres,您只需要将 BasicParametersMixin
添加到数据库引擎规范中,然后定义参数 2-4(parameters_schema
已经在 mixin 中存在)。
对于其他数据库,您需要自己实现这些方法。BigQuery 数据库引擎规范是关于如何执行此操作的一个很好的示例。
额外数据库设置
更深入的 SQLAlchemy 集成
可以使用 SQLAlchemy 公开的参数来调整数据库连接信息。在数据库编辑视图中,您可以将额外字段编辑为 JSON 块。
此 JSON 字符串包含额外的配置元素。engine_params
对象被解包到 sqlalchemy.create_engine
调用中,而 metadata_params
被解包到 sqlalchemy.MetaData
调用中。有关更多信息,请参阅 SQLAlchemy 文档。
架构
像 Postgres 和 Redshift 这样的数据库使用架构作为数据库之上的逻辑实体。为了让 Superset 连接到特定架构,您可以在编辑表格表单(数据源>表格>编辑记录)中设置架构参数。
用于 SQLAlchemy 连接的外部密码存储
Superset 可以配置为使用外部存储来存储数据库密码。如果您正在运行自定义密钥分发框架并且不想将密钥存储在 Superset 的元数据库中,这将非常有用。
示例:编写一个函数,该函数接受一个 sqla.engine.url
类型的单个参数,并返回给定连接字符串的密码。然后在您的配置文件中将 SQLALCHEMY_CUSTOM_PASSWORD_STORE
设置为指向该函数。
def example_lookup_password(url):
secret = <<get password from external framework>>
return 'secret'
SQLALCHEMY_CUSTOM_PASSWORD_STORE = example_lookup_password
一种常见的模式是使用环境变量来使密钥可用。SQLALCHEMY_CUSTOM_PASSWORD_STORE
也可用于此目的。
def example_password_as_env_var(url):
# assuming the uri looks like
# mysql://127.0.0.1?superset_user:{SUPERSET_PASSWORD}
return url.password.format(**os.environ)
SQLALCHEMY_CUSTOM_PASSWORD_STORE = example_password_as_env_var
对数据库的 SSL 访问
您可以使用编辑数据库表单中的额外字段来配置 SSL。
{
"metadata_params": {},
"engine_params": {
"connect_args":{
"sslmode":"require",
"sslrootcert": "/path/to/my/pem"
}
}
}
其他
跨数据库查询
Superset 提供了一个实验性功能,用于跨不同数据库进行查询。这是通过一个名为“Superset 元数据库”的特殊数据库完成的,该数据库使用“superset://”SQLAlchemy URI。在使用数据库时,可以使用以下语法查询任何配置数据库中的任何表
SELECT * FROM "database name.[[catalog.].schema].table name";
例如
SELECT * FROM "examples.birth_names";
空格是允许的,但名称中的句点必须替换为 %2E
。例如
SELECT * FROM "Superset meta database.examples%2Ebirth_names";
上面的查询返回与 SELECT * FROM "examples.birth_names"
相同的行,并且还表明元数据库可以查询任何表中的表,甚至它自己!
注意事项
在启用此功能之前,您应该考虑一些事项。首先,元数据库会对查询的表实施权限,因此用户只能通过数据库访问他们原本拥有访问权限的表。尽管如此,元数据库是潜在攻击的新表面,错误可能允许用户查看他们不应该查看的数据。
其次,存在性能问题。元数据库会将任何过滤、排序和限制推送到底层数据库,但任何聚合和联接都将在运行查询的进程中的内存中发生。因此,建议在异步模式下运行数据库,以便查询在 Celery 工作器中执行,而不是在 Web 工作器中执行。此外,可以指定对从底层数据库返回的行数的硬性限制。
启用元数据库
要启用 Superset 元数据库,首先需要将 ENABLE_SUPERSET_META_DB
功能标志设置为 true。然后,添加一个名为“Superset 元数据库”的类型为“Superset 元数据库”的新数据库,SQLAlchemy URI 为“superset://”。
如果您在元数据库中启用 DML,则用户将能够只要它们在底层数据库中也启用 DML,就在底层数据库上运行 DML 查询。这允许用户运行在数据库之间移动数据的查询。
其次,您可能希望更改 SUPERSET_META_DB_LIMIT
的值。默认值为 1000,它定义在执行任何聚合和联接之前从每个数据库读取多少行。如果您的表很小,您也可以将此值设置为 None
。
此外,您可能希望限制元数据库可以访问的数据库。这可以在数据库配置中完成,在“高级”>“其他”>“引擎参数”下,并添加
{"allowed_dbs":["Google Sheets","examples"]}