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

news2024/10/25 14:29:26

本文介绍了 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.coloradmin.cn/o/1497516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何排查合并问题——《OceanBase诊断系列》之七

1. 前言 OceanBase数据库的存储引擎以 LSM-Tree 架构为基础&#xff0c;区分静态基线数据&#xff08;存储在只读SSTable&#xff09;和动态增量数据&#xff08;存储在可读写MemTable&#xff09;。其中 SSTable 是只读的&#xff0c;一旦生成就不再被修改&#xff0c;存储于…

每日OJ题_链表①_力扣2. 两数相加

目录 力扣2. 两数相加 解析代码 力扣2. 两数相加 2. 两数相加 难度 中等 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个…

MyBatis-Flex学习总结

写在前面的话 MyBatis-Flex 是一个优雅的 MyBatis 增强框架&#xff0c;它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库&#xff0c;其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时&#xff0c;减少出错的可能性…

VPN应用场景典型案例-站点到站点组网应用

组网需求 站点到站点IPSEC隧道也是LAN -to -LAN IPSec描述的是两个局域网之间建立IPSec隧道的概念,建立站到站IPSec隧道时,两个专用网络之间跨越一个公用网络,这样就可以实现私有网络A:192.168.0.0/24到私有网络B:192.168.1.0/24之间的安全通信。以下是该典型环境的组网图…

【MOMO_Tips】批量将word转换为PDF格式

批量将word转换为PDF格式 1.打开文件–>选项–>自定义功能区–>开发工具–>确定 2.点开开发工具&#xff0c;选择第一个visual basic 3.进入页面后找到插入–>模块&#xff0c;就可以看到这样的画面之后将下列vba代码复制粘贴到模块中 Sub ConvertWordsToPd…

MySQL 存储过程(超详细)

一、什么是存储过程&#xff1f; 存储过程可称为过程化SQL语言&#xff0c;是在普通SQL语句的基础上增加了编程语言的特点&#xff0c;把数据操作语句(DML)和查询语句(DQL)组织在过程化代码中&#xff0c;通过逻辑判断、循环等操作实现复杂计算的程序语言。换句话说&#xff0c…

私域做不下去的三大因素

私域运营是近年来的一大热门话题&#xff0c;从线下门店到日常外卖、线上购物&#xff0c;几乎所有的企业都在借助微信等社交媒体平台进行推广。然而&#xff0c;据统计&#xff0c;近90%的私域运营最后都不了了之。 原因1&#xff1a;在于企业对私域的认知不足&#xff0c;营…

【重温设计模式】迭代器模式及其Java示例

迭代器模式的介绍 在编程领域&#xff0c;迭代器模式是一种常见的设计模式&#xff0c;它提供了一种方法&#xff0c;使得我们可以顺序访问一个集合对象中的各个元素&#xff0c;而又无需暴露该对象的内部表示。你可以把它想象成一本书&#xff0c;你不需要知道这本书是怎么印…

C语言学习--练习2

目录 1.排序数组 2.多数元素 3.存在重复元素 4.最大间距 5.按奇偶排序数组 6.最小时间差 1.排序数组 /*** Note: The returned array must be malloced, assume caller calls free().*/ int cmp(const void*a,const void*b){return *(int*)a-*(int*)b; } int* sortArray(i…

常见的几种echarts类型

一&#xff1a;折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

MedSAM 项目排坑记录

MedSAM 项目排坑记录 任务排坑过程配置python环境测试构建docker模型训练数据预处理 单GPU训练最后推理 任务 做一个课程大作业&#xff0c;需要进行CVPR2024年医疗影像分割赛题的打榜&#xff08;CVPR 2024: SEGMENT ANYTHING IN MEDICAL IMAGES ON LAPTOP&#xff09;。看到…

实现消息队列(Kafka、ActiveMQ、RabbitMQ和RocketMQ)高可用

概述 单机没有高可用可言&#xff0c;高可用都对集群来说的 要保证消息队列系统&#xff08;如Kafka、ActiveMQ、RabbitMQ和RocketMQ&#xff09;的高可用性&#xff0c;可以采取以下一些通用的措施&#xff1a; 集群部署&#xff1a;将消息队列系统部署为集群&#xff0c;包…

音视频学习笔记——TCP网络原理

✊✊✊&#x1f308;大家好&#xff01;本篇文章主要记录自己在进行音视频学习中&#xff0c;整理的包括可靠传输、流量控制、拥塞控制等部分TCP网络原理相关的内容重点&#x1f607;。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;…

一个平台满足你对测试工具的所有需求

背景 目前&#xff0c;测试人员普遍使用的测试工具有Postman、JMeter等&#xff0c;但这些工具都存在一定的局限性。例如&#xff0c;Postman缺少对API性能测试方面的支持&#xff0c;而JMeter则缺乏一个整合测试报告、测试脚本的统一管理系统以及UI测试功能。 RunnerGo是什么…

常用的几种concrt140.dll丢失的解决方法,关于concrt140.dll修复教程

concrt140.dll是Microsoft Visual Studio 2015&#xff08;或更高版本&#xff09;中包含的一个动态链接库文件&#xff0c;它是C运行时库的一部分&#xff0c;主要用于支持并行计算、并发处理等功能。当你的应用程序需要执行多线程操作或者使用了C的并发库时&#xff0c;就会依…

windows下编译boost1.84.0库

boost系列文章目录 文章目录 boost系列文章目录前言一、boost编译二、boost使用三 、参考 前言 Boost简介 官方网址 Boost提供免费的同行评审的可移植C源代码库。 我们强调与C标准库配合良好的库。Boost库旨在广泛使用&#xff0c;并可在广泛的应用程序中使用。Boost许可证鼓…

AI预测福彩3D第4弹【2024年3月7日预测】

经过前面几次的预测&#xff0c;7码命中率已经有了明显提高&#xff0c;今天&#xff0c;继续咱们的预测。 老规矩&#xff0c;先给各位展示下百十个的神经网络蒙特卡洛统计频次图及部分号码的冷温热走势图。 最终&#xff0c;经过研判分析&#xff0c;2024年3月7日福彩3D的七…

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

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

tiktok矩阵引流系统开发常用源代码!

在数字营销领域&#xff0c;TikTok已成为一个不可忽视的平台&#xff0c;随着其用户基数的不断增长&#xff0c;如何利用TikTok进行有效的引流成为了许多企业和营销人员关注的焦点。 为了实现这一目标&#xff0c;许多开发者开始构建TikTok矩阵引流系统&#xff0c;这些系统通…

AI论文速读 | 【综述】城市计算中跨域数据融合的深度学习:分类、进展和展望

题目&#xff1a;Deep Learning for Cross-Domain Data Fusion in Urban Computing: Taxonomy, Advances, and Outlook 作者&#xff1a;Xingchen Zou, Yibo Yan, Xixuan Hao, Yuehong Hu, Haomin Wen&#xff08;温皓珉&#xff09;, Erdong Liu, Junbo Zhang&#xff08;张钧…