数据库_duckdb_边缘计算与数据平台
数据库连接
一个处理Python数据库事务的特殊事物小组(special interest group, SIG)
https://peps.python.org/pep-0249/
DB-API 2.0协议
PEP 249 – Python Database API Specification v2.0
Python Database API 规范的 2.0 版本以及一组通用的可选扩展标
规范约定通过 connection 对象来访问数据库
Connection 方法 .close() .commit() .cursor() .rollback()
Cursor 对象 如果数据库并未直接提供游标的概念,则实现模块必须使用其他方式来模拟规范所需的“游标”。
主要是为了兼容 .fetch*() 方法的语义考虑
游标对象的方法(execute()、executemany()、fetchall()等)操作数据库,
实现插入、修改、删除等相关操作,并查询获取相关记录
数据库游标
游标是SQL 的一种数据访问机制-游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果
使用游标来检索SQL数据库中的数据,并保存查询的结果以供之后使用,
比如我们在日常过程中需要重复处理容易个结果集,我们就可以选择只加载一次结果集,创建一个游标并反复使用,这样就比多次创建结果集效率要高的多
生命周期
包含有五个阶段:声明游标、打开游标、读取游标数据、关闭游标、释放游标。
各个数据库
MySQL 游标只能用于存储过程和函数
SQLite
游标对象提供了fetchall()和fetchone()方法,
其中fetchall()方法获取所有数据,返回一个列表,
fetchone()方法获取其中一个结果,返回一个元组
游标和循环
交互式数据分析和“边缘”计算”
据专业人员现在在本地环境中使用R或Python库,例如dplyr或Pandas,以使用他们从数据库中检索的数据
pip install duckdb==0.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
convert a CSV file into a Parquet file
COPY (SELECT *
FROM read_csv('~/data/source.csv',AUTO_DETECT=TRUE))
TO '~/data/target.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');
You can modify the schema too if you want, selecting specific fields and renaming them too if you want:
COPY (SELECT col1, col2, col3 AS foo
FROM read_csv('~/data/source.csv',AUTO_DETECT=TRUE))
TO '~/data/target.parquet' (FORMAT 'PARQUET', CODEC 'ZSTD');
ETL is changing
Data modeling is changing
代码示例
import duckdb
# 创建DB(嵌入式DBMS)
conn = duckdb.connect('spotiStats.duckdb')
c = conn.cursor()
# 通过从CSV中导入内容创建表格 一个全新的数据库,添加了两个新表,并用所有数据填充了它们
c.execute( "CREATE TABLE features AS SELECT * FROM read_csv_auto('Features.csv');")
c.execute( "CREATE TABLE streams AS SELECT * FROM read_csv_auto('Streams.csv');")
#查询数据
c.sql("SELECT * FROM streams")
c.sql('''SELECT * FROM streams WHERE regexp_extract("Release Date", '\d{2}$') > '23'''')
#同时使用DuckDB和Pandas 将最初的查询转换为DataFrame,然后按照Pandas的方式应用过滤器
df = c.sql('SELECT * FROM streams').df()
df[df['Release Date'].apply(lambda x: x[-2:] > '23')]
#导出为Parquet文件——因为它们总是传统CSV文件的更好选择
c.execute('''
COPY ( SELECT * FROM streams WHERE regexp_extract("Release Date", '\d{2}$') > '23')
TO 'old_songs.parquet' (FORMAT PARQUET);
''')
SQL-数据平台功能
用spark sql或者trino等工具做ETL Airbyte的理念是主要做Extract (Source) + Load (Destination)
Fivetran Airbyte Airbyte Connectors
Meltano
数据集成-复制数据的标准
dbt来为这些数仓做转化 实现数据建模、数据目录、血缘关系和数据质量等配套功能 Dbt是Data Build Tool的简称
Dbt是Data Build Tool的简称,目前由dbt labs公司负责开发和维护,公司的前身是Fishtown Analytics,公司的创始人在2016年创立的公司
调度- dolphinschedule Airflow, Oozie, Azkabhan or Luigi ETL primitives (like source/target, aggregations, filtering)
数据整合的成本
ELT 的核心思想就是解耦。与 ETL 不同,ELT 不需要在加载过程之前进行数据转换
平台需要
需要一套全新的工具和方法
建立和运营组织数据基础设施的工作量
自动化一些数据工程流程的任务
开发和管理自己的作业编排器/调度器
制定和维护报表和仪表盘组合等领域
明确定义和衡量服务水平协议(SLA),严格遵守命名约定,业务元数据和文档质量
工具tools
元数据管理和工具成为现代数据平台的重要组成部分
资源意识 优化通常是从用相同数量的资源实现更多目标的角度出发,或者试图使资源利用率和成本的指数增长线性化
the data engineering role may also cover the workload around setting up and operating the organization’s data infrastructure
the role of automating some of the data engineering processes falls under the hand of both the data engineering and data infrastructure teams
Areas like crafting and maintaining portfolios of reports and dashboards are not a data engineer’s primary focus.
It’s also fairly common for engineers to develop and manage their own job orchestrator/scheduler.
if english is the language of business, SQL is the language of data
code is the best abstraction there is for software 代码是软件最好的抽象
边缘计算
经诞生了多个基于原生 Kubernetes 优化的开源项目,
比如华为开源的 KubeEdge、阿里开源的 OpenYurt、腾讯开源的 SuperEdge、Rancher 开源的 K3s 等
更轻量的 Kubernetes,也需要更轻量、更快的容器方案
在 Serverless 计算中,现有的主流技术是利用沙箱容器技术
参考
Python集成DuckDB:忘记SQLite用DuckDB代替 :https://news.sangniao.com/p/775799176
https://towardsdatascience.com/forget-about-sqlite-use-duckdb-instead-and-thank-me-later-df76ee9bb777
分类:
SQL_数据仓库
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2022-03-21 Gooey_命令行工具制作图形界面的工具