湖倉一體
本章節介紹如何通過云數據庫 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,更多信息請參見元數據緩存與刷新。