数据库_duckdb_边缘计算与数据平台

发布时间 2023-03-22 21:11:48作者: 辰令

数据库连接

一个处理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