概述
多源數(shù)據(jù)目錄(Multi-Catalog)功能,旨在能夠更方便對(duì)接外部數(shù)據(jù)目錄,以增強(qiáng)Doris的數(shù)據(jù)湖分析和聯(lián)邦數(shù)據(jù)查詢能力。
在之前的 Doris 版本中,用戶數(shù)據(jù)只有兩個(gè)層級(jí):Database 和 Table。當(dāng)我們需要連接一個(gè)外部數(shù)據(jù)目錄時(shí),我們只能在Database 或 Table 層級(jí)進(jìn)行對(duì)接。比如通過?create external table
?的方式創(chuàng)建一個(gè)外部數(shù)據(jù)目錄中的表的映射,或通過?create external database
?的方式映射一個(gè)外部數(shù)據(jù)目錄中的 Database。 如果外部數(shù)據(jù)目錄中的 Database 或 Table 非常多,則需要用戶手動(dòng)進(jìn)行一一映射,使用體驗(yàn)不佳。
而新的 Multi-Catalog 功能在原有的元數(shù)據(jù)層級(jí)上,新增一層Catalog,構(gòu)成 Catalog -> Database -> Table 的三層元數(shù)據(jù)層級(jí)。其中,Catalog 可以直接對(duì)應(yīng)到外部數(shù)據(jù)目錄。目前支持的外部數(shù)據(jù)目錄包括:
- Apache Hive
- Apache Iceberg
- Apache Hudi
- Elasticsearch
- JDBC: 對(duì)接數(shù)據(jù)庫(kù)訪問的標(biāo)準(zhǔn)接口(JDBC)來(lái)訪問各式數(shù)據(jù)庫(kù)的數(shù)據(jù)。
- Apache Paimon(Incubating)
該功能將作為之前外表連接方式(External Table)的補(bǔ)充和增強(qiáng),幫助用戶進(jìn)行快速的多數(shù)據(jù)目錄聯(lián)邦查詢。
基礎(chǔ)概念?
-
Internal Catalog
Doris 原有的 Database 和 Table 都將歸屬于 Internal Catalog。Internal Catalog 是內(nèi)置的默認(rèn) Catalog,用戶不可修改或刪除。
-
External Catalog
可以通過?CREATE CATALOG?命令創(chuàng)建一個(gè) External Catalog。創(chuàng)建后,可以通過?SHOW CATALOGS?命令查看已創(chuàng)建的 Catalog。
-
切換 Catalog
用戶登錄 Doris 后,默認(rèn)進(jìn)入 Internal Catalog,因此默認(rèn)的使用和之前版本并無(wú)差別,可以直接使用?
SHOW DATABASES
,USE DB
?等命令查看和切換數(shù)據(jù)庫(kù)。用戶可以通過?SWITCH?命令切換 Catalog。如:
SWITCH internal; SWITCH hive_catalog;
切換后,可以直接通過?
SHOW DATABASES
,USE DB
?等命令查看和切換對(duì)應(yīng) Catalog 中的 Database。Doris 會(huì)自動(dòng)通過 Catalog 中的 Database 和 Table。用戶可以像使用 Internal Catalog 一樣,對(duì) External Catalog 中的數(shù)據(jù)進(jìn)行查看和訪問。當(dāng)前,Doris 只支持對(duì) External Catalog 中的數(shù)據(jù)進(jìn)行只讀訪問。
-
刪除 Catalog
External Catalog 中的 Database 和 Table 都是只讀的。但是可以刪除 Catalog(Internal Catalog無(wú)法刪除)??梢酝ㄟ^?DROP CATALOG?命令刪除一個(gè) External Catalog。
該操作僅會(huì)刪除 Doris 中該 Catalog 的映射信息,并不會(huì)修改或變更任何外部數(shù)據(jù)目錄的內(nèi)容。
連接示例?
連接 Hive?
這里我們通過連接一個(gè) Hive 集群說(shuō)明如何使用 Catalog 功能。
更多關(guān)于 Hive 的說(shuō)明,請(qǐng)參閱:Hive Catalog
-
創(chuàng)建 Catalog
CREATE CATALOG hive PROPERTIES ( 'type'='hms', 'hive.metastore.uris' = 'thrift://172.21.0.1:7004' );
CREATE CATALOG 語(yǔ)法幫助
-
查看 Catalog
創(chuàng)建后,可以通過?
SHOW CATALOGS
?命令查看 catalog:mysql> SHOW CATALOGS; +-----------+-------------+----------+ | CatalogId | CatalogName | Type | +-----------+-------------+----------+ | 10024 | hive | hms | | 0 | internal | internal | +-----------+-------------+----------+
SHOW CATALOGS 語(yǔ)法幫助
可以通過?SHOW CREATE CATALOG?查看創(chuàng)建 Catalog 的語(yǔ)句。
可以通過?ALTER CATALOG?修改 Catalog 的屬性。
-
切換 Catalog
通過?
SWITCH
?命令切換到 hive catalog,并查看其中的數(shù)據(jù)庫(kù):mysql> SWITCH hive; Query OK, 0 rows affected (0.00 sec) mysql> SHOW DATABASES; +-----------+ | Database | +-----------+ | default | | random | | ssb100 | | tpch1 | | tpch100 | | tpch1_orc | +-----------+
SWITCH 語(yǔ)法幫助
-
使用 Catalog
切換到 Catalog 后,則可以正常使用內(nèi)部數(shù)據(jù)源的功能。
如切換到 tpch100 數(shù)據(jù)庫(kù),并查看其中的表:
mysql> USE tpch100; Database changed mysql> SHOW TABLES; +-------------------+ | Tables_in_tpch100 | +-------------------+ | customer | | lineitem | | nation | | orders | | part | | partsupp | | region | | supplier | +-------------------+
查看 lineitem 表的schema:
mysql> DESC lineitem; +-----------------+---------------+------+------+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+------+---------+-------+ | l_shipdate | DATE | Yes | true | NULL | | | l_orderkey | BIGINT | Yes | true | NULL | | | l_linenumber | INT | Yes | true | NULL | | | l_partkey | INT | Yes | true | NULL | | | l_suppkey | INT | Yes | true | NULL | | | l_quantity | DECIMAL(15,2) | Yes | true | NULL | | | l_extendedprice | DECIMAL(15,2) | Yes | true | NULL | | | l_discount | DECIMAL(15,2) | Yes | true | NULL | | | l_tax | DECIMAL(15,2) | Yes | true | NULL | | | l_returnflag | TEXT | Yes | true | NULL | | | l_linestatus | TEXT | Yes | true | NULL | | | l_commitdate | DATE | Yes | true | NULL | | | l_receiptdate | DATE | Yes | true | NULL | | | l_shipinstruct | TEXT | Yes | true | NULL | | | l_shipmode | TEXT | Yes | true | NULL | | | l_comment | TEXT | Yes | true | NULL | | +-----------------+---------------+------+------+---------+-------+
查詢示例:
mysql> SELECT l_shipdate, l_orderkey, l_partkey FROM lineitem limit 10; +------------+------------+-----------+ | l_shipdate | l_orderkey | l_partkey | +------------+------------+-----------+ | 1998-01-21 | 66374304 | 270146 | | 1997-11-17 | 66374304 | 340557 | | 1997-06-17 | 66374400 | 6839498 | | 1997-08-21 | 66374400 | 11436870 | | 1997-08-07 | 66374400 | 19473325 | | 1997-06-16 | 66374400 | 8157699 | | 1998-09-21 | 66374496 | 19892278 | | 1998-08-07 | 66374496 | 9509408 | | 1998-10-27 | 66374496 | 4608731 | | 1998-07-14 | 66374592 | 13555929 | +------------+------------+-----------+
也可以和其他數(shù)據(jù)目錄中的表進(jìn)行關(guān)聯(lián)查詢:
mysql> SELECT l.l_shipdate FROM hive.tpch100.lineitem l WHERE l.l_partkey IN (SELECT p_partkey FROM internal.db1.part) LIMIT 10; +------------+ | l_shipdate | +------------+ | 1993-02-16 | | 1995-06-26 | | 1995-08-19 | | 1992-07-23 | | 1998-05-23 | | 1997-07-12 | | 1994-03-06 | | 1996-02-07 | | 1997-06-01 | | 1996-08-23 | +------------+
這里我們通過?
catalog.database.table
?這種全限定的方式標(biāo)識(shí)一張表,如:internal.db1.part
。其中?
catalog
?和?database
?可以省略,缺省使用當(dāng)前 SWITCH 和 USE 后切換的 catalog 和 database。可以通過 INSERT INTO 命令,將 hive catalog 中的表數(shù)據(jù),插入到 interal catalog 中的內(nèi)部表,從而達(dá)到導(dǎo)入外部數(shù)據(jù)目錄數(shù)據(jù)的效果:
mysql> SWITCH internal; Query OK, 0 rows affected (0.00 sec) mysql> USE db1; Database changed mysql> INSERT INTO part SELECT * FROM hive.tpch100.part limit 1000; Query OK, 1000 rows affected (0.28 sec) {'label':'insert_212f67420c6444d5_9bfc184bf2e7edb8', 'status':'VISIBLE', 'txnId':'4'}
列類型映射?
用戶創(chuàng)建 Catalog 后,Doris 會(huì)自動(dòng)同步數(shù)據(jù)目錄的數(shù)據(jù)庫(kù)和表,針對(duì)不同的數(shù)據(jù)目錄和數(shù)據(jù)表格式,Doris 會(huì)進(jìn)行以下列映射關(guān)系。
對(duì)于當(dāng)前無(wú)法映射到 Doris 列類型的外表類型,如?UNION
,?INTERVAL
?等。Doris 會(huì)將列類型映射為 UNSUPPORTED 類型。對(duì)于 UNSUPPORTED 類型的查詢,示例如下:
假設(shè)同步后的表 schema 為:
k1 INT,
k2 INT,
k3 UNSUPPORTED,
k4 INT
select * from table; // Error: Unsupported type 'UNSUPPORTED_TYPE' in '`k3`
select * except(k3) from table; // Query OK.
select k1, k3 from table; // Error: Unsupported type 'UNSUPPORTED_TYPE' in '`k3`
select k1, k4 from table; // Query OK.
不同的數(shù)據(jù)源的列映射規(guī)則,請(qǐng)參閱不同數(shù)據(jù)源的文檔。
權(quán)限管理?
使用 Doris 對(duì) External Catalog 中庫(kù)表進(jìn)行訪問時(shí),默認(rèn)情況下,依賴 Doris 自身的權(quán)限訪問管理功能。
Doris 的權(quán)限管理功能提供了對(duì) Catalog 層級(jí)的擴(kuò)展,具體可參閱?權(quán)限管理?文檔。
用戶也可以通過?access_controller.class
?屬性指定自定義的鑒權(quán)類。如通過指定:
"access_controller.class" = "org.apache.doris.catalog.authorizer.RangerHiveAccessControllerFactory"
則可以使用 Apache Range 對(duì) Hive Catalog 進(jìn)行鑒權(quán)管理。詳細(xì)信息請(qǐng)參閱:Hive Catalog
指定需要同步的數(shù)據(jù)庫(kù)?
通過在 Catalog 配置中設(shè)置?include_database_list
?和?exclude_database_list
?可以指定需要同步的數(shù)據(jù)庫(kù)。
include_database_list
: 支持只同步指定的多個(gè)database,以?,
?分隔。默認(rèn)同步所有database。db名稱是大小寫敏感的。
exclude_database_list
: 支持指定不需要同步的多個(gè)database,以?,
?分割。默認(rèn)不做任何過濾,同步所有database。db名稱是大小寫敏感的。
當(dāng)?
include_database_list
?和?exclude_database_list
?有重合的database配置時(shí),exclude_database_list
會(huì)優(yōu)先生效。連接 JDBC 時(shí),上述 2 個(gè)配置需要和配置?
only_specified_database
?搭配使用,詳見?JDBC
元數(shù)據(jù)更新?
手動(dòng)刷新?
默認(rèn)情況下,外部數(shù)據(jù)源的元數(shù)據(jù)變動(dòng),如創(chuàng)建、刪除表,加減列等操作,不會(huì)同步給 Doris。
用戶需要通過?REFRESH CATALOG?命令手動(dòng)刷新元數(shù)據(jù)。
自動(dòng)刷新?
Hive Metastore?
自動(dòng)刷新目前僅支持 Hive Metastore 元數(shù)據(jù)服務(wù)。通過讓 FE 節(jié)點(diǎn)定時(shí)讀取 HMS 的 notification event 來(lái)感知 Hive 表元數(shù)據(jù)的變更情況,目前支持處理如下event:
事件 | 事件行為和對(duì)應(yīng)的動(dòng)作 |
---|---|
CREATE DATABASE | 在對(duì)應(yīng)數(shù)據(jù)目錄下創(chuàng)建數(shù)據(jù)庫(kù)。 |
DROP DATABASE | 在對(duì)應(yīng)數(shù)據(jù)目錄下刪除數(shù)據(jù)庫(kù)。 |
ALTER DATABASE | 此事件的影響主要有更改數(shù)據(jù)庫(kù)的屬性信息,注釋及默認(rèn)存儲(chǔ)位置等,這些改變不影響doris對(duì)外部數(shù)據(jù)目錄的查詢操作,因此目前會(huì)忽略此event。 |
CREATE TABLE | 在對(duì)應(yīng)數(shù)據(jù)庫(kù)下創(chuàng)建表。 |
DROP TABLE | 在對(duì)應(yīng)數(shù)據(jù)庫(kù)下刪除表,并失效表的緩存。 |
ALTER TABLE | 如果是重命名,先刪除舊名字的表,再用新名字創(chuàng)建表,否則失效該表的緩存。 |
ADD PARTITION | 在對(duì)應(yīng)表緩存的分區(qū)列表里添加分區(qū)。 |
DROP PARTITION | 在對(duì)應(yīng)表緩存的分區(qū)列表里刪除分區(qū),并失效該分區(qū)的緩存。 |
ALTER PARTITION | 如果是重命名,先刪除舊名字的分區(qū),再用新名字創(chuàng)建分區(qū),否則失效該分區(qū)的緩存。 |
當(dāng)導(dǎo)入數(shù)據(jù)導(dǎo)致文件變更,分區(qū)表會(huì)走ALTER PARTITION event邏輯,不分區(qū)表會(huì)走ALTER TABLE event邏輯。
如果繞過HMS直接操作文件系統(tǒng)的話,HMS不會(huì)生成對(duì)應(yīng)事件,doris因此也無(wú)法感知
該特性在 fe.conf 中有如下參數(shù):
-
enable_hms_events_incremental_sync
: 是否開啟元數(shù)據(jù)自動(dòng)增量同步功能,默認(rèn)關(guān)閉。 -
hms_events_polling_interval_ms
: 讀取 event 的間隔時(shí)間,默認(rèn)值為 10000,單位:毫秒。 -
hms_events_batch_size_per_rpc
: 每次讀取 event 的最大數(shù)量,默認(rèn)值為 500。
如果想使用該特性(華為MRS除外),需要更改HMS的 hive-site.xml 并重啟HMS和HiveServer2:
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.dml.events</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.transactional.event.listeners</name>
<value>org.apache.hive.hcatalog.listener.DbNotificationListener</value>
</property>
華為的MRS需要更改hivemetastore-site.xml 并重啟HMS和HiveServer2:
<property>
<name>metastore.transactional.event.listeners</name>
<value>org.apache.hive.hcatalog.listener.DbNotificationListener</value>
</property>
注意:value是在原有值的基礎(chǔ)上以逗號(hào)分隔追加,而不是覆蓋。例如MRS 3.1.0默認(rèn)配置為
<property>
<name>metastore.transactional.event.listeners</name>
<value>com.huawei.bigdata.hive.listener.TableKeyFileManagerListener,org.apache.hadoop.hive.metastore.listener.FileAclListener</value>
</property>
我們需要改為
<property>
<name>metastore.transactional.event.listeners</name>
<value>com.huawei.bigdata.hive.listener.TableKeyFileManagerListener,org.apache.hadoop.hive.metastore.listener.FileAclListener,org.apache.hive.hcatalog.listener.DbNotificationListener</value>
</property>
使用建議: 無(wú)論是之前已經(jīng)創(chuàng)建好的catalog現(xiàn)在想改為自動(dòng)刷新,還是新創(chuàng)建的 catalog,都只需要把?
enable_hms_events_incremental_sync
?設(shè)置為true,重啟fe節(jié)點(diǎn),無(wú)需重啟之前或之后再手動(dòng)刷新元數(shù)據(jù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-665384.html
定時(shí)刷新?
在創(chuàng)建catalog時(shí),在properties 中指定刷新時(shí)間參數(shù)metadata_refresh_interval_sec
?,以秒為單位,若在創(chuàng)建catalog時(shí)設(shè)置了該參數(shù),F(xiàn)E 的master節(jié)點(diǎn)會(huì)根據(jù)參數(shù)值定時(shí)刷新該catalog。目前支持三種類型文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-665384.html
- hms:Hive MetaStore
- es:Elasticsearch
- jdbc:數(shù)據(jù)庫(kù)訪問的標(biāo)準(zhǔn)接口(JDBC)
Example?
-- 設(shè)置catalog刷新間隔為20秒
CREATE CATALOG es PROPERTIES (
"type"="es",
"hosts"="http://127.0.0.1:9200",
"metadata_refresh_interval_sec"="20"
);
到了這里,關(guān)于Apache Doris 入門教程35:多源數(shù)據(jù)目錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!