当前位置: 首页 > news >正文

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.4 异构数据源整合(CSV/JSON/Excel数据导入)

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

  • PostgreSQL异构数据源整合:CSV/JSON/Excel数据导入全攻略
    • 4.4 异构数据源整合:多格式数据导入实战
      • 4.4.1 CSV数据导入:高效批量处理
        • 4.4.1.1 核心工具对比
        • 4.4.1.2 `COPY`命令深度解析
        • 4.4.1.3 性能优化技巧
      • 4.4.2 JSON数据导入:结构化与非结构化融合
        • 4.4.2.1 数据类型选择
        • 4.4.2.2 嵌套JSON解析示例
        • 4.4.2.3 批量导入工具链
      • 4.4.3 Excel数据导入:跨平台兼容方案
        • 4.4.3.1 转换流程架构
        • 4.4.3.2 工具对比与选型
        • 4.4.3.3 Python实战案例
        • 4.4.3.4 企业级方案:ODBC驱动配置
      • 4.4.4 数据清洗前置处理
        • 4.4.4.1 通用清洗规则
        • 4.4.4.2 自动化校验脚本
      • 4.4.5 性能对比与最佳实践
        • 4.4.5.1 导入速度测试(10GB数据)
        • 4.4.5.2 企业级实施路线图
      • 4.4.6 行业案例:电商数据整合实战
        • 4.4.6.1 业务场景
        • 4.4.6.2 技术方案
        • 4.4.6.3 关键代码
      • 4.4.7 扩展工具与生态集成
        • 4.4.7.1 数据集成工具对比
        • 4.4.7.2 自定义函数扩展
      • 4.4.8 总结与最佳实践
        • 4.4.8.1 技术选型决策树
        • 4.4.8.2 实施 checklist

PostgreSQL异构数据源整合:CSV/JSON/Excel数据导入全攻略

4.4 异构数据源整合:多格式数据导入实战

在数据清洗与预处理阶段,异构数据源整合是核心挑战之一。

  • PostgreSQL作为企业级关系型数据库,提供了完善的工具链支持CSV、JSON、Excel等多种格式数据的高效导入。
  • 本节将通过具体案例,解析不同数据源的导入技术、最佳实践及性能优化策略。

在这里插入图片描述

4.4.1 CSV数据导入:高效批量处理

4.4.1.1 核心工具对比
工具适用场景优势语法复杂度权限要求
COPY本地大规模数据内核级速度,支持事务★★☆☆☆数据库超级用户
psql \copy本地/远程交互客户端直接操作,灵活方便★★★☆☆客户端权限
pgloader跨数据库迁移支持复杂转换逻辑★★★★☆自定义脚本
4.4.1.2 COPY命令深度解析
  • -- 基础语法(带标题行的CSV)
    COPY employee_salary (name, salary, hire_date)
    FROM '/data/employees.csv' 
    DELIMITER ',' 
    HEADER 
    CSV 
    QUOTE '"' 
    NULL AS '';-- 数据类型自动映射规则
    CREATE TABLE temp_employees (name TEXT,salary NUMERIC,hire_date DATE
    );-- 错误处理(跳过非法行)
    COPY temp_employees
    FROM '/data/employees.csv' 
    WITH (FORMAT CSV, HEADER, NULL '', LOG ERRORS INTO error_log);
    
  • 在这里插入图片描述
  • 在这里插入图片描述
  • output.csv 文件内容
    name,salary,hire_date
    ***,5329.92,2020-01-01
    ***,5607.62,2020-02-15
    ***,5124.42,2020-03-20
    ***,6507.68,2020-04-10
    ***,6271.28,2020-05-25
    ***,7607.81,2020-06-05
    ***,7854.19,2020-07-18
    ***,5662.26,2020-08-30
    ***,7275.19,2020-09-12
    ***,7011.63,2020-10-22
    
  • csv文件编码格式转换(GBK)
    import csvdef convert_csv_encoding(input_file, output_file):try:# 以 UTF-8 编码读取 CSV 文件with open(input_file, 'r', encoding='utf-8', newline='') as infile:reader = csv.reader(infile)rows = list(reader)# 以 GBK 编码写入新的 CSV 文件with open(output_file, 'w', encoding='gbk', newline='') as outfile:writer = csv.writer(outfile)for row in rows:writer.writerow(row)print(f"文件 {input_file} 已成功转换为 GBK 编码并保存为 {output_file}。")except FileNotFoundError:print(f"错误:未找到文件 {input_file}。")except UnicodeEncodeError:print("错误:在转换为 GBK 编码时遇到无法编码的字符。")except Exception as e:print(f"发生未知错误:{e}")# 使用示例
    input_file = r'..\employee_salary.csv'
    output_file = 'output.csv'
    convert_csv_encoding(input_file, output_file)
    
4.4.1.3 性能优化技巧
    1. 批量提交:设置COPY批量大小为10000行
    1. 禁用索引:导入前删除索引,完成后重建
    1. 压缩处理:直接导入.gz格式文件(需PostgreSQL 11+)
    gunzip -c employees.csv.gz | psql -h localhost -d yanxishuzhi -c "COPY employee_salary FROM STDIN WITH CSV HEADER"
    

4.4.2 JSON数据导入:结构化与非结构化融合

4.4.2.1 数据类型选择
数据类型存储方式索引支持查询性能适用场景
JSON文本存储仅全文搜索日志类非结构化数据
JSONB二进制存储GIN / GIST索引需频繁查询的JSON数据
4.4.2.2 嵌套JSON解析示例
-- 原始数据(sales_record.json)
{"order_id": 1001,"customer": {"name": "张三","address": {"city": "北京","postcode": "100080"}},"items": [{ "product": "笔记本", "price": 5999 },{ "product": "鼠标", "price": 99 }]
}-- 压缩格式
{"order_id":1001,"customer":{"name":"张三","address":{"city":"北京","postcode":"100080"}},"items":[{"product":"笔记本","price":5999},{"product":"鼠标","price":99}]}
-- 创建JSONB表
CREATE TABLE orders (id SERIAL PRIMARY KEY,data JSONB
);-- 导入单个JSON文件
COPY orders (data) FROM '/data/sales_record.json';-- 解析嵌套字段
SELECT data->>'order_id' AS order_id,(data->'customer'->>'name') AS customer_name,jsonb_array_length(data->'items') AS item_count
FROM orders;-- 索引优化
CREATE INDEX idx_orders_customer ON orders USING GIN (data->'customer');
  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

4.4.2.3 批量导入工具链
  • jq 工具
    • 一个轻量级且灵活的强大的命令行 JSON 处理器,可用于解析、过滤、转换和格式化 JSON 数据。
    • 在处理 JSON 数组时,jq 可以实现很多实用的预处理操作。
    • 其主要功能如下:
        1. 数据筛选提取:提取特定字段,过滤数组元素。
        1. 格式化美化:让 JSON 数据更易读。
        1. 数据转换操作:重命名字段、转换数据类型、操作字符串。
        1. 数学运算:支持基本运算和统计计算。
        1. 条件分支:用 if-then-else 实现条件判断。
        1. 处理嵌套对象:深入嵌套结构提取或修改数据。
        1. 数组操作扁平化数组、映射数组元素
        1. 合并比较对象:合并多个对象,进行对象比较。
        1. 自定义函数:用户可定义函数复用逻辑。
        1. 流式处理高效处理大规模 JSON 数据
    # 使用jq预处理JSON数组
    jq -c '.[]' large_data.json > normalized_data.json# 并行导入(pg_jobs插件)
    SELECT create_job('COPY orders FROM ''/data/normalized_data.json'' WITH JSONB');
    

4.4.3 Excel数据导入:跨平台兼容方案

4.4.3.1 转换流程架构

在这里插入图片描述

4.4.3.2 工具对比与选型
工具支持格式自动化程度数据类型保留学习成本
pandas.xls/.xlsx良好★★★☆☆
csvkit.xls一般★★☆☆☆
ODBC原生支持优秀★★★★☆
4.4.3.3 Python实战案例
# 使用pandas读取Excel并写入CSV
import pandas as pd
import psycopg2# 读取Excel
df = pd.read_excel('sales_report.xlsx', sheet_name='2023Q1')# 数据清洗
df['sale_date'] = pd.to_datetime(df['sale_date'])
df.dropna(subset=['product_id'], inplace=True)# 写入CSV
df.to_csv('cleaned_sales.csv', index=False, header=True)# 连接PostgreSQL并导入
conn = psycopg2.connect("dbname=mydb user=postgres")
cur = conn.cursor()with open('cleaned_sales.csv', 'r') as f:next(f)  # 跳过标题行cur.copy_from(f, 'sales', sep=',', columns=df.columns)conn.commit()
cur.close()
conn.close()
4.4.3.4 企业级方案:ODBC驱动配置
    1. 安装驱动(Windows):下载PostgreSQL ODBC驱动(psqlODBC)
    1. 配置DSN:通过ODBC数据源管理器创建连接
    1. Power BI/Excel直连:使用ODBC数据源进行实时数据同步

4.4.4 数据清洗前置处理

4.4.4.1 通用清洗规则
问题类型CSV处理方案JSON处理方案Excel处理方案
数据类型不匹配CAST(column AS TYPE)jsonb_typeof()校验pd.to_numeric()转换
缺失值NULL AS ''参数COALESCE(data->>'field', '')填充默认值或删除空行
重复数据CREATE UNIQUE INDEXjsonb_path_exists()去重df.drop_duplicates()
特殊字符QUOTE '\"' ESCAPE '\\'REPLACE(data::TEXT, E'\x00', '')正则表达式清洗
4.4.4.2 自动化校验脚本
-- CSV数据完整性校验
SELECT COUNT(*) FILTER (WHERE salary < 0) AS negative_salary,COUNT(*) FILTER (WHERE hire_date > CURRENT_DATE) AS future_hire_date
FROM employee_salary_staging;-- JSON结构合规性检查
-- 从 orders 表中选择符合条件的记录的 id 列
-- 该查询的目的是找出 orders 表中 JSON 类型的 data 字段不包含 'order_id' 键或者不包含 'customer' 键的记录
SELECT id 
FROM orders 
-- 使用 WHERE 子句筛选满足特定条件的记录
WHERE -- 使用 NOT 和 ? 操作符检查 data 字段是否不包含 'order_id' 键-- 在 PostgreSQL 中,? 操作符用于检查 JSON 或 JSONB 类型的值是否包含指定的键NOT data ? 'order_id' -- 使用 OR 逻辑运算符,意味着只要满足其中一个条件即可OR -- 同样使用 NOT 和 ? 操作符检查 data 字段是否不包含 'customer' 键NOT data ? 'customer';

4.4.5 性能对比与最佳实践

4.4.5.1 导入速度测试(10GB数据)
数据格式工具耗时内存占用错误率
CSVCOPY23s1.2GB0.01%
JSONBpgloader48s1.8GB0.03%
Excelpandas+COPY112s2.5GB0.05%
4.4.5.2 企业级实施路线图
    1. 数据分类:识别敏感字段(如Excel中的身份证号)
    1. 格式标准化:统一编码(UTF-8)、日期格式(YYYY-MM-DD)
    1. 增量导入:通过时间戳字段实现WHERE update_time > last_import_time
    1. 监控报警设置导入成功率阈值(建议≥99.5%)
    1. 灾备方案:定期备份临时表(如employees_staging

4.4.6 行业案例:电商数据整合实战

4.4.6.1 业务场景

某电商平台需要整合以下数据:

  • 订单数据(CSV,每日100万条)
  • 用户行为日志(JSON,实时流入)
  • 商品目录(Excel,每周更新)
4.4.6.2 技术方案
    1. 订单数据:使用COPY命令配合分区表(按月份分区)
    1. 日志数据:通过 Kafka 实时消费,解析JSON后写入JSONB表
    1. 商品目录:Python脚本定时转换Excel为CSV,校验后导入
4.4.6.3 关键代码
-- 分区表定义
CREATE TABLE orders_202301 (CHECK (order_date >= '2023-01-01' AND order_date < '2023-02-01')
) INHERITS (orders);-- 实时日志处理(PostgreSQL 15+)
CREATE FOREIGN TABLE log_stream (event_time TIMESTAMP,user_id TEXT,event_type TEXT,details JSONB
) SERVER kafka_server
OPTIONS (topic 'user_log', format 'json');

4.4.7 扩展工具与生态集成

4.4.7.1 数据集成工具对比
工具优势PostgreSQL兼容性学习曲线
Apache NiFi可视化数据流设计原生JDBC支持★★★★☆
Talend预定义PostgreSQL组件深度集成★★★☆☆
ETL工具拖拽式操作ODBC/JDBC驱动★★☆☆☆
  • Apache NiFi

    • Apache NiFi 是一款开源的数据集成与流处理平台,专为自动化、监控和优化复杂数据流而设计,尤其适用于企业级数据管道、实时分析和跨系统数据流动场景
      在这里插入图片描述
    • 与其他工具的对比
      工具定位优势场景与NiFi的差异
      Apache Kafka消息队列与流处理框架高吞吐量消息传递、事件驱动架构专注于数据传输,缺乏可视化编排能力
      Apache Airflow工作流调度平台批处理任务编排、DAG可视化不支持实时流处理,依赖编程接口
      Talend企业级ETL工具复杂数据转换、GUI拖拽式开发闭源收费,实时处理能力较弱
      jq轻量级JSON命令行工具单机数据提取与格式化处理静态文件,无法构建端到端管道
  • Talend

    • 数据集成与转换
      • 多源连接: 内置 1,000+ 连接器,支持 关系型数据库(Oracle、MySQL)、云服务(AWS S3、Azure Blob)、大数据平台(Hadoop、Spark)及 企业应用(SAP、Salesforce)。
      • 复杂转换: 提供 300+ 转换组件,包括字段映射、数据聚合、JSON/XML 解析等。例如,将 CSV 格式的客户数据转换为 Parquet 格式并写入 HDFS。
      • 实时处理: 支持 CDC(Change Data Capture) 和流批一体处理,可与 Kafka、Flink 集成实现实时数据同步。
    • Talend 是数据集成领域的全能型选手,尤其适合需要 端到端数据治理 和 复杂业务逻辑 的企业。其可视化开发、数据质量工具和多源支持使其成为构建数据中台和企业级数据管道的首选。对于实时流处理和轻量级场景,可结合 NiFi 或 Kafka 形成互补方案。
      在这里插入图片描述
4.4.7.2 自定义函数扩展
-- 创建Excel解析函数(需plpythonu扩展)
CREATE OR REPLACE FUNCTION parse_excel(file_path TEXT)
RETURNS SETOF record AS $$
import pandas as pd
df = pd.read_excel(file_path)
for index, row in df.iterrows():yield (row['name'], row['salary'], row['hire_date'])
$$ LANGUAGE plpythonu 
RETURNS NULL ON NULL INPUT
STRICT;-- 使用自定义函数导入
SELECT * FROM parse_excel('/data/employees.xlsx') 
AS (name TEXT, salary NUMERIC, hire_date DATE);

4.4.8 总结与最佳实践

4.4.8.1 技术选型决策树

在这里插入图片描述

4.4.8.2 实施 checklist
    1. 确认数据源编码格式(推荐UTF-8)
    1. 定义字段映射关系(源字段→目标字段)
    1. 制定数据清洗规则(缺失值/异常值处理)
    1. 选择合适的导入工具(参考性能测试结果)
    1. 实现增量导入逻辑(避免全量重复处理)
    1. 配置错误日志记录(便于问题追溯)
    1. 进行数据一致性校验(导入前后对比)

通过系统化的异构数据源整合方案

  • 企业能够将分散的CSV、JSON、Excel数据高效汇入PostgreSQL,为后续的数据分析、可视化奠定坚实基础。
  • 在实际操作中,需结合数据特性、业务场景及性能要求选择最优方案,并通过自动化工具链提升整合效率,降低人工干预成本

相关文章:

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.4 异构数据源整合(CSV/JSON/Excel数据导入)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 PostgreSQL异构数据源整合&#xff1a;CSV/JSON/Excel数据导入全攻略4.4 异构数据源整合&#xff1a;多格式数据导入实战4.4.1 CSV数据导入&#xff1a;高效批量处理4.4.1.1…...

在macOS上安装windows系统

使用Boot Camp 1. 准备工作&#xff1a;确认Mac满足Boot Camp系统要求&#xff0c;准备好Windows安装光盘或ISO映像文件&#xff0c;以及一个至少8GB的空白USB闪存驱动器用于保存驱动程序。 2. 打开Boot Camp助理&#xff1a;在“应用程序”文件夹的“实用工具”中找到“Boot…...

最长回文子串(动规 + 中心拓展)

目录 [BM73 最长回文子串](https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId295&tags&title&difficulty0&judgeStatus0&rp0&sourceUrl/exam/oj?questionJobId10&subTabNameonline_coding_page)1. 动态规划(1)状态表示:…...

学习海康VisionMaster之亮度测量

一&#xff1a;进一步学习了 今天学习下VisionMaster中的亮度测量&#xff1a;这个和前面学习的都不一样了&#xff0c;这个是测量ROI区域内的平均亮度等 1&#xff1a;什么是亮度测量&#xff1f; 我们工业上用的相机里面有一个感光芯片&#xff08;CCD/CMOS&#xff09;&…...

LeetCode 238:除自身以外数组的乘积(Java实现)

文章目录 **题目描述**解决思路1. 两次遍历法&#xff08;左右乘积法&#xff09;2. 核心思想 Java代码实现复杂度分析示例说明步骤分解 注意事项总结 题目描述 给定一个整数数组 nums&#xff0c;返回一个数组 answer&#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外…...

LintCode第23题-判断数字与字母字符 第145题-大小写转换 第283题-三数之中的最大值

思路: 直接使用包装类的方法来判断 比如: isLetter(char c)判断是否是字母&#xff08;包括大小写、非英语字母也行&#xff09; isDigit(char c)判断是否是数字&#xff08;0~9&#xff09; isLetterOrDigit(char c)是否是字母或数字&#xff08;等价于 isLetter isLower…...

Visual Studio 项目转Qt项目

1. 先确保qmake 和 minGW &#xff08;g&#xff09; 路径都在系统变量内&#xff1b;或者通过WinR -> cmd 来检测&#xff0c; 如果能够 显示qmake 的信息 &#xff0c; g 的信息 &#xff0c; 就说明设置环境变量成功。 2. 打开项目文件夹&#xff0c;在这里打开cmd, 换…...

判断字符是否唯一 --- 位运算

目录 一&#xff1a;题目 二&#xff1a;算法与原理 三&#xff1a;代码分析 一&#xff1a;题目 题目链接&#xff1a;面试题 01.01. 判定字符是否唯一 - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法与原理 三&#xff1a;代码分析 class Solution { publ…...

react路由使用方法

react路由常用方法 一、router安装与基础路由二、路由跳转三、路由参数四、路由嵌套无论是小程序端、web端还是移动端前端开发都需要使用到路由组件,学会了路由之后便可以灵活开发各种交互页面。可以说路由在前端开发中占有非常重要的位置。在React中,路由使用方式和Vue比较相…...

Wannier90文件与参数

Wannier90源码https://github.com/wannier-developers/wannier90/releases/tag/v3.1.0 用法 Wannier90 可以以两种模式运行&#xff1a; 后处理模式 Post-processing mode&#xff1a;从文件中读取第一性原理代码计算得到的重叠和投影。我们预计这是使用 wannier90 最常见的…...

学习黑客Nmap 原理

练气期第一重 — 神识探查术&#xff08;Nmap 原理&#xff09; 场景设定 诸位道友&#xff08;学生&#xff09;刚踏入信息安全修真界&#xff0c;手中只有一柄“网路灵剑”&#xff08;本地终端&#xff09;。想要探知远处服务器的灵脉&#xff08;端口&#xff09;、功法&am…...

VBA信息获取与处理专题五:VBA利用CDO发送电子邮件

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程&#xff0c;目前已经是第一版修订了。这套教程定位于最高级&#xff0c;是学完初级&#xff0c;中级后的教程。这部教程给大家讲解的内容有&#xff1a;跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…...

Git 第一讲---基础篇 git基础概念与操作

前言&#xff1a; Git&#xff0c;作为目前全球最流行的分布式版本控制系统&#xff0c;以其高效、灵活和强大的分支管理能力&#xff0c;成为开发者手中不可或缺的工具。从个人开源项目到企业级应用&#xff0c;Git的身影无处不在。然而&#xff0c;对初学者而言&#xff0c;…...

心衰生物标志物NT-ProBNP和BNP

B型利钠肽&#xff08;BNP&#xff09;和N末端B型利钠肽原&#xff08;NT-proBNP&#xff09;都属于利尿钠肽&#xff08;NP&#xff09;家族。当发生心衰时&#xff0c;NT-ProBNP和BNP的浓度会升高&#xff0c;它们是心衰&#xff08;HF&#xff09;和心功能障碍诊疗中应用最广…...

Winform(11.案例讲解1)

今天写两个案例,用于更好的理解控件的使用 在写之前先写一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1.案例讲解 { internal class Student { public string …...

卡尔曼滤波详解

1. 卡尔曼滤波能解决什么问题&#xff1f; 卡尔曼滤波用于解决含噪声的动态系统状态估计问题&#xff0c;例如&#xff1a; 通过GPS和IMU数据估计车辆位置 通过电压电流测量估计电池电量(SOC) 雷达追踪飞行器轨迹 它的核心优势是&#xff1a; 递归计算&#xff1a;只需前一…...

数据类型:String

String目录 SetGetMsetMgetIncrIncrbySubstrGetrangeSetrange String是字符串类型&#xff0c; redis给我们提供了String类型的value&#xff0c; 但是内部的实现一共有三种&#xff1a; int、embstr、raw&#xff1b; 三种的不同之处在于当value长度较小的时候使用embstr和int…...

【C/C++】inline关键词

C inline 关键字学习笔记 一、什么是 inline 函数&#xff1f; inline&#xff08;内联&#xff09;是 C 中的一个关键字&#xff0c;表示“将函数的代码直接插入到调用点”&#xff0c;以减少函数调用开销&#xff0c;提升执行效率。 ✅ 注意&#xff1a;inline 是一种“请求…...

Hive安装与配置教程

Hive安装与配置教程 1. 环境准备 1.1 系统要求 Java 8或更高版本Hadoop 2.x或更高版本MySQL或其他关系型数据库&#xff08;用于存储元数据&#xff09; 1.2 安装依赖 # 安装Java sudo apt update sudo apt install openjdk-8-jdk# 安装MySQL sudo apt install mysql-serv…...

C++负载均衡远程调用学习之获取主机信息功能

目录 01Lars-lbAgentV0.2-赋值均衡数据结构关系分析 02 Lars-lbAgent0.2-host_info-load_balance-route_lb数据结构的定义 03Lars-lbAgentV0.2-proto协议的定义 04 Lars-lbAgentV0.2-route_lb与UDP server的关联 05 -Lars-lbAgentV0.2-route_lb与UDP server的关联 06Lars…...

C++ 适配器模式详解

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许不兼容的接口之间能够协同工作。 概念解析 适配器模式的核心思想是&#xff1a; 接口转换&#xff1a;将一个类的接口转换成客户希望的另一个接口 兼容性&#xff1a;使原本由于接…...

2025.5.5总结

今日感悟&#xff1a;这假期就这样结束了&#xff0c;玩了一次滑板&#xff0c;打扫了一次租房&#xff0c;出去逛了一次街&#xff0c;看完了一本书&#xff0c;追了一部剧。既没有家人&#xff0c;也没有能一同畅饮的同学&#xff0c;更没有对象&#xff0c;显得确实有些孤独…...

数据链路层(MAC 地址)

目录 一、前言&#xff1a; 二、以太网&#xff1a; 三、MAC 地址的作用&#xff1a; 四、ARP协议&#xff1a; 一、前言&#xff1a; 数据链路层主要负责相邻两个节点之间的数据传输&#xff0c;其中&#xff0c;最常见数据链路层的协议有 以太网&#xff08;通过光纤 / 网…...

kotlin 05flow -从 LiveData 迁移到 Kotlin Flow 完整教程

一 从 LiveData 迁移到 Kotlin Flow 完整教程 LiveData 长期以来是 Android 架构组件中状态管理的核心&#xff0c;但随着 Kotlin Flow 的成熟&#xff0c;Google 官方推荐将现有 LiveData 迁移到 Flow。本教程基于官方文章并扩展实践细节&#xff0c;完成平滑迁移。 一、为什…...

PostgreSQL 的 pg_ls_waldir 函数

PostgreSQL 的 pg_ls_waldir 函数 pg_ls_waldir 是 PostgreSQL 中用于列出预写式日志(WAL)目录内容的重要函数&#xff0c;特别适用于 WAL 文件管理和数据库恢复场景。 一、函数基本说明 语法 pg_ls_waldir() RETURNS SETOF text功能 返回 WAL 目录中所有文件的名称集合在…...

形式化数学——Lean求值表达式

作为学习 Lean 的程序员&#xff0c;最重要的是理解求值的工作原理。求值是求得表达式的值的过程&#xff0c;就 像算术那样。例如&#xff0c;15 - 6 的值为 9&#xff0c;2 (3 1) 的值为 8。要得到后一个表达式的值&#xff0c;首先将 3 1 替换为 4&#xff0c;得到 2 4&…...

杰理-AC696音箱linein无法插入检测

杰理-AC696音箱linein无法插入检测 阻值选用1k&#xff0c;原公版原理图上68k,导致内部上拉电压一直不能掉下来&#xff0c;软件一直无法检测到。...

zst-2001 历年真题 程序设计语言

程序设计语言1 b 程序设计语言2 c 程序设计语言3 a 程序设计语言4 b中解释语言可以用高级语言编写 c优化 d反了 a 程序设计语言5 c 程序设计语言6 重复就是循环 b 程序设计语言7 a 程序设计语言8 c就是malloc&#xff0c;动态扩展数组&#xff0c;和类型没什…...

VirtualBox调整虚拟机内存和CPU

当我们配置的虚拟机内存或CPU不足以支撑开发需要时&#xff0c;需要及时调整内存和CPU大小。调整前如果虚拟机在运行&#xff0c;需要先关机。 下面的步骤是居于VirtualBox 6.1版本&#xff0c;不同版本的操作界面会有些许差异。 1.选中要调整的虚拟机&#xff0c;点击设置 2…...

SpringMVC框架详解与实践指南

文章目录 一、三层架构与MVC模型1. 三层架构2. MVC模型 二、SpringMVC入门案例1. 环境搭建2. 核心配置3. 编写Controller 三、执行流程与组件分析四、RequestMapping注解五、请求参数绑定1. 基本类型与对象绑定2. 嵌套对象与集合绑定 六、中文乱码解决方案(前端传到后端)1. Str…...

C语言 ——— 函数

目录 函数是什么 库函数 学习使用 strcpy 库函数 自定义函数 写一个函数能找出两个整数中的最大值 写一个函数交换两个整型变量的内容 牛刀小试 写一个函数判断一个整数是否是素数 写一个函数判断某一年是否是闰年 写一个函数&#xff0c;实现一个整型有序数组的二分…...

洛谷 P9007 [入门赛 #9] 最澄澈的空与海 (Hard Version)

这道题可不入门。 [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 给定 n n n&#xff0c;求有多少组 ( x , y , z ) (x,y,z) (x,y,z) 满足&#xff1a; x − y z n ! x-\dfrac{y}{z}n! x−zy​n! x − y z n ! n \dfrac{x-y…...

Java基础学完,继续深耕(0505)Linux 常用命令

昨天休息了一天&#xff0c;没有写csdn 昨天和今天把Linux大概学了一下。总结一下常用命令&#xff0c;总结的不全。 Linux目录结构 / 是所有目录的顶点 目录结构像一颗倒挂的树 注意&#xff1a;/itheima 是绝对路径&#xff0c;是指根目录 / 下的itheima目录 itheima…...

详解 FFMPEG 交叉编译 `FLAGS` 和 `INCLUDES` 的作用

FLAGS 和 INCLUDES这两行是 Android NDK 编译时的编译器选项&#xff0c;用于控制代码生成、优化、调试、安全性和头文件搜索路径。下面逐项详解&#xff1a; 1. FLAGS 详解&#xff08;编译器选项&#xff09; FLAGS 定义了传递给 C/C 编译器&#xff08;如 clang 或 gcc&…...

DGI数据治理框架的最佳实践

以下是针对DGI数据治理框架的最佳实践推荐&#xff0c;结合其核心理念与实际应用场景&#xff0c;帮助组织高效落地数据治理&#xff0c;释放数据价值。 一、组织架构与角色分工 最佳实践1&#xff1a;建立清晰的数据治理委员会 • 实践要点&#xff1a; • 由高层领导&#…...

C++类与对象深度解析:从基础到应用

目录&#xff1a; 1. 类的基本概念与定义1.1 类的定义与访问限定符1.2 实例化与对象内存布局1.3 this指针 2.类的默认成员函数2.1 构造函数与析构函数详解构造函数析构函数 2.2 拷贝构造函数2.3 赋值运算符重载运算符重载 3. 初始化列表4.类型转换5. 静态成员6.友元和内部类6.1…...

JGQ611Ⅱ数据采集电除雾器实验装置

JGQ611Ⅱ数据采集电除雾器实验装置 一.实验目的 1.掌握电除雾器的结构特征与工作原理。 2.测定风压、风速、电压、电流板间距等因素对酸雾去除效率的影响。 3.测定电除雾器的工作效率。 二.技术指标 1.电场电压&#xff1a;0&#xff5e;20KV&#xff08;可调&#xff09;。 2.…...

如何判断cgroup的版本?

在 Linux 系统中&#xff0c;判断当前使用的 cgroup 版本&#xff08;v1 还是 v2&#xff09;可以通过以下几种方法&#xff1a; 方法一&#xff1a;查看挂载点&#xff08;最直接&#xff09; mount | grep cgroup输出分析 cgroups v1&#xff1a;存在多个以 cgroup 开头的…...

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统

基于 Spark 和 Hadoop 的空气质量数据分析与预测系统 文章目录 基于 Spark 和 Hadoop 的空气质量数据分析与预测系统引言项目目标技术栈数据来源系统核心功能1. 用户认证与管理2. 数据总览3. 空气质量分析4. 词云图5. AQI 预测 项目结构预览关键代码分享1. Flask 主文件&#x…...

qt csv文件写操作

实例1&#xff1a; QStringList header; header << "1" << "2"; QStringList footer; footer << "Here is a footer"; QStringList strList; strList << "one" << "two" <&l…...

Java 反射

反射 反射的概述 获取class对象的三种方式 代码实现 package myreflect1;public class MyReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException {//1.第一种方式//全类名&#xff1a;包名类名//最为常用Class clazz1 Class.forName("…...

Spring-使用Java的方式配置Spring

目录 前言 一、使用Java配置Spring 前言 使用纯Java的配置方式&#xff0c;在SpringBoot中随处可见&#xff0c;是必须要学习的 一、使用Java配置Spring 配置Spring有多种方式&#xff0c;我们现在要完全不使用Spring的xml配置了&#xff0c;全权交给Java来做&#xff01; J…...

cudaMalloc函数说明

cudaMalloc函数说明 cudaError_t cudaMalloc(void** devPtr, size_t size);参数说明 devPtr (输出参数): 类型为 void**&#xff0c;即指向指针的指针。函数执行成功后&#xff0c;*devPtr 将被赋值为 GPU 内存的起始地址。例如&#xff1a;若分配一个 float 数组&#xff0c;需…...

路由协议(静态路由、RIP、OSPF、BGP)

目录 静态路由 RIP OSP BGP 总结 静态路由 定义&#xff1a;由网络管理员手动配置的路由。它不会自动更新&#xff0c;除非管理员手动修改。 特点&#xff1a; 简单&#xff1a;配置简单&#xff0c;适合小型网络。安全&#xff1a;不会与其他路由器交换路由信息&#x…...

基于 HTML5 的贪吃蛇小游戏实现

一、引言 在 Web 开发的世界中&#xff0c;利用 HTML、CSS 和 JavaScript 构建有趣的互动游戏是一项充满乐趣和挑战的任务。本文将详细介绍一个基于 HTML5 的贪吃蛇小游戏的实现过程&#xff0c;通过对代码的解析&#xff0c;带你了解如何打造一个经典的贪吃蛇游戏&#xff0c…...

学习Linux的第二天

如何在Linux环境下做开发 Linux的一些基操 Tips&#xff1a;平常最表层的是命令行模式&#xff0c;最多见这个默认叫做命令行模式 Vi操作是什么意思呢 就是在提示符输入vi a.c 是可以创建一个a.c这个文件并进入这个输入模式 按i可以输入代码 要退出的时候按esc 再按:(冒号…...

rollout 是什么:机器学习(强化学习)领域

rollout 是什么:机器学习(强化学习)领域 指从特定初始状态开始,按照某个策略或模型进行一系列动作和状态转移,直到达到终止状态或预定时间步数 。比如: 迷宫任务:强化学习代理在迷宫中,从起始点出发,按某策略(如随机选方向走)进行移动,直到找到出口或达到最大移动…...

MATLAB人工大猩猩部队GTO优化CNN-LSTM多变量时间序列预测

本博客来源于CSDN机器鱼&#xff0c;未同意任何人转载。 更多内容&#xff0c;欢迎点击本专栏目录&#xff0c;查看更多内容。 目录 0 引言 1 数据准备 2 CNN-LSTM模型搭建 3 GTO超参数优化 3.1 GTO函数极值寻优 3.2 GTO优化CNN-LSTM超参数 3.3 主程序 4 结语 0 引言…...

android-ndk开发(3): 连接设备到开发机

android-ndk开发(3): 连接设备到开发机 2025/05/05 1. 术语解释 用来写代码的电脑&#xff0c; 我叫做开发机。 我打心底认为 Windows, Linux, macOS 都是 PC&#xff0c; 但是有些人不这么认为&#xff0c; 那就还是叫开发机。 android 手机能运行 app&#xff08;众所周知…...

谷歌最新推出的Gemini 2.5 Flash人工智能模型因其安全性能相较前代产品出现下滑

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...