文件分析
通過 Table Value Function 功能,Doris 可以直接將對象存儲或 HDFS 上的文件作為 Table 進行查詢分析。并且支持自動的列類型推斷。
使用方式?
更多使用方式可參閱 Table Value Function 文檔:
- S3:支持 S3 兼容的對象存儲上的文件分析。
- HDFS:支持 HDFS 上的文件分析。
這里我們通過 S3 Table Value Function 舉例說明如何進行文件分析。
自動推斷文件列類型?
> DESC FUNCTION s3 (
"URI" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
"s3.access_key"= "ak",
"s3.secret_key" = "sk",
"format" = "parquet",
"use_path_style"="true"
);
+---------------+--------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-------+---------+-------+
| p_partkey | INT | Yes | false | NULL | NONE |
| p_name | TEXT | Yes | false | NULL | NONE |
| p_mfgr | TEXT | Yes | false | NULL | NONE |
| p_brand | TEXT | Yes | false | NULL | NONE |
| p_type | TEXT | Yes | false | NULL | NONE |
| p_size | INT | Yes | false | NULL | NONE |
| p_container | TEXT | Yes | false | NULL | NONE |
| p_retailprice | DECIMAL(9,0) | Yes | false | NULL | NONE |
| p_comment | TEXT | Yes | false | NULL | NONE |
+---------------+--------------+------+-------+---------+-------+
這里我們定義了一個 S3 Table Value Function:
s3(
"URI" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
"s3.access_key"= "ak",
"s3.secret_key" = "sk",
"format" = "parquet",
"use_path_style"="true")
其中指定了文件的路徑、連接信息、認證信息等。
之后,通過?DESC FUNCTION
?語法可以查看這個文件的 Schema。
可以看到,對于 Parquet 文件,Doris 會根據文件內的元信息自動推斷列類型。
目前支持對 Parquet、ORC、CSV、Json 格式進行分析和列類型推斷。
CSV Schema
在默認情況下,對 CSV 格式文件,所有列類型均為 String??梢酝ㄟ^?csv_schema
?屬性單獨指定列名和列類型。Doris 會使用指定的列類型進行文件讀取。格式如下:
name1:type1;name2:type2;...
對于格式不匹配的列(比如文件中為字符串,用戶定義為 int),或缺失列(比如文件中有4列,用戶定義了5列),則這些列將返回null。
當前支持的列類型為:
名稱 | 映射類型 |
---|---|
tinyint | tinyint |
smallint | smallint |
int | int |
bigint | bigint |
largeint | largeint |
float | float |
double | double |
decimal(p,s) | decimalv3(p,s) |
date | datev2 |
datetime | datetimev2 |
char | string |
varchar | string |
string | string |
boolean | boolean |
示例:
s3 (
"URI" = "https://bucket1/inventory.dat",
"s3.access_key"= "ak",
"s3.secret_key" = "sk",
"format" = "csv",
"column_separator" = "|",
"csv_schema" = "k1:int;k2:int;k3:int;k4:decimal(38,10)",
"use_path_style"="true"
)
查詢分析?
你可以使用任意的 SQL 語句對這個文件進行分析
SELECT * FROM s3(
"URI" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
"s3.access_key"= "ak",
"s3.secret_key" = "sk",
"format" = "parquet",
"use_path_style"="true")
LIMIT 5;
+-----------+------------------------------------------+----------------+----------+-------------------------+--------+-------------+---------------+---------------------+
| p_partkey | p_name | p_mfgr | p_brand | p_type | p_size | p_container | p_retailprice | p_comment |
+-----------+------------------------------------------+----------------+----------+-------------------------+--------+-------------+---------------+---------------------+
| 1 | goldenrod lavender spring chocolate lace | Manufacturer#1 | Brand#13 | PROMO BURNISHED COPPER | 7 | JUMBO PKG | 901 | ly. slyly ironi |
| 2 | blush thistle blue yellow saddle | Manufacturer#1 | Brand#13 | LARGE BRUSHED BRASS | 1 | LG CASE | 902 | lar accounts amo |
| 3 | spring green yellow purple cornsilk | Manufacturer#4 | Brand#42 | STANDARD POLISHED BRASS | 21 | WRAP CASE | 903 | egular deposits hag |
| 4 | cornflower chocolate smoke green pink | Manufacturer#3 | Brand#34 | SMALL PLATED BRASS | 14 | MED DRUM | 904 | p furiously r |
| 5 | forest brown coral puff cream | Manufacturer#3 | Brand#32 | STANDARD POLISHED TIN | 15 | SM PKG | 905 | wake carefully |
+-----------+------------------------------------------+----------------+----------+-------------------------+--------+-------------+---------------+---------------------+
Table Value Function 可以出現在 SQL 中,Table 能出現的任意位置。如 CTE 的 WITH 子句中,FROM 子句中。 這樣,你可以把文件當做一張普通的表進行任意分析。
你也可以用過?CREATE VIEW
?語句為 Table Value Function 創(chuàng)建一個邏輯視圖。這樣,你可以想其他視圖一樣,對這個 Table Value Function 進行訪問、權限管理等操作,也可以讓其他用戶訪問這個 Table Value Function。
CREATE VIEW v1 AS
SELECT * FROM s3(
"URI" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
"s3.access_key"= "ak",
"s3.secret_key" = "sk",
"format" = "parquet",
"use_path_style"="true");
DESC v1;
SELECT * FROM v1;
GRANT SELECT_PRIV ON db1.v1 TO user1;
數據導入?
配合?INSERT INTO SELECT
?語法,我們可以方便將文件導入到 Doris 表中進行更快速的分析:
// 1. 創(chuàng)建doris內部表
CREATE TABLE IF NOT EXISTS test_table
(
id int,
name varchar(50),
age int
)
DISTRIBUTED BY HASH(id) BUCKETS 4
PROPERTIES("replication_num" = "1");
// 2. 使用 S3 Table Value Function 插入數據
INSERT INTO test_table (id,name,age)
SELECT cast(id as INT) as id, name, cast (age as INT) as age
FROM s3(
"uri" = "http://127.0.0.1:9312/test2/test.snappy.parquet",
"s3.access_key"= "ak",
"s3.secret_key" = "sk",
"format" = "parquet",
"use_path_style" = "true");
文件緩存
文件緩存(File Cache)通過緩存最近訪問的遠端存儲系統(HDFS 或對象存儲)的數據文件,加速后續(xù)訪問相同數據的查詢。在頻繁訪問相同數據的查詢場景中,File Cache 可以避免重復的遠端數據訪問開銷,提升熱點數據的查詢分析性能和穩(wěn)定性。
原理?
File Cache 將訪問的遠程數據緩存到本地的 BE 節(jié)點。原始的數據文件會根據訪問的 IO 大小切分為 Block,Block 被存儲到本地文件?cache_path/hash(filepath).substr(0, 3)/hash(filepath)/offset
?中,并在 BE 節(jié)點中保存 Block 的元信息。當訪問相同的遠程文件時,doris 會檢查本地緩存中是否存在該文件的緩存數據,并根據 Block 的 offset 和 size,確認哪些數據從本地 Block 讀取,哪些數據從遠程拉起,并緩存遠程拉取的新數據。BE 節(jié)點重啟的時候,掃描?cache_path
?目錄,恢復 Block 的元信息。當緩存大小達到閾值上限的時候,按照 LRU 原則清理長久未訪問的 Block。
使用方式?
File Cache 默認關閉,需要在 FE 和 BE 中設置相關參數進行開啟。
FE 配置?
單個會話中開啟 File Cache:
SET enable_file_cache = true;
全局開啟 File Cache:
SET GLOBAL enable_file_cache = true;
File Cache 功能僅作用于針對文件的外表查詢(如 Hive、Hudi )。對內表查詢,或非文件的外表查詢(如 JDBC、Elasticsearch)等無影響。
BE 配置?
添加參數到 BE 節(jié)點的配置文件 conf/be.conf 中,并重啟 BE 節(jié)點讓配置生效。
參數 | 說明 |
---|---|
enable_file_cache |
是否啟用 File Cache,默認 false |
file_cache_path |
緩存目錄的相關配置,json格式,例子:?[{"path": "/path/to/file_cache1", "total_size":53687091200,"query_limit": "10737418240"},{"path": "/path/to/file_cache2", "total_size":53687091200,"query_limit": "10737418240"},{"path": "/path/to/file_cache3", "total_size":53687091200,"query_limit": "10737418240"}] 。path ?是緩存的保存路徑,total_size ?是緩存的大小上限,query_limit ?是單個查詢能夠使用的最大緩存大小。 |
file_cache_min_file_segment_size |
單個 Block 的大小下限,默認 1MB,需要大于 4096 |
file_cache_max_file_segment_size |
單個 Block 的大小上限,默認 4MB,需要大于 4096 |
enable_file_cache_query_limit |
是否限制單個 query 使用的緩存大小,默認 false |
clear_file_cache |
BE 重啟時是否刪除之前的緩存數據,默認 false |
查看 File Cache 命中情況?
執(zhí)行?set enable_profile=true
?打開會話變量,可以在 FE 的 web 頁面的 Queris 標簽中查看到作業(yè)的 Profile。File Cache 相關的指標如下:
- FileCache:
- IOHitCacheNum: 552
- IOTotalNum: 835
- ReadFromFileCacheBytes: 19.98 MB
- ReadFromWriteCacheBytes: 0.00
- ReadTotalBytes: 29.52 MB
- WriteInFileCacheBytes: 915.77 MB
- WriteInFileCacheNum: 283
-
IOTotalNum
: 遠程訪問的次數 -
IOHitCacheNum
: 命中緩存的次數 -
ReadFromFileCacheBytes
: 從緩存文件中讀取的數據量 -
ReadTotalBytes
: 總共讀取的數據量 -
SkipCacheBytes
: 創(chuàng)建緩存文件失敗,或者緩存文件被刪,需要再次從遠程讀取的數據量 -
WriteInFileCacheBytes
: 保存到緩存文件中的數據量 -
WriteInFileCacheNum
: 保存的 Block 數量,所以?WriteInFileCacheBytes
/WriteInFileCacheBytes
?為 Block 的平均大小
IOHitCacheNum
?/?IOTotalNum
?等于1,表示緩存完全命中
ReadFromFileCacheBytes
?/?ReadTotalBytes
?等于1,表示緩存完全命中文章來源:http://www.zghlxwxcb.cn/news/detail-668064.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-668064.html
到了這里,關于Apache Doris 入門教程36:文件分析和文件緩存的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!