一文读懂 Databend 的开放表格式引擎

本文介绍了 Databend 开放表格式引擎的支持情况,包括优势与不足、使用方法、与 Catalog 方案的对比。此外,还包含一个简单的 Workshop ,介绍如何利用 Databend Cloud 分析位于对象存储中的 Delta Table 。

Databend 近期发布 Apache Iceberg 和 Delta Table 两类表引擎,以提供对两种目前最受欢迎的开放表格式的支持,满足基于不同技术栈的现代数据湖方案面临的高级分析需求。

采用基于 Databend / Databend Cloud 的一站式解决方案,可以在不启用额外的 Spark / Databricks 服务的前提下,完成对开放表格式数据的洞见,简化部署架构与分析流程。此外,利用 Databend / Databend Cloud 在 Apache OpenDAL™ 之上构建的数据访问方案,可以便捷访问数十种存储服务,包括对象存储、HDFS 甚至 IPFS ,可以与现有技术栈轻松集成。

优势
  • 在使用开放表格式引擎时,只需要指定表引擎的类型(Delta 或 Iceberg)和数据文件存储的位置,即可直接访问对应的表并利用 Databend 进行查询。

  • 利用 Databend 的开放表格式引擎,可以轻松应对混合不同数据源、不同表格式数据的场景:

    • 在同一个数据库对象下,查询和分析以不同格式汇总的数据表。

    • 凭借 Databend 的丰富存储后端集成,应对不同存储后端中的数据访问需求。

不足
  • 目前 Apache Iceberg 和 Delta Lake 引擎仅支持只读操作,也就是只能查询数据,无法向表中写入数据。

  • 表的 Schema 是在表创建时确定的,如果对原始表的 Schema 进行了修改,为了保证数据的一致与同步,需要在 Databend 中重新创建表。

使用方法

-- Set up connection CREATE [ OR REPLACE ] CONNECTION [ IF NOT EXISTS ] <connection_name>      STORAGE_TYPE = '<type>'      [ <storage_params> ] -- Create table with Open Table Format engine CREATE TABLE <table_name>      ENGINE = [Delta | Iceberg]      LOCATION = '<location_to_table>'      CONNECTION_NAME = '<connection_name>' 

小贴士: Databend 中使用 CONNECTION 管理与外部存储服务进行交互所需的详细信息,比如访问凭证、端点URL和存储类型。通过指定 CONNECTION_NAME ,可以在创建资源时复用 CONNECTION,简化存储配置的管理和使用。

与 Catalog 方案的对比

此前 Databend 已经通过 Catalog 提供 Iceberg 和 Hive 的支持,相比表引擎,Catalog 更加适合完整对接相关生态,一次性挂载多个数据库和表的情况。

而新增的开放表格式引擎在体验上更加灵活,支持在同一个数据库下汇总并混合来自不同数据源、不同表格式的数据,并进行有效地分析与洞见。

Workshop:使用 Databend Cloud 分析 Delta Table 中的数据

在这个示例将会展示如何利用 Databend Cloud 加载并分析位于对象存储中的 Delta Table 。

我们将会使用经典的企鹅体态特征数据集(penguins),将其转化为 Delta Table 并放置在 S3 兼容的对象存储中。该数据集一共包含 8 个变量,其中 7 个特征变量,1 个分类变量,共计 344 个样本。

  • 分类变量为企鹅类别(species),属于硬尾企鹅属的三个亚属,分别是 Adélie ,Chinstrap 和 Gentoo 。

  • 包含的三种企鹅的六个特征,分别是所在岛屿(island),嘴巴长度(bill_length_mm),嘴巴深度(bill_depth_mm),脚蹼长度(flipper_length_mm),身体体重(body_mass_g),性别(sex)。

如果你还没有 Databend Cloud 帐号,欢迎访问 A Modern Data Cloud For Everyone | Databend Platform 注册并获取免费额度。或者也可以参考 Self-Hosted Databend | Databend 在本地部署 Databend 。

本文中还涉及对象存储的使用,也可以尝试使用具有免费额度的 Cloudflare R2 创建 Bucket 。

向对象存储中写入数据

我们需要安装对应的 Python 包,seaborn 负责提供原始数据,deltalake 负责将数据转换为 Delta Table 并写入 S3 :

pip install deltalake seaborn 

然后,编辑下面的代码,配置对应的访问凭据,并另存为 writedata.py :

import seaborn as sns from deltalake.writer import write_deltalake ACCESS_KEY_ID = '<your-key-id>' SECRET_ACCESS_KEY = '<your-access-key>' ENDPOINT_URL = '<your-endpoint-url>' storage_options = {     "AWS_ACCESS_KEY_ID": ACCESS_KEY_ID,     "AWS_SECRET_ACCESS_KEY": SECRET_ACCESS_KEY,     "AWS_ENDPOINT_URL": ENDPOINT_URL,     "AWS_S3_ALLOW_UNSAFE_RENAME": 'true', } penguins = sns.load_dataset('penguins') write_deltalake("s3://penguins/", penguins, storage_options=storage_options) 

执行上面的 Python 脚本,以向对象存储中写入数据:

python writedata.py 

使用 Delta 表引擎访问数据

在 Databend 中创建对应的访问凭据:

--Set up connection CREATE CONNECTION my_r2_conn      STORAGE_TYPE = 's3'      SECRET_ACCESS_KEY = '<your-access-key>'      ACCESS_KEY_ID = '<your-key-id>'     ENDPOINT_URL = '<your-endpoint-url>'; 

创建由 Delta 表引擎支持的数据表:

-- Create table with Open Table Format engine CREATE TABLE penguins     ENGINE = Delta     LOCATION = 's3://penguins/'      CONNECTION_NAME = 'my_r2_conn'; 

利用 SQL 查询和分析表中的数据

验证数据的可访问性

首先,让我们输出 5 个企鹅的种类和所在的岛屿,以检查是否能够正确访问到 Delta Table 中的数据。

SELECT species, island FROM penguins LIMIT 5; 

数据过滤

接下来,可以进行一些基本的数据过滤操作,比如找出脚蹼长度超过 210mm 的雄性企鹅可能属于哪一个亚属。

SELECT DISTINCT species                  FROM penguins                  WHERE sex = 'Male'                    AND flipper_length_mm > 210; 

数据分析

类似地,我们可以尝试计算每只企鹅嘴巴长度和深度的比例,并输出最大的五个数据。

SELECT bill_length_mm / bill_depth_mm AS length_to_depth                  FROM penguins                 ORDER BY length_to_depth DESC                 LIMIT 5; 

混合数据源案例:企鹅观察日志

现在将会进入一个有趣的部分:假设我们发现了科考站的一份观察记录,让我们尝试在同一个数据库下录入这份数据,并且尝试进行一项简单的数据分析:某只特定性别的企鹅被某位科学家标记的概率是多少。

创建观察日志表

使用默认的 FUSE 引擎创建 penguin_observations 表,包含 ID、日期、姓名、企鹅种类与性别、备注等几类信息。

CREATE TABLE penguin_observations (     observation_id INT,     observation_date DATE,     observer_name VARCHAR,     penguin_species VARCHAR,     penguin_sex VARCHAR,     notes TEXT, ); 

录入观察日志

让我们尝试手工录入全部 10 条日志。已知日志记录中出现的企鹅互不相同。

INSERT INTO penguin_observations (observation_id, observation_date, observer_name, penguin_species, penguin_sex, notes) VALUES (1, '2023-01-01', 'Dr. Kowalski', 'Adelie', 'Male', 'Noticed aggressive behavior towards peers.'), (2, '2023-01-02', 'Dr. Smith', 'Chinstrap', 'Female', 'Sighted building a nest.'), (3, '2023-01-03', 'Dr. Kowalski', 'Gentoo', 'Female', 'Observed feeding offspring.'), (4, '2023-01-04', 'Dr. Smith', 'Adelie', 'Male', 'Found resting by the shoreline.'), (5, '2023-01-05', 'Dr. Kowalski', 'Adelie', 'Female', 'Engaged in mating rituals.'), (6, '2023-01-06', 'Dr. Kowalski', 'Gentoo', 'Male', 'Spotted swimming in the open water.'), (7, '2023-01-07', 'Dr. Smith', 'Chinstrap', 'Male', 'Appeared to be molting.'), (8, '2023-01-08', 'Dr. Smith', 'Gentoo', 'Female', 'Seen with a potential mate.'), (9, '2023-01-09', 'Dr. Kowalski', 'Adelie', 'Female', 'Observed preening feathers.'), (10, '2023-01-10', 'Dr. Kowalski', 'Adelie', 'Male', 'Identified with a tagged flipper.'); 

计算标记概率

现在让我们计算在所有企鹅中,某只雄性 Adelie 企鹅被 Dr. Kowalski 观察的概率。首先我们需要统计 Dr. Kowalski 观察到的雄性 Adelie 企鹅的个数,然后统计所有记录在案的雄性 Adelie 企鹅个数,最后相除得到结果。

SELECT     (SELECT COUNT(*)      FROM penguin_observations      WHERE observer_name = 'Dr. Kowalski'      AND species = 'Adelie'      AND sex = 'Male')::FLOAT /     (SELECT COUNT(*)      FROM penguins      WHERE species = 'Adelie'      AND sex = 'Male')::FLOAT AS observation_probability; 

总结

凭借组合不同表引擎进行查询,Databend / Databend Cloud 可以支撑在同一个数据库下混合不同格式的表,并进行分析与查询。本文只是提供一个基本的 Workshop 供大家体验功能和使用,欢迎大家基于这个案例进行拓展,探索更多组合 Iceberg 和 Delta Table 进行数据分析的场景,以及更多潜在的真实世界应用。

推荐阅读

  • Docs | Apache Iceberg Table Engine

  • Docs | Delta Lake Table Engine

  • Docs | Connection

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/270871.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序环形进度条爬坑

在做微信小程序的时候&#xff0c;发现用canvas做的环形进度条&#xff0c;在带滚动条的view里面显示有闪动、显示不全的问题&#xff0c;后面改成echart-weixin的pie图实现了&#xff0c;option配置如下 // 表示进度的百分比 var progressValue 70;option {series: [{type: …

深入解析Mybatis-Plus框架:简化Java持久层开发(八)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 本章节介绍如何通过Mybatis-Plus更新数据库中的数据。 本章节不需要前置准备&#xff0c;继续使用之前的测试类&#xff0c;数据库表进行操作。 &#x1f4…

Git 版本控制

Git 版本控制 1. About Version Control (关于版本控制)1.1. Local Version Control Systems (本地版本控制系统)1.2. Centralized Version Control Systems (集中化的版本控制系统)1.3. Distributed Version Control Systems (分布式版本控制系统) 2. 换行符的处理3. keyboard…

C# 由左上、右下两个坐标点计算矩形的长、宽以及两点的距离

一、计算长、宽 直接使用坐标点计算 // 定义矩形左上角和右下角的坐标 Point topLeft new Point(0, 0); Point bottomRight new Point(5, 10); // 计算矩形的长和宽 int width bottomRight.X - topLeft.X;//矩形宽度 int height bottomRight.Y - topLeft.Y;//矩形高度或是…

Vue中有哪些优化性能的方法?

Vue是一款流行的JavaScript框架&#xff0c;用于构建交互性强的Web应用程序。在前端开发中&#xff0c;性能优化是一个至关重要的方面&#xff0c;尤其是当应用程序规模变大时。Vue提供了许多优化性能的方法&#xff0c;可以帮助开发人员提升应用程序的性能&#xff0c;从而提升…

初学者如何使用QT新建一个包含UI界面的C++项目

文章目录 一、下载并安装QT51、下载安装包2、注册/登录账号3、安装qt6 二、新建QT Widget项目1、新建项目并且运行2、易错点&#xff1a;可能运行成功得到UI界面但是会报错&#xff08;原因是使用了中文路径&#xff09; 一、下载并安装QT5 1、下载安装包 进入下载网址 Windo…

链表习题-力扣oj (附加思路版)

LCR 140. 训练计划 IIhttps://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号&#xff0c;请查找并返回倒数第 cnt 个训练项目编号。 思路&#xff1a;双指针&#xff0c;快指针先走cnt…

RabbitMQ队列

RabbitMQ队列 1、死信的概念 ​ 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说,producer将消息投递到broker或者直接到queue里了&#xff0c;consumer 从 queue取出消息进行消…

基于redis实现用户登陆

因为session有数据共享问题&#xff0c;不同tomcat服务器中的session不能共享&#xff0c;之后负载均衡就无法实现。所以我们用redis代替session。redis可以被多个tomcat服务器共享&#xff0c;redis基于内存。 之前的session可以看做登陆凭证&#xff0c;本次登陆凭证由sessi…

C语言指针总结(完结篇)

前言 这篇博客终于迎来了指针博客的大结局&#xff0c;本篇主要分析习题来回顾之前的指针总结的知识点&#xff0c;这篇博客的题有点绕&#xff0c;哈哈算是经典了 个人主页&#xff1a;小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1. sizeof和strlen的对比 1.1 …

TikTok矩阵获客软件的核心源代码是什么?

随着互联网的不断发展&#xff0c;社交媒体已成为企业获客的重要渠道之一&#xff0c;在众多的社交媒体平台中&#xff0c;TikTok凭借其庞大的用户群体和活跃的社交氛围&#xff0c;成为了众多企业竞相争夺的营销高地。 在这样的背景下&#xff0c;TikTok矩阵获客软件应运而生…

Linux Ubuntu部署SVN服务端结合内网穿透实现客户端公网访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

RISC-V架构学习资料整理

1、韦东山——D1S哪吒开发板的裸机代码仓库 https://github.com/bigmagic123/d1-nezha-baremeta 2、melis系统移植到D1S https://blog.51cto.com/u_13800193/6268813 3、韦东山的gitee仓库 https://gitee.com/weidongshan 4、D1S编译工具链下载 https://github.com/Tina-Linux/…

Tomcat安装步骤及详细配置教程(2022最新版)

网上的tomcat安装及配置教程一大堆&#xff0c;但是好多都过时了&#xff0c;根本不适用现在的版本&#xff0c;今天凯歌整理一篇Tomcat安装步骤及详细配置教程&#xff0c;2022年最新版~ Tomcat安装及配置教程主要分为四步&#xff1a; 步骤一&#xff1a;首先确认自己是否已…

学习Java的第一天

一、Java简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发&#xff0c;并在 1995 年正式推出。 后来 Sun 公司被 Oracle &#xff08;甲骨文&#xff09;公司收购&#xff0c;Jav…

nvm安装和使用保姆级教程(详细)

一、 nvm是什么 &#xff1a; nvm全英文也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和npm都是node.js版本管理工具&#xff0c;为了解决node.js各种版本存在不兼容现象可以通过它可以安装和切换不同版本的node.js。 二、卸载之前安装的node: …

java核心面试题汇总

文章目录 1. Java1.1. TCP三次握手/四次挥手1.2 HashMap底层原理1.3 Java常见IO模型1.4 线程与线程池工作原理1.5 讲一讲ThreadLocal、Synchronized、volatile底层原理1.6 了解AQS底层原理吗 2. MySQL2.1 MySQL索引为何不采用红黑树&#xff0c;而选择B树2.2 MySQL索引为何不采…

python基础第二天

世界杯小组赛成绩 注意&#xff1a; 1.循环 1.1while 1.2for 1.3 range 1.4 while else while 循环正常执行完才能执行else语句

【学习】torch.nn.CrossEntropyLoss交叉熵损失函数

交叉熵损失函数torch.nn.CrossEntropyLoss 交叉熵主要是用来判定实际的输出与期望的输出的接近程度&#xff0c;为什么这么说呢&#xff0c;举个例子&#xff1a; 在做分类的训练的时候&#xff0c;如果一个样本属于第K类&#xff0c;那么这个类别所对应的输出节点的输出值应…

计讯物联环保数采仪TS910全力打造绿色宜居生态环境

植树造林自古以来就有调节气候、涵养水源、减轻大气污染的益处。如今&#xff0c;随着科技的迅速发展&#xff0c;我们除了能够以植树造林来改善生活环境&#xff0c;保持生态系统&#xff0c;还能通过物联网、大数据、云计算、边缘计算、人工智能等新一代信息技术集成应用于监…