酒店类网站开发的策略,网站建设 代码下载,lnmp搭建网站,高水平的徐州网站建设文件分析
通过 Table Value Function 功能#xff0c;Doris 可以直接将对象存储或 HDFS 上的文件作为 Table 进行查询分析。并且支持自动的列类型推断。
使用方式
更多使用方式可参阅 Table Value Function 文档#xff1a;
S3#xff1a;支持 S3 兼容的对象存储上的文…文件分析
通过 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_styletrue
);
----------------------------------------------------------
| 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_styletrue)其中指定了文件的路径、连接信息、认证信息等。
之后通过 DESC FUNCTION 语法可以查看这个文件的 Schema。
可以看到对于 Parquet 文件Doris 会根据文件内的元信息自动推断列类型。
目前支持对 Parquet、ORC、CSV、Json 格式进行分析和列类型推断。
CSV Schema
在默认情况下对 CSV 格式文件所有列类型均为 String。可以通过 csv_schema 属性单独指定列名和列类型。Doris 会使用指定的列类型进行文件读取。格式如下
name1:type1;name2:type2;...
对于格式不匹配的列比如文件中为字符串用户定义为 int或缺失列比如文件中有4列用户定义了5列则这些列将返回null。
当前支持的列类型为
名称映射类型tinyinttinyintsmallintsmallintintintbigintbigintlargeintlargeintfloatfloatdoubledoubledecimal(p,s)decimalv3(p,s)datedatev2datetimedatetimev2charstringvarcharstringstringstringbooleanboolean
示例
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_styletrue
)查询分析
你可以使用任意的 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_styletrue)
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 创建一个逻辑视图。这样你可以想其他视图一样对这个 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_styletrue);DESC v1;SELECT * FROM v1;GRANT SELECT_PRIV ON db1.v1 TO user1;数据导入
配合 INSERT INTO SELECT 语法我们可以方便将文件导入到 Doris 表中进行更快速的分析
// 1. 创建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 或对象存储)的数据文件加速后续访问相同数据的查询。在频繁访问相同数据的查询场景中File Cache 可以避免重复的远端数据访问开销提升热点数据的查询分析性能和稳定性。
原理
File Cache 将访问的远程数据缓存到本地的 BE 节点。原始的数据文件会根据访问的 IO 大小切分为 BlockBlock 被存储到本地文件 cache_path/hash(filepath).substr(0, 3)/hash(filepath)/offset 中并在 BE 节点中保存 Block 的元信息。当访问相同的远程文件时doris 会检查本地缓存中是否存在该文件的缓存数据并根据 Block 的 offset 和 size确认哪些数据从本地 Block 读取哪些数据从远程拉起并缓存远程拉取的新数据。BE 节点重启的时候扫描 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 节点的配置文件 conf/be.conf 中并重启 BE 节点让配置生效。
参数说明enable_file_cache是否启用 File Cache默认 falsefile_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需要大于 4096file_cache_max_file_segment_size单个 Block 的大小上限默认 4MB需要大于 4096enable_file_cache_query_limit是否限制单个 query 使用的缓存大小默认 falseclear_file_cacheBE 重启时是否删除之前的缓存数据默认 false
查看 File Cache 命中情况
执行 set enable_profiletrue 打开会话变量可以在 FE 的 web 页面的 Queris 标签中查看到作业的 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: 创建缓存文件失败或者缓存文件被删需要再次从远程读取的数据量WriteInFileCacheBytes: 保存到缓存文件中的数据量WriteInFileCacheNum: 保存的 Block 数量所以 WriteInFileCacheBytes/WriteInFileCacheBytes 为 Block 的平均大小
IOHitCacheNum / IOTotalNum 等于1表示缓存完全命中
ReadFromFileCacheBytes / ReadTotalBytes 等于1表示缓存完全命中