做投票網(wǎng)站全網(wǎng)搜索引擎優(yōu)化
系列文章目錄
4.查詢數(shù)據(jù)湖
4.1 Catalog
4.1.1 概述
4.1.1.1 基本概念
4.1.1.2 Catalog
4.1.1.3 訪問Catalog
4.1.2 Default catalog
4.1.3 External Catalog
4.2 文件外部表
4.2.1 使用限制
4.2.2 開源版本語法
4.2.3 阿里云版本
5. 查詢及優(yōu)化
文章目錄
- 系列文章目錄
- 前言
- 4.查詢數(shù)據(jù)湖
- 4.1 Catalog
- 4.1.1 概述
- 4.1.1.1 基本概念
- 4.1.1.2 Catalog
- 4.1.1.3 訪問Catalog
- 4.1.2 Default catalog
- 4.1.3 External Catalog
- 4.2 文件外部表
- 4.2.1 使用限制
- 4.2.2 開源版本語法
- 4.2.3 阿里云版本
- 5. 查詢及優(yōu)化
前言
本文為Flink-StarRocks詳解后續(xù)章節(jié):主要詳解StarRocks查詢數(shù)據(jù)湖
由于篇幅過長,后續(xù)接著下面進(jìn)行詳解:
數(shù)倉場景:即席查詢大案例
4.查詢數(shù)據(jù)湖
4.1 Catalog
4.1.1 概述
StarRocks 自 2.3 版本起支持 Catalog(數(shù)據(jù)目錄)功能,實現(xiàn)在一套系統(tǒng)內(nèi)同時維護(hù)內(nèi)、外部數(shù)據(jù),方便輕松訪問并查詢存儲在各類外部源的數(shù)據(jù)。
4.1.1.1 基本概念
內(nèi)部數(shù)據(jù):指保存在 StarRocks 中的數(shù)據(jù)。
外部數(shù)據(jù):指保存在外部數(shù)據(jù)源(如 Apache Hive?、Apache Iceberg、Apache Hudi、Delta Lake、JDBC)中的數(shù)據(jù)。
4.1.1.2 Catalog
當(dāng)前 StarRocks 提供兩種類型 Catalog:internal catalog 和 external catalog。
? Internal catalog: 內(nèi)部數(shù)據(jù)目錄,用于管理 StarRocks 所有內(nèi)部數(shù)據(jù)。例如,執(zhí)行 CREATE DATABASE 和 CREATE TABLE 語句創(chuàng)建的數(shù)據(jù)庫和數(shù)據(jù)表都由 internal catalog 管理。 每個 StarRocks 集群都有且只有一個 internal catalog 名為 default_catalog。
? External catalog: 外部數(shù)據(jù)目錄,用于連接外部 metastore。在 StarRocks 中,可以通過 external catalog 直接查詢外部數(shù)據(jù),無需進(jìn)行數(shù)據(jù)導(dǎo)入或遷移。當(dāng)前支持創(chuàng)建以下類型的 external catalog:
? Hive catalog:用于查詢 Hive 數(shù)據(jù)。
? Iceberg catalog:用于查詢 Iceberg 數(shù)據(jù)。
? Hudi catalog:用于查詢 Hudi 數(shù)據(jù)。
? Delta Lake catalog:用于查詢 Delta Lake 數(shù)據(jù)。
? JDBC catalog:用于查詢 JDBC 數(shù)據(jù)源的數(shù)據(jù)。
4.1.1.3 訪問Catalog
可以使用 SET CATALOG 切換當(dāng)前會話里生效的 Catalog,然后通過該 Catalog 查詢數(shù)據(jù)。
語法:
SET CATALOG <catalog_name>
參數(shù):
catalog_name:當(dāng)前會話里生效的 Catalog,支持 Internal Catalog 和 External Catalog。如果指定的 Catalog 不存在,則會引發(fā)異常。
示例:
通過如下命令,切換當(dāng)前會話里生效的 Catalog 為 Hive Catalog hive_metastore:
SET CATALOG hive_metastore;
如想在一個 catalog 中查詢其他 catalog 中數(shù)據(jù),可通過 catalog_name.db_name.table_name 的格式來引用目標(biāo)數(shù)據(jù)。
例如,在 default_catalog.olap_db 下查詢 hive_catalog 中的 hive_table。
SELECT * FROM hive_catalog.hive_db.hive_table;
4.1.2 Default catalog
StarRocks 2.3 及以上版本提供了 Internal Catalog(內(nèi)部數(shù)據(jù)目錄),用于管理 StarRocks 的內(nèi)部數(shù)據(jù)。每個 StarRocks 集群都有且只有一個 Internal Catalog,名為 default_catalog。StarRocks 暫不支持修改 Internal Catalog 的名稱,也不支持創(chuàng)建新的 Internal Catalog。
使用:
默認(rèn)是default_catalog,也可以顯示切換。
SET CATALOG default_catalog;
然后通過 SELECT 查詢內(nèi)部數(shù)據(jù)
SELECT * FROM <table_name>;
如在以上步驟中未指定數(shù)據(jù)庫,則可以在查詢語句中直接指定。
SELECT * FROM <db_name>.<table_name>;
或
SELECT * FROM default_catalog.<db_name>.<table_name>;
4.1.3 External Catalog
External Catalog(外部數(shù)據(jù)目錄),用于管理外部數(shù)據(jù)源的訪問信息。
語法:
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
("type" = "<type>",MetastoreParams
)
參數(shù)說明:
? catalog_name:External Catalog的名稱,必選參數(shù)。
命名要求如下:
? 總長度不能超過64個字符。
? 必須由字母(az或AZ)、數(shù)字(0~9)或下劃線(_)組成,且只能以字母開頭。
comment:External Catalog的描述,可選參數(shù)。
type:數(shù)據(jù)源的類型,必選參數(shù)。
目前開源版本支持hive、hudi、iceberg、delta lake、jdbc、elasticsearch、paimon七種類型的數(shù)據(jù)源,阿里云EMR Serverless StarRocks目前只支持hive、hudi、iceberg三種。
MetastoreParams:StarRocks訪問相應(yīng)數(shù)據(jù)源的相關(guān)參數(shù)配置
示例:
開源版本:
CREATE EXTERNAL CATALOG hive_catalog_hms
PROPERTIES
("type" = "hive","hive.metastore.type" = "hive","hive.metastore.uris" = "thrift://xx.xx.xx:9083"
);
阿里云版本:
CREATE EXTERNAL CATALOG hive
PROPERTIES
("type" = "hive","dlf.catalog.endpoint" = "dlf-vpc.cn-beijing.aliyuncs.com","dlf.catalog.region" = "cn-beijing","dlf.catalog.proxyMode" = "DLF_ONLY","dlf.catalog.akMode" = "MANUAL","hive.metastore.type" = "DLF","dlf.catalog.id" = "dlf_test","dlf.catalog.accessKeyId" = "*******","dlf.catalog.accessKeySecret" = "*****"
);
4.2 文件外部表
文件外部表 (File External Table) 是一種特殊的外部表??梢酝ㄟ^文件外部表直接查詢外部存儲系統(tǒng)上的 Parquet 和 ORC 格式的數(shù)據(jù)文件,無需導(dǎo)入數(shù)據(jù)。同時,文件外部表也不依賴任何 Metastore。StarRocks 當(dāng)前支持的外部存儲系統(tǒng)包括 HDFS、Amazon S3 及其他兼容 S3 協(xié)議的對象存儲、阿里云對象存儲 OSS 和騰訊云對象存儲 COS。
該特性從 StarRocks 2.5 版本開始支持。
4.2.1 使用限制
? 當(dāng)前僅支持在 default_catalog 下的數(shù)據(jù)庫內(nèi)創(chuàng)建文件外部表,不支持 external catalog。可以通過 SHOW CATALOGS 來查詢集群下的 catalog。
? 僅支持查詢 Parquet 和 ORC 格式的數(shù)據(jù)文件。
? 目前僅支持讀取目標(biāo)數(shù)據(jù)文件中的數(shù)據(jù),不支持例如 INSERT,DELETE,DROP 等寫入操作。
4.2.2 開源版本語法
切換到目前數(shù)據(jù)庫后,可以使用如下語法創(chuàng)建一個文件外部表。
CREATE EXTERNAL TABLE <table_name>
(<col_name> <col_type> [NULL | NOT NULL] [COMMENT "<comment>"]
)
ENGINE=FILE
COMMENT ["comment"]
PROPERTIES
(FileLayoutParams,StorageCredentialParams
)
參數(shù)說明:
參數(shù) 必選 說明
具體參考:https://docs.starrocks.io/zh/docs/data_source/file_external_table/
示例:
USE db_example;
CREATE EXTERNAL TABLE table_1
(name string, id int
)
ENGINE=file
PROPERTIES
("path" = "s3://bucket-test/folder1/", "format" = "orc","aws.s3.use_instance_profile" = "false","aws.s3.access_key" = "<iam_user_access_key>","aws.s3.secret_key" = "<iam_user_access_key>","aws.s3.region" = "us-west-2"
);
4.2.3 阿里云版本
在阿里云EMR Serverless StarRocks中,通過配置正確的OSS AccessKey和OSS Endpiont信息,即可以輕松地連接到OSS Bucket,并在StarRocks中使用SQL語句對數(shù)據(jù)進(jìn)行查詢和分析等操作。
操作步驟:
(1)進(jìn)入EMR Serverless StarRocks實例配置頁面。
1)在EMR控制臺,點擊StarRocks,單擊待查看的實例名稱。
2)單擊實例配置頁簽。
(2)修改core-site.xml配置。
1)單擊core-site.xml頁簽。
2)搜索并修改以下配置項。
①配置accessKey步驟:
登錄AccessKey管理頁面,
https://ram.console.aliyun.com/manage/ak?spm=a2c4g.11186623.0.0.389247f8OlOaMw
首次進(jìn)入需勾選并點擊確定
因為安全原因,這里使用子用戶的AccessKey
點擊創(chuàng)建用戶
登錄名為寫自己得,顯示名稱為自己的名稱,勾選兩種訪問方式
點擊自定義密碼,設(shè)置為88888666!
然后是不需要重置密碼,不需要MFA多因素認(rèn)證
點擊確定
然后通過手機號或者掃臉進(jìn)行驗證。
驗證成功后,復(fù)制對應(yīng)的AccessKey ID 和 Secret
②通過查詢訪問域名和數(shù)據(jù)中心
https://help.aliyun.com/zh/oss/user-guide/regions-and-endpoints 得到 北京的內(nèi)網(wǎng)Endpoint為 oss-cn-beijing-internal.aliyuncs.com
(3)修改BE配置。
1)單擊BE頁簽。
2)搜索并修改以下配置項。
(4)生效配置。
1)單擊提交參數(shù)。
2)在彈出的對話框中,輸入原因說明,單擊確定。
(5)查詢示例
接paimon章節(jié)在oss中創(chuàng)建的表
CREATE DATABASE test;CREATE EXTERNAL TABLE test.UpdateTable
(a STRING,b INT,c INT
)
ENGINE=file
PROPERTIES
("path" = "oss://*******-paimon/test.db/UpdateTable/bucket-0/", "format" = "orc"
);SELECT * FROM test.UpdateTable;
查詢結(jié)果如下:
注意:如果查詢報錯,原因可能是子賬號沒有OSS訪問權(quán)限,所以需要給子賬號開通權(quán)限
開通方式,就是在RAM訪問控制中,點擊用戶,然后添加權(quán)限。
然后把OSS權(quán)限授權(quán)給子用戶。
5. 查詢及優(yōu)化
查詢SQL參考:
https://docs.starrocks.io/zh/docs/sql-reference/sql-statements/all-commands/
常用函數(shù)參考:
https://docs.starrocks.io/zh/docs/sql-reference/sql-functions/function-list/
另外,為了獲取更快的查詢速度,StarRocks也提供了一些查詢加速的方法,主要的方式有使用CBO 優(yōu)化器、物化視圖、Colocata Join、索引、數(shù)據(jù)去重等。
具體詳見:
https://docs.starrocks.io/zh/docs/using_starrocks/Cost_based_optimizer/