Skip to main content

用于 SQLAlchemy 的 Apache Drill

项目描述

SQLAlchemy 的 Apache Drill 方言。


这样做的主要目的是为 Apache Drill 提供一个可以与 Apache Superset 一起使用的工作方言。

https://superset.incubator.apache.org

显然,Drill 的一个有效的、健壮的方言也有其他用途,但是这个 REPO 的大部分迭代计划将基于使用 Superset。只要不影响 Superset 集成,我们很乐意合并其他更改。

安装

安装方言很简单。简单地:

pip install sqlalchemy-drill

或者,您可以从 github 下载最新版本并从此处安装:

python3 -m pip install git+https://github.com/JohnOmernik/sqlalchemy-drill.git

与 REST 一起使用

对于 Drill >= 1.19,Drill 的 REST API 可以使用流式传输到 JSON 的结果执行查询,该结果通过分块 HTTP 返回,否则会缓冲结果,然后在传统的 HTTP 响应中返回。连接到 Drill over REST 的 SQLAlchemy URL 如下所示。

drill+sadrill://<username>:<password>@<host>:<port>/<storage_plugin>?use_ssl=True

要连接到在嵌入式模式下运行的本地机器上运行的 Drill,您可以使用以下连接字符串。

drill+sadrill://localhost:8047/dfs?use_ssl=False

支持的 URL 查询参数

范围 类型 描述
使用_ssl 布尔值 是否使用 HTTPS 连接到 Drill
verify_ssl 布尔值 是否验证服务器的 TLS 证书
impersonation_target[1] 细绳 要被此连接模拟的 Drill 用户的用户名

[1] 需要一个包含 DRILL-8168 修复程序的 Drill。

尾随元数据

Drill REST API 返回的查询结果元数据存储在result_mdDB-API Cursor 对象的字段中。请注意,任何尾随元数据,即出现在结果行数据之后的元数据,只有在您遍历所有返回的行之后才会被填充。如果您需要此尾随元数据,您可以通过事先获取对它的引用来使光标对象在完全迭代后可访问,如下所示。

r = engine.execute('select current_timestamp')
r.cursor.result_md  # access metadata, but only leading metadata
cur = r.cursor      # obtain a reference for use later
r.fetchall()        # iterate through all result data
cur.result_md       # access metadata, including trailing metadata
del cur             # optionally delete the reference when done

钻头 < 1.19

在 1.19 之前的 Drill 版本中,所有数据值都被序列化为 JSON 字符串,并且列类型元数据位于数据本身之后。因此,对于这些版本的 Drill,drill+sadrill 方言将每个数据值作为字符串返回。要将非字符串数据转换为其本机类型,您需要自己进行类型转换。

钻头 >= 1.19

在 Drill 1.19 中,REST API 开始使用 JSON 中的数字类型来表示数字和时间,后者通过 UNIX 时间表示,而列类型元数据被移动到结果数据之前。因此,当与 Drill >= 1.19 一起使用时,drill+sadrill 方言能够返回适当的数字和时间类型。

与 JDBC 一起使用

通过 JDBC 连接到 Drill 比本地安装要复杂一些,完整的说明可以在 Drill 文档中找到:https ://drill.apache.org/docs/using-the-jdbc-driver/ 。

为了将 SQLAlchemy 配置为通过 JDBC 使用 Drill,您必须:

  • 在此处下载最新的 JDBC 驱动程序:http: //apache.osuosl.org/drill/
  • 将此驱动程序复制到您的类路径或其他已知路径
  • 将环境变量设置为DRILL_JDBC_DRIVER_PATH驱动程序位置的完整路径
  • 设置一个名为Drill 驱动程序文件DRILL_JDBC_JAR_NAME名的环境变量。.jar

此外,您还需要安装JayDeBeApijPype 0.6.3 版。这些模块被列为可选依赖项,默认安装程序不会安装这些模块。

如果 JDBC 驱动程序不可用,则方言在尝试连接时会抛出错误。此外,sqlalchemy-drill 不会为您启动 JVM,因此您需要自己通过调用 JPype 来执行此操作,如下所示。有关工作示例,请参阅此 repo 中的文件 test-jdbc.py。

jpype.startJVM("-ea", classpath="lib/*")
drill+jdbc://<username>:<passsword>@<host>:<port>

对于简单的安装,这可能如下所示:

drill+jdbc://admin:password@localhost:31010

与 ODBC 一起使用

为了将 SQLAlchemy 配置为通过 ODBC 与 Drill 一起工作,您必须:

要使用 SQLAlchemy 连接到 Drill,请使用以下连接字符串:

drill+odbc:///?<ODBC connection parameters>

官方文档中提供了连接属性:https ://drill.apache.org/docs/odbc-configuration-reference/

对于简单的安装,这可能如下所示:

drill+odbc:///?Driver=/opt/mapr/drill/lib/64/libdrillodbc_sb64.so&ConnectionType=Direct&HOST=localhost&PORT=31010&AuthenticationType=Plain&UID=admin&PWD=password

或者对于您在以下位置配置 DSN 的情况odbc.ini

drill+odbc:///?DSN=drill_dsn_name

注意:最好避免使用带有hostname:portusername/的连接字符串password,例如 'drill+odbc://admin:password@localhost:31010/' 但只使用 ODBC 属性以避免这些参数之间的任何误解。

与超集一起使用

有关如何将 Superset 与 Drill 一起使用的完整教程,请阅读 @cgivre 博客上的教程:http: //thedataist.com/visualize-anything-with-superset-and-drill/

现状/发展思路

目前,我们可以连接到钻取,并对大多数可视化进行查询并获得结果。我们还列举了一些表的表列。以下是一些需要解决的更大问题。(个别问题在issues下跟踪)

  • 通过 Superset 中的数据库选项卡连接到 Drill 成功
  • 您可以对大多数类型的可视化项/表进行基本查询
  • 高级查询/联接可能存在问题。当您了解新问题时,请跟踪问题

非常感谢

使用drillpy和pydrill获取用于创建原始drilldbapi.py连接代码的代码!

码头工人

建议扩展官方 Docker 镜像以包含此 Apache Drill 驱动程序:

FROM apache/superset
# Switching to root to install the required packages
USER root
RUN pip install git+https://github.com/JohnOmernik/sqlalchemy-drill.git
# Switching back to using the `superset` user
USER superset

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

sqlalchemy_drill-1.1.2.tar.gz (26.1 kB 查看哈希)

已上传 source