本章节介绍如何通过云数据库 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,更多信息请参见元数据缓存与刷新。