湖仓一体

更新时间: 2024-01-26 16:16:51

本章节介绍如何通过云数据库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 DATABASESUSE <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列类型的外表类型,如UNIONINTERVAL等。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_listexclude_database_list,可以指定需要同步的数据库。

  • include_database_list:支持只同步指定的Database,以英文逗号(,)分隔,默认同步所有Database。Database名称是区分大小写的。

  • exclude_database_list:支持指定不需要同步的Database,以英文逗号(,)分隔,默认为空,表示同步所有Database。Database名称是区分大小写的。

重要
  • include_database_listexclude_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等。

示例

  1. 刷新Catalog,示例如下。

    REFRESH CATALOG hive;
  2. 刷新Database,示例如下。

    REFRESH DATABASE ctl.database1;
    REFRESH DATABASE database1;
  3. 刷新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,更多信息请参见元数据缓存与刷新