龙空技术网

大数据:StarRocks jdbc 外表:高效实现查询外部数据源

明少三年 58

前言:

当前各位老铁们对“apache外部访问”都比较关切,你们都需要了解一些“apache外部访问”的相关知识。那么小编同时在网上汇集了一些有关“apache外部访问””的相关内容,希望大家能喜欢,咱们一起来学习一下吧!

导语

StarRocks 支持多种类型的外部表 (external table) ,极大的方便其他的外部数据源的数据以外表的方式接入到StarRocks 实例内,可以直接向外部表所在数据源发起查询。目前 StarRocks 已支持的第三方数据源包括 MySQL、Elasticsearch、Apache Hive™、StarRocks、Apache Iceberg 和 Apache Hudi。本文介绍的是 jdbc外表,该类型外表功能自 2.3.0 版本开始,通过它无需将 jdbc 资源的数据导入至 StarRocks,即可实现对这类数据库的极速分析。

jdbc external

体验

## 前提条件

在使用 JDBC 外表时, FE、BE 节点会下载或本地先部署 JDBC 驱动程序,因此 FE、BE 节点所在机器必须能够访问用于下载 JDBC 驱动程序 JAR 包的 URL,该 URL 由创建 JDBC 资源中的配置项 driver_url 指定。如果FE、BE 节点不能访问远程驱动程序 JAR 包的 URL 可以选择使用本地访问的模式,我这里就是部署使用本地驱动文件,该驱动文件需要部署到集群中的所有节点上的相同目录下。

## 创建和管理 JDBC 资源

备注:这里以外部 StarRocks 资源举例,实现在 StarRocks A集群中查询 StarRocks B的数据。StarRocks jdbc 数据源的驱动可以使用 MySQL 驱动。这里我是本地部署,先去 MySQL 官方下载 jdbc 驱动,我的驱动包版本是 “mysql-connector-java-5.1.49.jar”。

create external resource jdbc_ming025properties (    "type"="jdbc",    "user"="ming",    "password"="changeme",    "jdbc_uri"="jdbc:mysql://ming.local:9230/dw",    "driver_url"=";,    "driver_class"="com.mysql.jdbc.Driver");

properties 的必填配置项:

type:资源类型,固定取值为 jdbc。user:目标数据库用户名。password:目标数据库用户登录密码。jdbc_uri:JDBC 驱动程序连接目标数据库的 URI,需要满足目标数据库 URI 的语法。常见的目标数据库 URI,请参见 MySQL、Oracle、PostgreSQL、SQL Server 官网文档。driver_url:用于下载 JDBC 驱动程序 JAR 包的 URL,支持使用 HTTP 协议 或者 file 协议。driver_class:JDBC 驱动程序的类名称。MySQL:com.mysql.jdbc.Driver(MySQL 5.x 及以下版本)、com.mysql.cj.jdbc.Driver (MySQL 8.x 及以上版本)。

## 查看 jdbc 资源

show resources;

## 删除 jdbc 资源

drop resource "jdbc_ming025";

说明:删除 JDBC 资源会导致使用该 JDBC 资源创建的 JDBC 外部表不可用,但目标数据库的数据并不会丢失。如果仍需要通过 StarRocks 查询目标数据库的数据,可以重新创建 JDBC 资源和 JDBC 外部表。

## 创建 jdbc 外部表

create external table ext0_dw_ord_order (  `cal_dt` date NULL COMMENT "更新日期",  `order_id` bigint(20) NULL COMMENT "订单ID",  `create_dt` varchar(64)  NULL COMMENT "订单创建日期") ENGINE=jdbc properties (    "resource"="jdbc_ming025",    "table"="dw_ord_order");

properties 配置项:

resource:所使用 JDBC 资源的名称,必填项。table:目标数据库表名,必填项。

建外表定义字段类型时需要注意,StarRocks 自有的数据类型附属定义,例如“SUM、MAX、MIN、REPLACE、HLL_UNION、BITMAP_UNION、REPLACE_IF_NOT_NULL”这些都要先处理去除,仅保留基础数据类型定义。

## 查询 jdbc 外表

查询 jdbc 外部表前,必须启动 Pipeline 引擎。

show global variables like 'enable_pipeline_engine';+------------------------+-------+| Variable_name          | Value |+------------------------+-------+| enable_pipeline_engine | true  |+------------------------+-------+ 

到此,对该外表执行 select 语句,通过 JDBC 外部表查询目标数据库的数据。

结语

StarRocks 的外部表类型很多,各有适用场景和缺陷。

标签: #apache外部访问 #oracle外表查询