本章節介紹如何通過雲資料庫 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,更多資訊請參見中繼資料快取與重新整理。