首页 > 数据库 >SQL_Duckdb-数据库一些介绍

SQL_Duckdb-数据库一些介绍

时间:2023-10-07 16:47:14浏览次数:50  
标签:## 数据库 Duckdb duckdb SQL data conn

数据处理

数据处理的本质是:针对不同需求,读取并标准化数据集后,施加不同的变换组合
   shell-Unix 管道也有缺点——只能进行线性的流水线排布
   SQL-关系型数据库是数据处理系统的集大成者。 
   spark
数据集和算子
   一层层细化

数据库基本组件

  对于一个数据库来说,  解析器——Parser,计划生成——Planner,计划执行——Runtime。还有对外提供的接口—— SQL  以及对测试用例的覆盖
  Parser 就是进行语法解析,将 SQL 语句进行分词,组织成语法树——AST。
      Parser 需要支持大部分 Postgres SQL 方言,包括 DDL、DML、DCL 和 DQL
  Planner 就是将 AST 基于规则和代价等进行优化成一个可以执行的算子树
       LogicPlanner 需要支持现代数仓的重要规则,如谓词下推、子查询去关联
	  PhysicalPlanner 需要支持对基于代价的连接调序(cost-based join reordering)
	  PhysicalPlanner 需要支持自定义的统计信息收集和代价模型
  Runtime 
   有两种实现流派——向量化(vectorization)和代码生成(code generation
     Runtime 和存储引擎耦合性较高,因此项目最好同时实现了高效的列存引擎
  属于拉( pull-based )流派的执行方式。其基本概念就是以树形的方式组织算子,并从根节点开始,自上而下的进行递归调用,
     算子间自下而上的以行(row)或者批(batch)的粒度返回数据
  基于推(push-based)的流派渐渐火起来了,
     DuckDB、Velox 都属于此流派。类似于将递归转化为迭代,自下而上,从叶子节点进行计算,然后推给父亲节点,直到根节点

Duckdb应用

 Duckdb,很适合AI量化的一个基于本地文件系统的的olap分析引擎
   关键优势在于数据控制的保留。当处理需要保持在组织内部或具有最高机密性的个人文件时,这个功能尤为重要,消除了通过第三方渠道传输信息的需求
    duckdb可以轻松访问多个csv和parquet文件,作为本地的分析引擎很好用。
    duckdb特别神奇的地方,可以对这多个文件夹下面的csv进行查询
###示例
import duckdb
import pandas
DATA_DIR_CSVS= r"csvs/*/"
df = duckdb.query(
    """
    select symbol,date,close from '{}/*.csv'
    where date = '20230809'
    """.format(DATA_DIR_CSVS)
)
print(df.df())

版本

  duckdb D:\Tools\annot.duckdb
  duckdb D:\Tools\duckdb\mytest.db  
  duckdb D:\Tools\duckdb_cli\data\mytest.db
 duckdb.IOException: IO Error: Trying to read a database file with version number 51, but we can only read version 43.	 

代码示例

#! /usr/bin/python3
# -*- coding:utf-8 -*-
#! /usr/bin/python3
# -*- coding:utf-8 -*-

import duckdb
import os

###DuckDB完整的实现了DB-API 2.0协议。因此可以像一般连接数据库一样连接DuckDB
if __name__ =="__main__":
    # 创建DB(嵌入式DBMS)
    duckdb.sql("select 2").show()
    conn = duckdb.connect(r"D:\Tools\annot.duckdb")
    # D:\Tools\duckdb\mytest.db    D:\annotation\annot.duckdb  D:\Tools\duckdb_cli\data
    # conn.cursor([cursorclass]):返回一个指针对象,用于访问和操作数据库中的数据。
    c = conn.cursor()
    meta_cmd = "select * from  information_schema.schemata"
    print(c.execute(meta_cmd))
    # loda_data -创建表
    # sql_cmd = ("CREATE TABLE {0} AS SELECT * FROM read_json('{1}',auto_detect=true,json_format='auto',"
    #                "maximum_object_size=999777216);").format(table_nm,src_data)
    # c.execute(sql_cmd)
    ## 执行 DML(插入、更新、删除)操作时,需要使用 commit() 方法提交事务。执行完成之后再关闭 Cursor 对象
    ###conn.begin():用于开始一个事务,如果数据库的autocommit已经开启就关闭它,直到事务调用commit()和rollback()结束
    ### conn.commit() conn.rollback() 分别表示事务提交和回退
    ## 提交事务
    ## conn.commit()
    ## 关闭 Cursor 对象
    ## cursor.close()
    ## cursor.fetchall():可取出指针结果集中的所有行,返回的结果集一个元组(tuples)。
    ## cursor.execute(query[,parameters]):执行一个数据库查询或者命令

    conn.close()

参考

  https://www.tutorialspoint.com/data_science/data_science_tools_in_demand.htm
  https://www.bairesdev.com/blog/data-why-you-should-dive-into-duckdb/
  Database Inside 系列 ——SQL 是如何执行的 https://zhuanlan.zhihu.com/p/583791689

标签:##,数据库,Duckdb,duckdb,SQL,data,conn
From: https://www.cnblogs.com/ytwang/p/17746643.html

相关文章

  • 重新编译kyuubi-1.6.1版本使其提交flink sql流式任务时不阻塞
    kyuubi-1.6.1版本对于flinksql的支持不是很好,在提交流式任务时会阻塞进程,为了修复这个缺陷,需要修改源代码并重新编译待编译的kyuubi版本:kyuubi-1.6.1-incubating适配的flink版本:flink-1.14.41、下载kyuubi-1.6.1-incubating版本的源代码,并导入IDEA中gitclone-bv1.6.1-incu......
  • 实现基于MYSQL验证的vsftpd虚拟用户访问
     #利用pam_mysql模块可以实现基于MySQL的FTP虚拟用户功能#项目网站:http://pam-mysql.sourceforge.net/#说明:因为此项目年代久远不再更新,当前只支持CentOS6,7,不支持CentOS8环境准备:本实验在两台主机上实现一台作为FTP服务器centos7一台作为mariadb......
  • xtrabackup实现全量+增量+binlog恢复mariadb数据库
     #一、利用xtrabackup实现完全备份及还原1.下载并安装xtrabackup包[root@centos8~]#wgethttps://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm......
  • ansible-playbook实现MySQL的二进制部署
     #安装mysql5.6[root@ansible~]#ls-l/data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz-rw-r--r--1rootroot403177622Dec 413:05/data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz[root@ansible~]#cat/data/ansible......
  • 科技云报道:押注向量数据库,为时过早?
    科技云报道原创。在大模型的高调火热之下,向量数据库也获得了前所未有的关注。近两个月内,向量数据库迎来融资潮,Qdrant、Chroma、Weaviate先后获得融资,Pinecone宣布1亿美元B轮融资,估值达到7.5亿美元。东北证券预测,到2030年,全球向量数据库市场规模有望达到500亿美元,国内向量数据库市场......
  • 数据库的三大范式;varchar与char的区别
    一、数据库的三大范式1.1第一范式数据表中的每一列(每个字段)都不可以再拆分。例如用户表,用户地址还可以拆分成国家、省份、市,这样才符合第一范式。1.2第二范式在第一范式的基础上,非主键完全依赖于主键,而不能是依赖于主键的一部分。例如订单表里面,存储了商品信息(商品价格、商品类型),那......
  • 数据库连接池(C3P0)
    为什么要引入数据库连接池?在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源。这是因为在Java程序与数据库之间建立连接时,数据库端要验证用户名和密码并为该连接分配资源,而程序则要把代表连接Connection对象等加载到内存中,所以建立数据库连接的开销很大。尤......
  • 数据库 "test1007" 的 创建 失败。其他信息: 执行 Transact-SQL 语句或批处理时发生
    问题描述在我使用sqlServer登录名和密码验证登录时,出现了创建数据库错误的信息;问题解决只需要在使用Windows身份验证进行登录后,在服务器角色里面找到dbeavor,然后将我们的登录名添加进去,保存之后,重新启动;之后再使用sqlServer验证登录连接之后,就能够建立好数据库啦!......
  • 一种对数据库友好的GUID的变种使用方法
    概述.NET生成的GUID唯一性很好,用之方便,但是,缺少像雪花算法那样的有序性。虽然分布式系统中做不到绝对的有序,但是,相对的有序对于目前数据库而言,索引效率等方面的提升还是有明显效果的(当然,我认为,这是数据库的问题,而非编程的问题,数据库应该处理好任何类型数据作为主键索引时的性能,除......
  • sqlServer安装步骤详解
    1、sqlserver下载步骤sqlserver下载地址——https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads下载下面的免费的developer即可;然后直接选择B就可以啦:选择中文简体,并接受:选择安装路径:等待安装完成:安装的确实有点子慢的;安装完成!然后选择安装SSMS;自......