Databend 如何利用 GPT-4 进行质量保证

背景

在数据库行业,质量是核心要素。

Databend 的应用场景广泛,特别是在金融相关领域,其查询结果的准确性对用户至关重要。因此,在快速迭代的过程中,如何确保产品质量,成为我们面临的重大挑战。

随着 Databend 开源社区的快速发展,新功能的持续增加和现有功能的优化提出了新的测试挑战。我们致力于在每次代码更新中实施严格的测试,确保稳定性并防止任何潜在问题。

Databend  的测试方法

为了确保软件的稳定性和可靠性,Databend 的测试方法覆盖从代码级到系统级的各个方面。

Unit Tests

单元测试作为测试的基石,着重验证代码的基本功能和逻辑。我们在每次代码提交前自动运行单元测试,确保及时捕捉任何潜在问题。

SQL Logic Tests

Databend 引入了大量的 DuckDB、CockroachDB 和 PostgreSQL 的 SQL 逻辑测试(感谢他们)。这些测试覆盖了广泛的 SQL 场景,帮助我们发现并修复潜在问题,保障 SQL 查询的精确性。

Compatible Tests

兼容性测试确保新版本与旧版本的向后兼容,帮助用户平稳过渡到 Databend 的更新版本,保障业务的连续性和稳定性。

Perf Tests

Databend 使用 ClickBench hits 数据集和 TPCH-SF100 作为性能指标,通过这些测试来确保每个版本的性能都符合预期。

Longrun Tests

Longrun 测试专注于数据写入、更新和合并等操作的长期效果,通过监测 CPU 和内存的稳定性,确保 Databend 的长期运行稳定性和可靠性。

除 Longrun Tests 外,这些测试在每个 GitHub Pull Request 提交时都会执行,以保证任何更改都符合我们的质量标准。

借助 GPT-4 生成测试模型

尽管已经采用了多种测试方法,Databend 团队始终在寻求创新。近期,我们引入了 GPT-4 来进一步提升测试流程。

双缝探测模型

针对涉及核心路径的修改,我们采用双缝探测模型进行验证。这种方法通过比较当前 PR 版本与主分支(main)版本的结果集来进行验证。如果两者结果一致,则可视为无大碍。但这些验证的 SQL 语句的质量至关重要,这正是我们利用 GPT-4 生成的部分。首先,我们指导 GPT-4 根据需求推理出随机数据生成方式,如 setup.sql 所示。然后,基于这些数据,GPT-4 进一步生成用于校验的 SQL 语句,例如 check.sql。这些验证 SQL 语句可以根据不同场景进行调整。接下来,我们在这两个版本的 Databend 上运行这些 SQL 语句,以验证结果集的一致性。

结果集正确性模型

为了确保 Databend 的结果集的正确性,我们选择了 Snowflake 作为参考。这一方法包括三个步骤:

  • setup.sql: 在 Databend 和 Snowflake 上分别构建表并导入随机数据集。
  • action.sql:在 Databend 和 Snowflake 上分别执行数据变更操作,如 Replace/Merge 等。
  • check.sql: 在 Databend 和 Snowflake 上分别执行并验证结果。

这些 SQL 语句都是由 GPT-4 根据 setup.sql 的数据模式生成的,更加复杂和随机,以便更有效地探测潜在的问题。

总结

Databend 团队通过引入 GPT-4,为测试流程带来了显著的进步。我们已在 Databend Wizard 项目中发布了更多测试集:

GitHub - datafuselabs/wizard: A GPT4 powered tool for detecting bugs in Databend

借助这些 GPT-4 生成的测试模型,Databend 的质量和稳定性又前进了一大步,科技是第一生产力。 

References

[1] datafuselabs/wizard
[2] Databend
[3] Snowflake

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

👨‍💻‍ Databend Cloud:https://databend.cn

📖 Databend 文档:Databend - The Future of Cloud Data Analytics. | Databend

💻 Wechat:Databend

✨ GitHub:GitHub - datafuselabs/databend: Modern alternative to Snowflake. Cost-effective and simple for massive-scale analytics. Cloud: https://databend.com

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

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

相关文章

leaflet:经纬度坐标转为地址,点击鼠标显示地址信息(137)

第137个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中将经纬度坐标转化为地址,点击鼠标显示某地的地址信息 。主要利用mapbox的api将坐标转化为地址,然后在固定的位置显示出来。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示…

Springboot 项目关于版本升级到 3.x ,JDK升级到17的相关问题

由于spring 停止对2.x 版本的维护,以及 jdk 频繁发布等客观因素,现需要对已有springboot 工程做一次全面升级;已因对市面上第三方等依赖库的兼容问题; 现有工程使用哥技术栈是版本: freemarker :2.3.32 spr…

Segment Anything--SAM框架(二)

文章目录 prologuepaper && codeImage encoderPrompt encoderLightweight mask decoderMaking the model ambiguity-aware prologue 没什么事,写一写SAM的paper中关于模型框架的部分和实际代码部分。 paper && code SAM有三个组件,如图…

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 9 章:种子词提示

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 9 章:种子词提示 种子词提示是一种通过提供特定种子词或短语来控制 ChatGPT 输出的技术。 种子词提示符的提示公式是种子词或短语,然后是指令 “请根据以下种子词生成文本”。 示…

【PTA题目】7-31 前世档案 分数 20

7-31 前世档案 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 网络世界中时常会遇到这类滑稽的算命小程序,实现原理很简单,随便设计几个问题,根据玩家对每个问题的回答选择一条判断树中的路径(如下图所示&#xff09…

【若依系列】1.项目修改成自己包名并启动服务

项目下载地址: 分离版本 https://gitee.com/y_project/RuoYi-Vue 修改工具下载 https://gitee.com/lpf_project/common-tools 相关截图: 1.项目结构: 2.修改包名工具: 工具截图,根据对应提示自定义修改即可&#x…

【JS】检索树结构,并返回结果节点的路径与子节点

【JS】检索树结构,并返回结果节点的路径与子节点 需求代码效果展示 需求 一个树结构,需要添加条件检索功能,检索结果依然是一个树结构,包含所有的符合要求的节点,以及他们到根节点的路径,与他们的子节点 …

Spring Boot基础

文章目录 一、Spring Boot1. Spring的缺点2. Spring Boot 改变了什么3. Spring Boot项目搭建4. 热部署5. 依赖管理6. 代码生成器7. 日志8. 日期转换9. 接口文档10. 打包部署11. 自动装配 一、Spring Boot 1. Spring的缺点 在Spring Boot出现以前,使用Spring框架的…

二叉树OJ题之三

哈喽伙伴们,有一段时间没更新博客了,主要是这段时间要准备学校的期末考试,所以没有把部分时间分给博客,今天我们一起去接着看二叉树递归有关的OJ题,今天我们要学习的是 判断相同的树,力扣题目--100 &…

JSONArray添加JSONObject数据组装后,toString()发现值有{“$ref“:“$[0]“}乱码问题

出现这个问题是FastJson的循环引用造车的,可以手动设置取消FastJson的循环引用的检查。代码如下: JSONArray oaArr new JSONArray(); //取消JSON循环引用检查 String s JSON.toJSONString(oaArr, SerializerFeature.DisableCircularReferenceDetect)…

算法通关村第十四关|黄金挑战|数据流的中位数

数据流的中位数 原题:力扣295. 设计一种数据结构可以支持添加整数和返回中位数的操作。 之前写过找中间用两个堆,这道题就可以使用一个大顶堆和一个小顶堆。 大顶堆存储比较小的元素,小顶堆存储比较大的元素。 class MedianFinder {Prio…

quickapp_快应用_DOM节点

DOM $element获取某元素的宽高 $element $element是通用方法(提供给所有组件调用的方法) 获取指定 id 的组件 dom 对象,如果没有指定 id,则返回根组件 dom 对象用法。 this.$element(id名)获取某元素的宽高 const element this.$element(元素id名)…

龙芯loongarch64服务器编译安装pytorch

前言 PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序,它是一个基于Python的可续计算包。在通过龙芯开源仓库下载依赖包后,执行import torch后,发现其中安装的"pytorch"就无法正常使用,这里就演示下pytorch整个编译流程。 1、环境准…

supervisor杀死不掉程序的问题分析

项目场景: supervisor可以说是linux上大名鼎鼎的守护进程工具了,它的易用性在我所有用过的工具里算是排名前列的。但在使用过程中也不免会出一些问题,很多都是设置错误导致的。 问题描述 使用java启动一个jar,调用stop的时候jar…

推荐一款Excel快速加载SQL的插件,方便又好用

如果告诉你只需要双击一下,SQL数据库中存放在表里面的数据,就能加载到你的Excel中,你想不想要? 今天给大家推荐一款好用的Excel插件,安装简单,使用方便,是经常使用SQL数据库的不二。 这款插件…

Web开发学习HTTP协议、通过浏览器控制台学习HTTP协议。

文章目录 HTTP协议1.HTTP协议是什么?2.HTTP协议的特点3.什么是URL?4.通过浏览器控制台学习HTTP协议Request Headers请求数据格式说明Response Headers请求数据格式说明 5.HTTP工作原理 HTTP协议 1.HTTP协议是什么? HTTP协议是一种超文本传输协议&…

前端实现主题(深色模式)切换的几种方案

方案一:link 动态引入 通过改变link 标签的 href 属性实现动态修改样式(暂不推荐这种方案) 优点:实现了按需加载,提高了性能; 缺点:动态加载样式文件,可能会因为网络问题导致样式…

使用Scanner扫描器和if语句来判断QQ等级的活跃程度

一、主要特点 总体使用try包围起来,用到了Scanner扫描器,还用到了若干if语句。 二、运行代码 import java.util.Scanner; public class QQtest {public static void main(String[] args){try (Scanner scan new Scanner(System.in)) {System.out.pr…

torch 如何实现两点分布采样,100个样本中20个样本为1,80个为2

方法1 可以使用 PyTorch 中的 torch.distributions 模块实现两点分布采样。具体来说,可以使用 Categorical 分布将数字1和数字2的概率分别设为0.2和0.8,然后调用 sample() 方法进行采样。 下面是实现上述功能的代码示例: import torch # 创…

rename--统一的PRF

将ARF/PRF进行合并,合同之后的不见,称之为统一的PRF(Physical Register File);存储的是speculative的,以及正确的(retire)寄存器值;