本章节介绍如何通过云数据库 SelectDB 版提供的联邦查询技术,对数据湖、数据库、远端文件等外部数据源进行联邦分析。为您提供简单、快速的数据分析体验。
概述
云数据库 SelectDB 版提供多源数据目录功能(Multi-Catalog或Catalog),支持对接数据湖、数据库等外部数据源,进行简单快速地数据分析。Multi-Catalog功能在原有元数据层级之上新增一层Catalog,构成Catalog -> Database -> Table
的三层元数据层级,Catalog可以直接对应到外部数据源。有关SelectDB支持的外部数据源,请参见数据湖分析和数据库分析。
云数据库 SelectDB 版也提供表函数功能(Table-Value-Function或TVF),支持把S3、HDFS等常见远端存储中的文件数据,映射成云数据库 SelectDB 版中的表,从而方便地对这些文件数据进行分析,具体参见文件分析。
在本文中,主要介绍Catalog相关概念及使用方式。Catalog功能扩展了SelectDB的能力,使其不仅限于管理内部数据,还能高效整合和查询外部数据源。通过使用Catalog,您可以快速访问和分析存储在不同数据仓库和存储系统中的数据,从而实现更加灵活和全面的数据管理和分析。
基础概念与操作
Internal Catalog
SelectDB原有的Database和Table都归属于Internal Catalog。Internal Catalog是内置的默认Catalog,不可修改或删除。
External Catalog
可以通过
CREATE CATALOG
命令创建一个External Catalog。创建后,可以通过SHOW CATALOGS
命令查看Catalog列表,或者SHOW CREATE CATALOG <catalog_name>;
命令查询某个Catalog的创建语句。切换Catalog
您登录SelectDB后,默认进入Internal Catalog,此时您可以通过
SWITCH
命令切换Catalog,示例如下。SWITCH internal; SWITCH hive_catalog;
切换后,可以直接通过
SHOW DATABASES
、USE <db_name>
等命令查看和切换对应Catalog中的Database。SelectDB会自动通过Catalog访问外部数据源中的Database和Table,您可以像使用Internal Catalog一样,对External Catalog中的数据进行查看和访问。当前,云数据库 SelectDB 版支持对External Catalog中的数据进行只读访问。删除Catalog
External Catalog中的Database和Table都是只读的。但是如有必要,您可以通过
DROP CATALOG <catalog_name>;
命令删除一个External Catalog(Internal Catalog无法删除)。说明该操作仅会删除SelectDB中该Catalog的映射信息,并不会修改或变更任何外部数据目录的内容。
列类型映射
创建Catalog后,云数据库 SelectDB 版会自动同步数据目录的数据库和表。针对不同的数据目录和数据表格式,云数据库 SelectDB 版会进行列与列之间的关系映射。
对于当前无法映射到SelectDB列类型的外表类型,如UNION
、INTERVAL
等。SelectDB会将列类型映射为UNSUPPORTED类型。对于UNSUPPORTED类型的查询,示例如下:
-- 同步后的表Schema:
k1 INT,
k2 INT,
k3 UNSUPPORTED,
k4 INT
-- 查询结果:
SELECT * FROM testtable; // Error: Unsupported type 'UNSUPPORTED_TYPE' in '`k3`
SELECT * except(k3) FROM testtable; // Query OK.
SELECT k1, k3 FROM testtable; // Error: Unsupported type 'UNSUPPORTED_TYPE' in '`k3`
SELECT k1, k4 FROM testtable; // Query OK.
SelectDB支持的数据类型可通过SHOW DATA TYPES;
查看。关于不同外部数据源支持的数据类型,请参见数据湖分析与数据库分析。
权限管理
默认情况下,SelectDB访问External Catalog中的库表时,是由SelectDB自身的权限访问管理功能进行访问控制。SelectDB的权限管理功能提供了对Catalog层级的扩展,更多信息请参见权限管理。
指定数据库
通过在Catalog配置中设置include_database_list
和exclude_database_list
,可以指定需要同步的数据库。
include_database_list
:支持只同步指定的Database,以英文逗号(,)分隔,默认同步所有Database。Database名称是区分大小写的。exclude_database_list
:支持指定不需要同步的Database,以英文逗号(,)分隔,默认为空,表示同步所有Database。Database名称是区分大小写的。
当
include_database_list
和exclude_database_list
有重合的Database配置时,exclude_database_list
的优先级更高。连接JDBC时,上述两个配置需要和
only_specified_database
参数搭配使用,更多信息请参见JDBC数据源。
元数据更新
默认情况下,外部数据源如创建、删除表、加减列等元数据变动操作,不会同步给SelectDB。您可以通过以下几种方式刷新元数据。
手动刷新
通过REFRESH命令手动刷新元数据。
语法
REFRESH CATALOG catalog_name;
REFRESH DATABASE [catalog_name.]database_name;
REFRESH TABLE [catalog_name.][database_name.]table_name;
刷新Catalog的同时,会强制使对象相关的Cache失效,包括Partition Cache、Schema Cache、File Cache等。
示例
刷新Catalog,示例如下。
REFRESH CATALOG hive;
刷新Database,示例如下。
REFRESH DATABASE ctl.database1; REFRESH DATABASE database1;
刷新Table,示例如下。
REFRESH TABLE ctl.db.table1; REFRESH TABLE db.table1; REFRESH TABLE table1;
定时刷新
创建Catalog时,通过在properties中指定刷新时间参数metadata_refresh_interval_sec
,可启用定时刷新。定时刷新以秒为单位,若在创建Catalog时设置了该参数,FE的master节点会根据参数值定时刷新该Catalog。目前仅三种数据源支持定时刷新:
HMS:Hive Metastore。
ES:Elasticsearch。
JDBC:数据库访问的标准接口(JDBC)。
-- 设置catalog刷新间隔为20秒
CREATE CATALOG es PROPERTIES (
"type"="es",
"hosts"="http://127.0.0.1:9200",
"metadata_refresh_interval_sec"="20"
);
自动刷新
目前仅Hive Catalog数据源的部分事件会自动刷新Catalog,更多信息请参见元数据缓存与刷新。