Apache Doris 入门教程36:文件分析和文件缓存

这篇具有很好参考价值的文章主要介绍了Apache Doris 入门教程36:文件分析和文件缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件分析

通过 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 创建一个逻辑视图。这样,你可以想其他视图一样,对这个 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. 创建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 大小切分为 Block,Block 被存储到本地文件 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,默认 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 命中情况​

执行 set enable_profile=true 打开会话变量,可以在 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,表示缓存完全命中

 文章来源地址https://www.toymoban.com/news/detail-668064.html

到了这里,关于Apache Doris 入门教程36:文件分析和文件缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Apache Doris 入门教程03:使用Docker或Kubernetes部署Doris

    该文档主要介绍了如何通过 Dockerfile 来制作 Apache Doris 的运行镜像,以便于在容器化编排工具或者快速测试过程中可迅速拉取一个 Apache Doris Image 来完成集群的创建。 概述​ Docker 镜像在制作前要提前准备好制作机器,该机器的平台架构决定了制作以后的 Docker Image 适用的平台

    2024年02月07日
    浏览(47)
  • Apache Kafka 入门教程

    Apache Kafka 是由 Apache 软件基金会开发的一个开源流处理平台,用于处理实时的大规模数据流。Kafka 的目标是为了处理活跃的流式数据,包括传感器数据,网站日志,应用程序内部的消息,等等。它可以处理成千上万的消息,并让你迅速地处理和存储这些消息。在 Kafka 中,生产

    2024年02月15日
    浏览(51)
  • Apache Solr 教程_编程入门自学教程_菜鸟教程-免费教程分享

    Apache Solr教程 Apache Solr - 概述 Apache Solr - 搜索引擎基础知识 Apache Solr - 在Windows环境中 Apache Solr - 在Hadoop上 Apache Solr - 架构 Apache Solr - 术语 Apache Solr - 基本命令 Apache Solr - 核心 Apache Solr - 索引数据 Apache Solr - 添加文档(XML) Apache Solr - 更新数据 Apache Solr - 删除文档 Apache Solr - 检

    2024年02月08日
    浏览(70)
  • Apache Spark教程_编程入门自学教程_菜鸟教程-免费教程分享

    Apache Spark教程 Apache Spark - 简介 Apache Spark - RDD Apache Spark - 安装 Apache Spark - 核心编程 Apache Spark - 部署 高级Spark编程 Apache Spark - 有用的资源

    2024年02月09日
    浏览(40)
  • springboot的缓存和redis缓存,入门级别教程

    一、springboot(如果没有配置)默认使用的是jvm缓存 1、Spring框架支持向应用程序透明地添加缓存。抽象的核心是将缓存应用于方法,从而根据缓存中可用的信息减少执行次数。缓存逻辑是透明地应用的,对调用者没有任何干扰。只要使用@EnableCaching注释启用了缓存支持,Spri

    2024年02月07日
    浏览(52)
  • 超详细Redis入门教程——Redis缓存

    本文小新为大家带来 Redis缓存 相关知识,具体内容包括 Jedis客户端 (包括: Jedis简介 , 创建工程 , 使用 Jedis 实例 , 使用 JedisPool , 使用 JedisPooled , 连接 Sentinel 高可用集群 , 连接分布式系统 , 操作事务 ), 高并发问题 (包括: 缓存穿透 , 缓存击穿 , 缓存雪崩

    2024年02月15日
    浏览(65)
  • Excel数据分析教程_编程入门自学教程_菜鸟教程-免费教程分享

    Excel数据分析入门教程 - 从基本到高级概念的简单步骤了解Excel数据分析,其中包括概述,流程,Excel数据分析概述,使用范围名称,表格,使用文本功能清理数据,清洁数据包含日期值,使用时间值,条件格式,排序,过滤,带范围的小计,快速分析,查找功能,数据透视表

    2024年02月17日
    浏览(39)
  • Linux入门教程||Linux文件基本属性

    Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在Linux中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和

    2024年02月08日
    浏览(48)
  • Apache Doris 快速入门

    FE,Frontend,前端节点,接收用户查询请求,SQL解析,执行计划生成,元数据管理,节点管理等 BE,Backend,后端节点,数据存储,执行查询计划。 前端节点FE 和 后端节点BE 各自独立运行,互不影响。 broker:用来和外部文件系统打交道 DORIS_HOME=/export/server/doris-1.2.4.1 node1:安装

    2024年02月07日
    浏览(45)
  • 【STM32零基础入门教程03】GPIO输入输出之GPIO框图分析

             本章节主要讲解点亮LED的基本原理,以及GPIO框图的讲解。         首先我们查看原理图,观察电路图中LED的连接情况,如下图可以看出我们的板子中LED一端通过限流电阻连接的PB0另一端连接的是高电平VCC,那么我们将PB0位置接地是不是灯就亮了,那我们就想

    2024年02月14日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包