duckdb
语法情况
语法 情况处理
01. where 条件中 使用单引号而不是双引号
02. select "observation.state" from episode; -- 带有dot的列名 在mysql中用反引号,在duckdb中用双引号 ###
python 中
result_dat.create_view("temp_table")
con.register("new_temp_table",result_dat)
功能
1.通过https或者S3 访问 duckdb数据库--Network and Cloud Storage
Attach to a DuckDB Database over HTTPS or S3
命令
ATTACH 'https://blobs.duckdb.org/databases/stations.duckdb' AS stations_db;
ATTACH 's3://duckdb-blobs/databases/stations.duckdb' AS stations_db;
适用: 通过https或者S3 当前只支持读取,不支持写入
2.read_blob functions 和Multiple Files
DuckDB offers two ways of unifying schemas of multiple files:
by column position and by column name.
Read a set of CSV files combining columns by position
Read a set of CSV files combining columns by name
3.Meta Queries
PRAGMA version;
PRAGMA platform;
时间更新
1.MySQL 中create_time和update_time默认值和实时更新
create_time和update_time字段,便于后期维护
数据类型:
更新命令:
初始化时间 :DEFAULT now()表示当数据插入数据库时,create_tim默认值为当前时间
ON UPDATE now()表示更新这条数据的时候,update_time会更新成当前时间
`create_time` datetime NOT NULL DEFAULT now() COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT now() ON UPDATE now() COMMENT '更新时间'
2.PostgreSQL
PostgreSQL 可以通过触发器实现类似MySQL的ON UPDATE功能
创建一个BEFORE UPDATE触发器,在更新行时自动设置时间戳
3.SQLite:
从3.3.0版本开始,支持在TIMESTAMP字段中使用ON UPDATE,但语法略有不同:
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
只对 TIMESTAMP 类型有效,并且必须使用特定的日期时间函数
4.duckdb
DuckDB是嵌入式分析型数据库,通常更推荐在应用程序中处理更新时间戳
CREATE TABLE your_table (
id INTEGER PRIMARY KEY,
data VARCHAR,
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
merge into db_a as target
using(select t1.* from db_2 t1 ) as source
on target.id = source.id
when matched then
update set update_time = LOCALTIMESTAMP
when NOT matched then
insert(id,name,data_type)
values(source,id,source.name,source.data_type)
;
5.框架
SQLAlchemy中,可以这样定义
6. Repository 模式 或 装饰器模式,
这样可以在保持代码整洁的同时,确保所有更新操作都自动包含时间戳管理。
对于需要审计的场景,考虑添加审计日志表来跟踪所有更改历史
7. doris 数据更新
doris
--1.简单的更新 Simple update
UPDATE user_profiles SET age = age + 1 WHERE user_id = 1;
--2.连表更新 Cross-table join update
UPDATE sales_records t1
SET t1.user_name = t2.name
FROM user_profiles t2
WHERE t1.user_id = t2.user_id;
参考 https://doris.apache.org/docs/3.x/data-operate/update/update-overview
insert has filtered data in strict mode,翻译:插入在严格模式下过滤了数据。
可能原因1:在创建表的时候有一列的长度过短。
可能原因2:将null值插入到了not null的字段。 查看插入表的DDL,看是否有 not null 字段的设置
例如: id 设置成自增。
duckdb 处理腾讯文档数据
1.下载数据
登录腾讯文档--查看在线表格,将其下载到本地
下载到本地后,打开excel后另存为xlsx数据
2.筛选数据--
C:\Users\~\Downloads\data_表.xlsx
数据存储到本地库
处理完数据把文件重新命名+ 时间+名称
3.将批次处理数据放到对象存储上
4.附录说明
1.excel本质是一堆xml的zip文件
2.win32com.client是Python中用于操作Windows COM对象的强大模块,
特别适合与Microsoft Office应用程序(如Word、Excel、Outlook等)进行交互 win32com.client是pywin32库的子模块
pip install pywin32
通过另存为解决。 通过代码将原文件另存为然后读取另存为的文件
1.文件格式或编码不兼容 原始Excel文件可能由特定系统(如WPS、网页导出、旧版软件)生成,
其内部格式(如XML结构、编码方式)与当前读取工具(如Python的pandas、openpyxl)不完全兼容。
当使用“另存为”功能时,Excel会重新构建文件的内部结构,将其转换为标准的.xlsx或.xls格式,从而消除兼容性问题
2. 文件损坏或部分数据异常 3.文件被锁定或权限问题
参考
https://blog.csdn.net/w499311647/article/details/145932719 TypeError: expected <class ‘openpyxl.styles.fills.Fill‘>
https://blog.csdn.net/2301_78803982/article/details/141249871