当前位置: 首页 > news >正文

Golang:使用DuckDB查询Parquet文件数据

本文介绍DuckDB查询Parquet文件的典型应用场景,掌握DuckDB会让你的产品分析能力更强,相反系统运营成本相对较低。为了示例完整,我也提供了如何使用Python导出MongoDB数据。

Apache Parquet文件格式在存储和传输大型数据集方面变得非常流行。最近遇到一个典型应用场景,在MongoDB中存储大量结构化数据的成本过高。相反,我们将这些数据以Parquet格式存储在S3中。为了提供偶尔的查询,我们下载S3文件并使用DuckDB加载/查询。

在这里插入图片描述

导出MongoDB数据

将 MongoDB 中的数据导入为 Parquet 格式的步骤及相应的代码示例(使用 Python),主要包括三个步骤:

  1. 从 MongoDB 中读取数据。
  2. 将读取的数据存储为 DataFrame 格式(使用 pandas)。
  3. 使用 pyarrow 将 DataFrame 转换为 Parquet 格式。
import pymongo
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq# 连接 MongoDB
def connect_to_mongodb(host='localhost', port=27017, db_name='your_db_name', collection_name='your_collection_name'):client = pymongo.MongoClient(host, port)db = client[db_name]collection = db[collection_name]return collection# 从 MongoDB 读取数据
def read_from_mongodb(collection):data = list(collection.find())df = pd.DataFrame(data)return df# 将 DataFrame 转换为 Parquet 并保存
def convert_to_parquet(df, output_path='output.parquet'):table = pa.Table.from_pandas(df)pq.write_table(table, output_path)if __name__ == "__main__":# 连接 MongoDBcollection = connect_to_mongodb(db_name='test_db', collection_name='test_collection')# 从 MongoDB 读取数据df = read_from_mongodb(collection)# 将数据存储为 Parquet 格式convert_to_parquet(df, output_path='mongodb_data.parquet')

注意:

  1. 首先,确保已经安装所需的 Python 库:

    pip install pymongo pandas pyarrow
    
  2. 替换代码中的 db_namecollection_name 为你实际的 MongoDB 数据库和集合名称。

  3. 运行代码,将从 MongoDB 中读取数据,并将其存储为 Parquet 格式的文件,文件名为 mongodb_data.parquet

Go 查询parquet文件

Parquet 是一种列式存储格式,专为高效存储和处理大规模数据而设计。它支持多种数据类型,能对数据进行压缩和编码,以减少存储空间并提高读写性能。Parquet 具有良好的可扩展性和兼容性,可与 Hadoop、Spark 等大数据处理框架无缝集成,广泛应用于数据仓库、数据分析等领域,能有效提升数据处理的效率和灵活性。
在这里插入图片描述

下面是用Golang编写的代码。

package mainimport ("database/sql""fmt""log"_ "github.com/marcboeker/go-duckdb"
)func main() {db := OpenDuckDB()rows, err := db.Query("SELECT id, first_name, family_name from read_parquet('employee.parquet');")if err != nil {panic(fmt.Sprintf("failed to run select query against parquet file %v", err))}type Employee struct {Id         string `db:"id"`FirstName  string `db:"first_name"`FamilyName string `db:"family_name"`}var row Employeedefer rows.Close()for rows.Next() {err := rows.Scan(&row.Id, &row.FirstName, &row.FamilyName)if err != nil {log.Fatal(err)}log.Printf("%v", row)}err = rows.Err()if err != nil {log.Fatal(err)}
}func OpenDuckDB() (db *sql.DB) {db, err := sql.Open("duckdb", "")if err != nil {panic(fmt.Sprintf("failed to open parquet file using duckdb %v", err))}_, err = db.Exec("INSTALL parquet;")if err != nil {panic(fmt.Sprintf("failed to INSTALL parquet extension. %v", err))}_, err = db.Exec("LOAD parquet;")if err != nil {panic(fmt.Sprintf("failed to LOAD parquet extension. %v", err))}return
}

虽然Parquet文件主要用于将数据从事务性数据库传输到数据仓库,但它也可以用于直接在Parquet文件之上构建查询和分析。

相关文章:

Golang:使用DuckDB查询Parquet文件数据

本文介绍DuckDB查询Parquet文件的典型应用场景,掌握DuckDB会让你的产品分析能力更强,相反系统运营成本相对较低。为了示例完整,我也提供了如何使用Python导出MongoDB数据。 Apache Parquet文件格式在存储和传输大型数据集方面变得非常流行。最…...

Moretl FileSync增量文件采集工具

永久免费: <下载> <使用说明> 我们希望Moretl FileSync是一款通用性很好的文件日志采集工具,解决工厂环境下,通过共享目录采集文件,SMB协议存在的安全性,兼容性的问题. 同时,我们发现工厂设备日志一般为增量,为方便MES,QMS等后端系统直接使用数据,我们推出了增量采…...

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅&#xff08;Pub/Sub&#xff09;消息系统&#xff0c;最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点&#xff0c;提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力&#xff0c;适用于大规模分布式系…...

linux 扩容

tmpfs tmpfs 82M 0 82M 0% /run/user/1002 tmpfs tmpfs 82M 0 82M 0% /run/user/0 [输入命令]# fdisk -lu Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 512 bytes Sector size (logi…...

数据表中的数据查询

文章目录 一、概述二、简单查询1.列出表中所有字段2.“*”符号表示所有字段3.查询指定字段数据4.DISTINCT查询 三、IN查询四、BETWEEN ADN查询1.符合范围的数据记录查询2.不符合范围的数据记录查询 五、LIKE模糊查询六、对查询结果排序七、简单分组查询1.统计数量2.统计计算平均…...

深入了解 Java split() 方法:分割字符串的利器

Java 提供的 split() 方法是 String 类中一个常用的工具&#xff0c;它可以将一个字符串根据指定的分隔符切割成多个子字符串&#xff0c;并以字符串数组的形式返回。这个方法常用于字符串的处理、数据解析等场景。本文将详细介绍 Java 中 split() 方法的使用方式&#xff0c;并…...

Ubuntu 安装 docker 配置环境及其常用命令

Docker 安装与配置指南 本文介绍如何在 Ubuntu 系统上安装 Docker&#xff0c;解决权限问题&#xff0c;配置 Docker Compose&#xff0c;代理端口转发&#xff0c;容器内部代理问题等并进行相关的优化设置。参考官方文档&#xff1a;Docker 官方安装指南 一、安装 Docker 1…...

Android Studio安装配置

一、注意事项 想做安卓app和开发板通信&#xff0c;踩了大坑&#xff0c;Android 开发不是下载了就能直接开发的&#xff0c;对于新手需要注意的如下&#xff1a; 1、Android Studio版本&#xff0c;根据自己的Android Studio版本对应决定了你所兼容的AGP&#xff08;Android…...

leetcode 面试经典 150 题:有效的括号

链接有效的括号题序号20题型字符串解法栈难度简单熟练度✅✅✅ 题目 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须…...

C语言 指针_野指针 指针运算

野指针&#xff1a; 概念&#xff1a;野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#xff09; 指针非法访问&#xff1a; int main() {int* p;//p没有初始化&#xff0c;就意味着没有明确的指向//一个局部变量不初始化&#xff0c;放…...

【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发之常见布局

目录 1 -> 自适应布局 1.1 -> 线性布局 1.1.1 -> 线性布局的排列 1.1.2 -> 自适应拉伸 1.1.3 -> 自适应缩放 1.1.4 -> 定位能力 1.1.5 -> 自适应延伸 1.2 -> 层叠布局 1.2.1 -> 对齐方式 1.2.2 -> Z序控制 1.3 -> 弹性布局 1.3.1…...

java基础学习——jdbc基础知识详细介绍

引言 数据的存储 我们在开发 java 程序时&#xff0c;数据都是存储在内存中的&#xff0c;属于临时存储&#xff0c;当程序停止或重启时&#xff0c;内存中的数据就会丢失&#xff0c;我们为了解决数据的长期存储问题&#xff0c;有以下解决方案&#xff1a; 通过 IO流书记&…...

第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

第十五届的题目在规定时间内做出了前5道&#xff0c;还有2道找时间再磨一磨。现在把做的一些思路总结如下&#xff1a; 题1&#xff1a;握手问题 问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有 50人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例…...

基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

2K320Hz显示器哪个好?

2K320Hz显示器哪个好&#xff1f;320Hz这种高刷新率的显示器确实很少见&#xff0c;那究竟哪个牌子哪个型号更适合你呢&#xff1f; 1.HKC G27H4Pro - 2K320Hz显示器哪个好 外观设计 - HKC G27H4Pro 2K320Hz显示器 三面微边框超震撼&#xff1a;采用三面微边框设计&#xff0…...

八股学习 微服务篇

微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件&#xff1a; Eureka/Nacos:注册中心&#xff1b;Ribbon:负载均衡&#xff1b;Feign:远程调用&#xff1b;Hystrix/Sentinel:服…...

C# 中 readonly 与 const 的使用

总目录 前言 在C#编程中&#xff0c;readonly 和 const 是两个用于定义不可变数据的关键字。它们都旨在创建那些一旦赋值后就不能再改变的字段或变量。尽管这两个关键字看起来相似&#xff0c;但它们有着不同的特性和适用场景。本文将深入探讨 readonly 和 const 的区别&#…...

Spring Boot Starter介绍

前言 大概10来年以前&#xff0c;当时springboot刚刚出现并没有流行&#xff0c;当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置&#xff0c;其中配置了很多项目中需要用到的Be…...

Kafak 单例生产者实现-C#操作

前面写了一篇入门操作的文章,因为工作需要,简单修改了下如何实现单例生产者。 Kafka入门-C#操作_c# kafka-CSDN博客文章浏览阅读1.6k次,点赞20次,收藏9次。2).报错:“kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state…...

软件开发学习路线——roadmap

推荐软件学习路线网站&#xff1a;https://roadmap.sh/get-started 有有关前端后端开发的学习路径&#xff0c;也有AI&#xff0c;移动开发&#xff0c;管理相关的学习路径 会有相应的词条路径&#xff0c;深入学习 右上角可以设置学习任务的完成情况...

移动端VR处理器和传统显卡的不同

骁龙 XR 系列芯片 更多地依赖 AI 技术 来优化渲染过程&#xff0c;而传统的 GPU 渲染 则倾向于在低画质下运行以减少负载。这种设计是为了在有限的硬件资源下&#xff08;如移动端 XR 设备&#xff09;实现高性能和低功耗的平衡。以下是具体的分析&#xff1a; 1. AI 驱动的渲染…...

Jenkins下载 Maven、Allure 插件并且配置环境

文章目录 Jenkins在插件中心下载 maven、allure插件maven插件下载allure插件下载 配置maven、allure 往期推荐&#xff1a; 最新! 在 Linux上搭建Jenkins环境! Jenkins邮件通知的详细配置含邮件通知模板&#xff01; Jenkin配置企业微信通知 Jenkins在插件中心下载 maven、…...

C# OpenCV机器视觉:连通域分割

在一个阳光明媚得有些 “嚣张” 的午后&#xff0c;阿强像只好奇的小松鼠&#xff0c;一头扎进了他那乱得像被打劫过的实验室。这实验室里&#xff0c;各种电路板、奇形怪状的传感器和缠成一团的电线肆意横陈&#xff0c;仿佛在诉说着主人平日里为科研疯狂的 “战斗” 痕迹。阿…...

【嵌入式】总结——Linux驱动开发(三)

鸽了半年&#xff0c;几乎全忘了&#xff0c;幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的&#xff0c;本篇与前两篇一样&#xff0c;重点在于使用、快速体验&#xff0c;uboot、linux、根文件系统不作深入理解&#xff0c;能用就行。 重新梳理一下脉络&#xff0c;本…...

python操作mysql

前言 在 Python3 中&#xff0c;我们可以使用mysqlclient或者pymysql三方库来接入 MySQL 数据库并实现数据持久化操作。二者的用法完全相同&#xff0c;只是导入的模块名不一样。我们推荐大家使用纯 Python 的三方库pymysql&#xff0c;因为它更容易安装成功。下面我们仍然以之…...

OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯

目录 简述 什么是高通滤波&#xff1f; 高通滤波的概念 应用场景 索贝尔算子 算子公式 实现代码 特点 沙尔算子 算子公式 实现代码 特点 拉普拉斯算子 算子公式 实现代码 特点 高通滤波器的对比与应用场景 相关阅读 OpenCV&#xff1a;图像滤波、卷积与卷积核…...

游戏设备升级怎么选?RTX4070独显,ToDesk云电脑更具性价比

过新年、添喜气&#xff01;正逢节期来临不知道各位是否都跟小编一样在考虑购置生活中的各样所需呐&#xff1f; 25年可谓是3A游戏大作之年&#xff0c;例如《GTA6》《文明7》《死亡搁浅2》《刺客信条&#xff1a;影》下半年落地的《塞尔达传说&#xff1a;新篇章》《生化危机9…...

【useLayoutEffect Hook】在浏览器完成布局和绘制之前执行副作用

目录 前言语法useLayoutEffect 对比 useEffect&#xff1a;示例 前言 useLayoutEffect 是 React 中的一个 Hook&#xff0c; 类似于 useEffect&#xff0c;但有一个关键的区别&#xff1a;它会在所有的 DOM 变更之后同步调用 effect。这意味着它可以读取 DOM 布局并同步重新渲…...

Llama 3:开源大模型的里程碑式突破

标题&#xff1a;Llama 3&#xff1a;开源大模型的里程碑式突破 文章信息摘要&#xff1a; Meta通过Llama 3展现了开源LLM的重大突破&#xff1a;采用超大规模训练数据和多阶段训练方法&#xff08;SFT、rejection sampling、PPO和DPO&#xff09;&#xff0c;突破了传统的Chi…...

Spring 框架基础:IOC 与 AOP 原理剖析及面试要点

在上一篇中&#xff0c;我们深入探讨了 Java 反射机制&#xff0c;了解了它在运行时动态操作类和对象的强大能力。而今天&#xff0c;我们将进入 Spring 框架的世界。Spring 框架作为 Java 企业级开发中最流行的框架之一&#xff0c;极大地简化了企业级应用的开发过程。对于春招…...

《开源与合作:驱动鸿蒙Next系统中人工智能技术创新发展的双引擎》

在当今科技飞速发展的时代&#xff0c;鸿蒙Next系统作为一款具有创新性和前瞻性的操作系统&#xff0c;为人工智能技术的发展提供了广阔的舞台。而开源和合作则是推动鸿蒙Next系统中人工智能技术创新和发展的两大关键引擎。 开源&#xff1a;创新的源泉 代码共享与知识传播&am…...

Redis使用基础

1 redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务 ! 是完全开源的&#xff0c;遵守 BSD 协议&#xff0c;是一个高性能的 key-value 数据库。 使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并…...

React和Vue有什么区别,如何选择?

React和Vue有什么区别&#xff0c;如何选择&#xff1f; React 和 Vue 是当前最受欢迎的前端框架之一&#xff0c;两者在开发者中都有极高的声誉。它们都旨在帮助开发人员构建用户界面&#xff0c;但在实现方式和适用场景上有所不同。如果你正考虑在项目中选择 React 或 Vue&a…...

C++|开源日志库log4cpp和glog

文章目录 log4cpp 和 glog对比1. **功能对比**2. **易用性和配置**3. **性能**4. **线程安全**5. **日志输出**6. **功能扩展**7. **适用场景**8. **总结** 其它开源C日志库1. **spdlog**2. **easylogging**3. **Boost.Log**4. **loguru**5. **Poco Logging**6. **Qt Logging (…...

安卓程序作为web服务端的技术实现(三):AndServer作为服务

安卓程序作为web服务端的技术实现&#xff1a;AndServer 实现登录权限拦截-CSDN博客 安卓程序作为web服务端的技术实现&#xff08;二&#xff09;&#xff1a;Room 实现数据存储-CSDN博客 经过两次捣鼓 AndServer已经能正常访问了 但是发现一个问题 就是当我app退出时 AndSe…...

数据结构(Java)——二叉树

1.概念 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常被称为左子节点和右子节点。二叉树可以是空的&#xff08;即没有节点&#xff09;&#xff0c;或者由一个根节点以及零个或多个左子树和右子树组成&#xff0c;其中左子树和右子树也分…...

深度学习系列76:流式tts的一个简单实现

1. 概述 使用queue&#xff0c;producer不断向queue中添加audio&#xff0c;然后consumer不断从queue中消费audio。 下面的样例使用melo来生成语音&#xff0c;需要先下载melo.tts。模型在https://myshell-public-repo-hosting.s3.amazonaws.com/openvoice/basespeakers/ZH/ch…...

数据结构(三) 排序/并查集/图

目录 1. 排序 2.并查集 3.图 1.排序: 1.1 概念: 排序就是将数据按照某种规则进行排列, 具有某种顺序. 分为内排序和外排序. 内排序就是: 将数据放在内存中的排序; 外排序是: 数据太多无法在内存中排序的. 1.2 插入排序: 插入排序包含: 直接插入排序和希尔排序. (1) 直接插入…...

WPA Supplicant 技术详解

目录 前言 1. 简介 2. 源码获取 3. 代码架构 3.1 模块结构 3.2. 主要文件和目录 3.3. 顶层模块 3.4 模块之间的关系 4. 工作流程简要描述 启动 加载配置 初始化 认证 数据传输 5. 编译与安装 5.1 编译 5.1.1 libnl库与openssl库准备 5.1.2 修改配置文件 5.…...

Avalonia UI MVVM DataTemplate里绑定Command

Avalonia 模板里面绑定ViewModel跟WPF写法有些不同。需要单独绑定Command. WPF里面可以直接按照下面的方法绑定DataContext. <Button Content"Button" Command"{Binding DataContext.ClickCommand, RelativeSource{RelativeSource AncestorType{x:Type User…...

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下&#xff1a; 拼写错误或路径错误&#xff1a;确保你输入的目录名称正确。目录名称是区分大小写的&#xff0c;因此请确保使用正确的大小写。正确的目录名…...

【探索 Kali Linux】渗透测试与网络安全的终极操作系统

探索 Kali Linux&#xff1a;渗透测试与网络安全的终极操作系统 在网络安全领域&#xff0c;Kali Linux 无疑是最受欢迎的操作系统之一。无论是专业的渗透测试人员、安全研究人员&#xff0c;还是对网络安全感兴趣的初学者&#xff0c;Kali Linux 都提供了强大的工具和灵活的环…...

《SwinIR:使用Swin-Transformer图像恢复》学习笔记

paper&#xff1a;2108.10257 GitHub&#xff1a;GitHub - JingyunLiang/SwinIR&#xff1a; SwinIR&#xff1a; 使用 Swin Transformer 进行图像修复 &#xff08;官方仓库&#xff09; 目录 摘要 1、Introduction 2、Related Work 2.1 图像修复 2.2 视觉Transformer…...

AR智慧点巡检系统探究和技术方案设计

一、项目背景 随着工业生产规模的不断扩大和设备复杂度的提升&#xff0c;传统的人工点巡检方式效率低下、易出错&#xff0c;难以满足现代化企业对设备运行可靠性和安全性的要求。AR&#xff08;增强现实&#xff09;技术的发展为点巡检工作带来了新的解决方案&#xff0c;通…...

电路研究9.2——合宙Air780EP使用AT指令

这里正式研究AT指令的学习了&#xff0c;之前只是接触的AT指令&#xff0c;这里则是深入分析AT指令了。 软件的开发方式&#xff1a; AT&#xff1a;MCU 做主控&#xff0c;MCU 发 AT 命令给模组的开发方式&#xff0c;模组仅提供标准的 AT 固件&#xff0c; 所有的业务控制逻辑…...

OpenCV相机标定与3D重建(62)根据两个投影矩阵和对应的图像点来计算3D空间中点的坐标函数triangulatePoints()的使用

加粗样式- 操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 这个函数通过使用立体相机对3维点的观测&#xff0c;重建这些点的三维坐标&#xff08;以齐次坐标表示&#xff09;。 cv::triangula…...

基于ollama,langchain,springboot从零搭建知识库四【设计通用rag系统】

需求&#xff1a; 1&#xff1a;可以自定义管理大模型&#xff0c;可自行选择ollama&#xff0c;openai&#xff0c;千问等大模型 2&#xff1a;自定义向量数据库&#xff0c;支持pgvector&#xff0c;elasticsearch&#xff0c;milvus&#xff08;这三个目前比较常用&#xff…...

【Go面试】工作经验篇 (持续整合)

这里写目录标题 什么是逃逸分析服务端怎么接受客户端上传的文件说一下对gin框架的理解gin有哪些常用中间件gin怎么用swagger写接口文档nginx一般是用来做什么如果调用方法经常超时怎么办gin中怎么和mysql通信从mysql调数据到redis,如何同步延时双删redis ,mysql都不存在用户请求…...

“腾讯、钉钉、飞书” 会议开源平替,免费功能强大

在数字化时代&#xff0c;远程办公和线上协作越来越火。然而&#xff0c;市面上的视频会议工具要么贵得离谱&#xff0c;要么功能受限&#xff0c;甚至还有些在数据安全和隐私保护上让人不放心。 今天开源君给大家安利一个超棒的开源项目 - Jitsi Meet&#xff0c;这可是我在网…...

怎样使用树莓派自己搭建一套ADS-B信号接收系统

0 我们知道&#xff0c;ADS-B全称广播式自动相关监视系统&#xff0c;其实就是飞机发出的广播信号&#xff0c;用明码来对外发送自己的位置、高度、速度、航向等信息&#xff0c;是公开信息。连续接收到一架飞机发出的ADS-B信息后&#xff0c;可以通过其坐标点来描绘出飞机的航…...