首页 > 数据库 >数据库_DuckDB_数据库应用示例

数据库_DuckDB_数据库应用示例

时间:2024-01-10 12:36:09浏览次数:35  
标签:示例 DuckDB 数据库 grade duckdb path select schema

通用的问题

数据库存储的位置在那里;
数据库的所有者是谁;
其它用户如何来访问这个数据库;

duckdb

  DuckDB 是阿姆斯特丹 Centrum Wiskunde&Informatica(CWI)数学和理论计算研究中心的学者们的创意,
它嵌入在一个主机进程中。无需安装、更新或维护 DBMS 服务器软件

程序
   DuckDB 的二进制库+头文件
数据文件
   .db  以及 .db.wal
结构--Database, Catalog and Schema  Tables and Views  Rows Columns
  file--用户的数据库名称--databasename-database_oid
     information_schema  pg_catalog main
  system 
     information_schema main pg_catalog 
  temp
     information_schema main pg_catalog
DuckDB 的模块介绍--代码实现
   SQL Parser -->  Logical Planner -->  Optimizer --> Physical Planner -->  Execution Engine
   Transaction and Concurrency Control
   Storage 
###概念
  1.information_schema.schemat
    schema_name	Name of the schema.	VARCHAR	'main'
  2.pg_catalog 
       standard PostgreSQL pg_catalog functions and views for compatibility with PostgreSQL database and SQL syntax
  3.main
     表 视图 索引 存储过程 数据类型  函数  扩展  保留关键字
duckdb一些主要的概念词
  databases, schemas, 
     indexes, sequences, extensions, functions, types, configuration settings, and reserved keywords
  information_schema.tables
     The schema the table or view belongs to.	VARCHAR	'main'
驱动:
  duckdb_jdbc-0.9.2.jar
工作方式
   DuckDB 支持内存型和持久化型两种工作模式
      内存型不持久化数据,采用 InMemoryBlockManager 来管理数据 	
	  持久化型数据        采用 SingleFileBlockManager 来管理外存上的数据

从命令行中学习-SQL环境下Catalog和Schema都属于抽象概念

 数据库--databasename-database_oid
    current database
 数据库 schema含义数据库Schema有两种含义,
    一种是概念上的Schema,指的是一组DDL语句集,该语句集完整地描述了数据库的结构。
	还有一种是物理上的 Schema,指的是数据库中的一个名字空间  
    current_schemas(true)	['temp', 'main', 'pg_catalog']		
    Catalog Schema User
	    user  username  password   	   
1.Cluster > Catalog > Schema > Table > Columns & Rows
    So in both Postgres and the SQL Standard we have this containment hierarchy:
    
    A computer may have one cluster or multiple.
    A database server is a cluster.
    A cluster has catalogs. ( Catalog = Database )
    Catalogs have schemas. (Schema = namespace of tables, and security boundary)
    Schemas have tables.
    Tables have rows.
    Rows have values, defined by columns.
	
2.PostgreSQL中内建了对表常规访问的支持,
     但是所有的索引方法则是在pg_am中描述
	 
3.Constraints,是限制、约束
    constraint_type 约束类型   CHECK, FOREIGN KEY, PRIMARY KEY, NOT NULL, UNIQUE.
	       CHECK约束 是指约束表中某一个或者某些列中可接受的数据值或者数据格式
		   唯一约束
    5种完整性约束:
              1)NOT NULL:    指定某列不能为空
              2)UNIQUE:      指定某列或某几列不能重复
              3)PRIMARY KEY: 指定该列的值可以唯一地标识该条记录
              4)FOREIGN KEY: 指定该行记录从属于主表中的一条记录,主要用于保证参照完整性
              5)CHECK:       指定一个布尔表达式,用于指定对应列的值必须满足该表达式
                             【mysql不支持check】
    2类约束:采用列级约束语法或者表级约束语法
              1)单列约束:
              2)多列约束:
    指定约束的时机:
              1)建表的同时为相应的数据列指定约束
              2)建表后创建,以修改表的方式来增加约束(用alter来修改)		 
	select * from duckdb_settings();
	select *from duckdb_keywords();
	
	select * from duckdb_databases();
	select * from duckdb_schemas();
	select * from duckdb_functions()
	select * from duckdb_tables()
    select * from duckdb_views();
	select * from duckdb_indexes();
    select * from duckdb_columns();
	select * from duckdb_types()
    select * from duckdb_constraints();
    select * from duckdb_sequences();		
    select * from duckdb_extensions();	
	select * from duckdb_optimizers();

其他类似的数据库

MySQL初始化完成后会创建出4个系统库,
    分别是information_schema、performance_schema、mysql、sys
	infomation_schema 提供数据库的元数据,比如数据库名、表名、索引等,可以当作字典表
	mysql              是 mysql的核心库,主要存储数据库用户、权限等 mysql 自身需要使用的信息
	performance_schema 用于收集数据库服务器的性能数据,以便分析问题。比如 SQL 的执行次数、耗时、锁等信息
postgres 刚初始化的集群中,默认有一个数据库 postgres,有一个超级管理员用户,默为当前系统的用户
     初始化数据库后默认的表空间有pg_default、pg_global	
	
SQLite的默认库是一个空数据库,SQLite 在创建数据库时创建架构表
  每个 SQLite 数据库都包含一个 "schema table" ,用于存储该数据库的架构。
       数据库的架构是对数据库中包含的所有其他表、索引、触发器和视图的描述
	 main.sqlite_schema " 或 "temp.sqlite_schema"  
   SQLite 数据库都有一个叫 SQLITE_MASTER 的表, 
	里面存储着数据库的数据结构(表结构、视图结构、索引结构等),只可以对它使用查询语句  
   sqlite_schema 替代名称也被认可,包括: sqlite_master  sqlite_temp_schema  sqlite_temp_master

数据导入

import duckdb
import os

if __name__=="__main__":
    csv_dir = r"~/duckdb_exp"
    file_nm = r"roadline.csv"
    ##  dbeaver中 duckdb 可以不导入到数据库中,就可以直接查询<前提是已经安装好debeaver 以及duckdb 以及dbeaver的duckdb驱动> 
    ## dbeaver “新建 SQL 编辑器”,这样我们就可以在里面写 SQL 语句
    ## 直接可以查询出数据结果,而不需要像一般数据库需要先建表、导入数据后才能查询
    ##  select num,sum(pcd_cnt) from "~/duckdb_exp/road.csv" group by num    
    input_csv_file = os.path.join(csv_dir,file_nm)
    # 如果一张表我们要经常查询还是需要将其导入到数据库
    out_file_db = os.path.join(csv_dir,'file.db')
    if not os.path.exists(out_file_db):
        table_nm = "road_info"
        conn = duckdb.connect(out_file_db)
        c = conn.cursor()
        sql_cmd = ("CREATE TABLE {0} AS SELECT * FROM read_csv_auto('{1}') ").format(table_nm,input_csv_file)
        ## sample_size=-1,这样可以参数数据中的所有行,来创建适当的数据类型。
        c.execute(sql_cmd)
        conn.close()

参考

duckdb从入门到精通:数据导入 https://zhuanlan.zhihu.com/p/627565479

和pandas一起使用

import pandas as pd
import duckdb
import os

if __name__ =="__main__":
    root_dir = r"/data/orig_stat_src"
    class_grade_task = os.path.join(root_dir,r"class_grade_task.txt")

    ##data01 
    task_id = pd.read_csv(class_grade_task,sep="\t")
    task_id['ori_grade_nm'] = task_id["grade_nm"].str[:-4]
    print(task_id.head())
    ##data02 
    grade_path = os.path.join(root_dir,"grade_path.txt")
    grade_path_df = pd.read_csv(grade_path,sep="\t")
    grade_path_df['ori_grade_nm'] = grade_path_df["grade_path"].str.split("/").str[-1].str.replace("grade_","").str.replace("cor","corr").str[:-4]
    print(grade_path_df.head())
    #grade_path_df['ori_grade_nm'].to_csv("/data/test.txt",index=None)
	#####data03
    info_1_df  =pd.merge(task_id, grade_path_df, how = 'left',  on = "ori_grade_nm")
	### duckdb 
    data = duckdb.query('select task_id,max(task_nm) as task_nm, sum(json_cnt), sum(obj_cnt) from info_1_df group by task_id').df()
	print(data)

参考

 写规则引擎	  
 RandomFractals duckdb-sql-tools https://github.com/RandomFractals/duckdb-sql-tools/discussions 
 https://github.com/RandomFractals
 https://livebook.manning.com/book/duckdb-in-action/welcome/v-4/	
 https://github.com/duckdb-in-action/examples/tree/main/ch03  
  数据库 schema与catalog https://www.cnblogs.com/ECNB/p/4611309.html
  https://stackoverflow.com/questions/7022755/whats-the-difference-between-a-catalog-and-a-schema-in-a-relational-database

标签:示例,DuckDB,数据库,grade,duckdb,path,select,schema
From: https://www.cnblogs.com/ytwang/p/17956224

相关文章

  • 使用CompletableFuture提升代码执行效率示例
    代码示例/***全国/区域数据统计:*1.新能源规模*2.电网容量*3.输配线路*4.变电站*5.工作场站**@paramareaarea*@paramuseruser*@returntheobject*@since3.0.0*/publicSt......
  • 缓存数据库双写不一致
    缓存数据库双写不一致Redis缓存与数据库Mysql双写不一致如何解决?方案2应该是最好的,也是最复杂的。其他都有很明显的问题。对于频繁更新的数据不建议加缓存异步更新缓存(基于订阅binlog的同步机制):binlog增量订阅消费+消息队列+增量数据更新到redis读Redis:热数......
  • Qt QProcess进程间调用及交互通信,完整示例
    1.概述使用Qt进行应用程序开发,主要是通过QProcess类用于启动外部程序并与其进行通信.1.1.运行进程要启动进程,需要运行的程序的名称和命令行参数作为参数传递给start()。参数以QStringList形式提供。start()方法原型:voidstart(constQString&program,constQStringList&a......
  • N天爆肝数据库——MySQL(3)
    (N天爆肝数据库——MySQL(3))本篇文章,主要对DCL、函数、约束和多表查询进行知识总结和学习。期待和大家一起学习进步。DCLDCL-介绍数据控制语言,用来管理数据库用户、控制数据库的访问权限。DCL-管理用户查询用户USEmysql;SELECT*FROMuser;创建用户CREATEUSER......
  • openGauss学习笔记-191 openGauss 数据库运维-常见故障定位案例-出现Error:No space l
    openGauss学习笔记-191openGauss数据库运维-常见故障定位案例-出现Error:Nospaceleftondevice提示191.1出现“Error:Nospaceleftondevice”提示191.1.1问题现象在数据库使用过程中,出现如下错误提示。Error:Nospaceleftondevice191.1.2原因分析磁盘空间不足......
  • 在Django中,`python manage.py makemigrations`和`python manage.py migrate`是两个用
    在Django中,`pythonmanage.pymakemigrations`和`pythonmanage.pymigrate`是两个用于数据库迁移的命令,它们的主要区别在于:-`pythonmanage.pymakemigrations`:这个命令主要是记录我们对`models.py`的所有改动,并且将这个改动迁移到`migrations`这个文件下生成一个文件,例如:`0001`......
  • Mybatis 拦截器实现单数据源内多数据库切换 | 京东物流技术团队
    物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示:现在需要上线报表服务来查询所有数据库中的数据进行统计,那么现在的问题来了,该如何......
  • PGSQL(PostgreSQL)数据库基础篇:PostgreSQL 的 主要优点 、 劣势 、体系结构 、核心功
    PostgreSQL的主要优点1.维护者是PostgreSQLGlobalDevelopmentGroup,首次发布于1989年6月。2.操作系统支持WINDOWS、Linux、UNIX、MACOSX、BSD。3.从基本功能上来看,支持ACID、关联完整性、数据库事务、Unicode多国语言。4.表和视图方面,PostgreSQL支持临时表,而物化视图,可以......
  • Spring Boot中使用JPA进行数据库操作
    在Java后端开发中,数据库操作是一个非常重要的环节。SpringBoot作为当前非常流行的轻量级Java开发框架,提供了很多便捷的工具和功能,使得数据库操作变得更加简单快捷。在SpringBoot中,我们可以使用JPA(JavaPersistenceAPI)来进行数据库操作。JPA是一种将对象持久化到数据库的方法,它遵......
  • openGauss学习笔记-189 openGauss 数据库运维-常见故障定位案例-TPCC-WAL-内存
    openGauss学习笔记-189openGauss数据库运维-常见故障定位案例-TPCC-WAL-内存189.1TPCC运行时,注入磁盘满故障,TPCC卡住的问题189.1.1问题现象TPCC运行时,注入磁盘满故障,TPCC卡住,故障消除后,TPCC自动续跑。189.1.2原因分析数据库本身机制,在性能日志(gs_profile)所在磁盘满时,导致......