从 0 到 1 构建数仓之DWD层
在企业数字化转型进程中,数据仓库的建设至关重要,而 DWD 层(明细粒度事实层)作为数据仓库的核心支撑层,其搭建质量直接影响企业数据的分析价值与决策效率。本文将结合实际案例与行业经验,详细阐述企业如何从 0 到 1 搭建高效、可靠的 DWD 层。
1 DWD 层基础架构与核心概念
1.1 DWD 层在数据仓库体系中的定位
DWD 层处于数据仓库 ods - dwd - dws - ads 架构的关键位置,是对原始数据进行深度加工和精细化处理的重要层级。它承接来自 ODS 层的海量、繁杂的业务数据,这些数据可能源自不同的业务系统,如销售系统、财务系统、客户关系管理系统等,格式和语义各异。DWD 层通过一系列数据处理操作,将数据按照业务逻辑进行梳理和组织,转化为以业务过程为核心的明细事实表,为上层的 DWS 层和 ADS 层提供高质量的数据原料,确保数据分析的准确性和深度。
1.2 核心定义与设计原则
DWD 层遵循明细粒度事实层的设计理念,以业务过程为驱动构建事实表,确保每一行数据代表一个不可再分的业务原子事件。例如,在电商业务中,每一笔订单的商品明细、每一次用户的操作记录等都在这一层被精确记录。同时,为提升查询性能和减少数据关联的复杂性,依据企业的实际数据使用场景和分析需求,对重要的维度属性进行适当冗余,形成宽表结构。这种设计在保证数据完整性的同时,能够显著提高数据查询和分析的效率,减少复杂的表连接操作,使数据分析人员能够更便捷地获取所需数据。
2 DWD 层建模的关键步骤与实践要点
2.1 业务流程深度剖析与事实表确定
开展全面的业务调研,深入企业各个业务部门,与业务专家和一线工作人员进行充分沟通,详细了解业务的运作流程、关键环节和数据产生的源头。以制造业企业为例,需梳理从原材料采购、生产计划制定、生产过程执行、产品质量检测到成品销售及售后服务等全流程的数据脉络。
根据业务流程分析结果,识别出核心业务过程,并确定与之对应的事实表。如在销售业务流程中,订单生成、订单支付、订单发货等关键事件分别对应订单事实表、支付事实表和发货事实表。每张事实表应清晰界定其涵盖的业务范围和数据粒度,确保能够准确、完整地反映业务事实,为后续的数据分析提供坚实基础。
2.2 粒度精细声明与维度精准确认
粒度声明是 DWD 层建模的关键环节之一。在确定事实表的粒度时,需明确每一行数据所代表的业务细节程度。以物流运输业务为例,运输事实表的粒度可能细化到每一个包裹在每次运输任务中的详细信息,包括包裹编号、运输起点、运输终点、运输时间、运输费用、运输方式等。这种精细的粒度定义能够满足企业对物流运输过程的精细化分析需求,如分析不同运输路线的效率、不同时间段的运输量等。
维度确认需要从业务流程中提取与事实表相关的关键维度信息。常见的维度包括时间、用户、地点、产品、渠道等。在维度设计过程中,要确保维度的一致性和完整性。例如,对于时间维度,可能需要根据业务分析需求细分到年、月、日、时、分、秒等不同层次;对于用户维度,需整合来自不同数据源的用户信息,如用户基本资料、用户行为数据、用户偏好数据等,构建统一的用户维度表,并建立与事实表的有效关联。同时,要注重维度的可扩展性,以便在业务发展和数据分析需求变化时能够方便地添加新的维度属性。
2.3 事实度量准确界定与计算逻辑明确
事实度量是反映业务绩效和运营状况的关键指标,在 DWD 层建模中需要准确界定。在金融领域的交易事实表中,常见的事实度量包括交易金额、交易数量、手续费等;在电商销售事实表中,有商品销量、销售额、客单价、退货数量等。对于每个事实度量,必须明确其计算逻辑和数据来源,确保数据的准确性和一致性。例如,销售额的计算可能涉及商品单价、销售数量以及可能存在的折扣等因素,需要在数据处理过程中按照统一的计算规则进行计算,并在事实表中准确记录。
3 不同类型事实表的构建策略与案例详解
3.1 事务型事实表
适用场景与业务特性:事务型事实表适用于业务操作具有明确事务边界且数据相对稳定的场景。典型的应用场景包括金融交易、电信通话记录、电商订单处理等。以银行转账业务为例,每一笔转账交易都具有明确的开始和结束状态,一旦转账操作完成并提交,相关数据就成为一个不可更改的事务记录在转账事实表中。这种类型的业务数据通常采用增量同步策略,即只记录新发生的事务数据,确保事实表中的数据始终保持最新状态。
构建实例与技术细节:假设构建一个电商订单支付事务型事实表,源数据存储在 ODS 层的 ods_payment 和 ods_order 表中。首先,根据支付业务需求设计表结构,如下所示:
CREATE EXTERNAL TABLE dwd_fact_payment (payment_id VARCHAR(50) COMMENT '支付 ID',order_id VARCHAR(50) COMMENT '订单 ID',user_id VARCHAR(50) COMMENT '用户 ID',payment_amount DECIMAL(10, 2) COMMENT '支付金额',payment_time TIMESTAMP COMMENT '支付时间',payment_method VARCHAR(20) COMMENT '支付方式',-- 其他必要字段及注释) PARTITIONED BY (dt VARCHAR(10)) STORED AS PARQUET LOCATION '/warehouse/dwd/payment/';
在数据加载过程中,需要通过关联 ods_payment 和 ods_order 表获取所需字段,并将符合条件的数据插入到支付事实表中。例如:
INSERT OVERWRITE TABLE dwd_fact_payment PARTITION(dt = '2023-10-01')SELECTp.payment_id,p.order_id,o.user_id,p.payment_amount,p.payment_time,p.payment_methodFROMods_payment pJOIN ods_order o ON p.order_id = o.order_idWHEREp.dt = '2023-10-01';
在此过程中,需要注意关联条件的准确性和数据类型的一致性,确保数据能够正确加载到事实表中。
3.2 周期型快照事实表
适用场景与业务特性:周期型快照事实表常用于记录特定周期内业务状态的数据,如电商每日库存快照、企业每月财务报表数据等。这类数据的特点是关注业务在某个时间点的整体状态,数据会随着时间的推移而发生变化,但在每个周期内会生成一个相对稳定的全量快照。例如,电商平台需要每天记录各个商品的库存数量、库存金额等信息,以便分析库存的动态变化和销售趋势。由于这类数据的时效性较强,通常会采用全量同步策略,并根据业务需求定期清理过期的快照数据,以节省存储资源。
构建实例与技术细节:以电商每日商品库存快照事实表为例,源数据位于 ODS 层的 ods_inventory 表。创建表结构如下:
CREATE EXTERNAL TABLE dwd_fact_inventory_snapshot (product_id VARCHAR(50) COMMENT '商品 ID',warehouse_id VARCHAR(50) COMMENT '仓库 ID',inventory_quantity INT COMMENT '库存数量',inventory_value DECIMAL(10, 2) COMMENT '库存价值',snapshot_date DATE COMMENT '快照日期') PARTITIONED BY (dt VARCHAR(10)) STORED AS PARQUET LOCATION '/warehouse/dwd/inventory_snapshot/';
数据加载时,按照日期筛选 ODS 层的全量数据,并插入到库存快照事实表中,如:
INSERT OVERWRITE TABLE dwd_fact_inventory_snapshot PARTITION(dt = '2023-10-01')SELECTproduct_id,warehouse_id,inventory_quantity,inventory_value,CURRENT_DATE() AS snapshot_dateFROMods_inventoryWHEREdt = '2023-10-01';
在实际应用中,还可以根据业务需求对库存数据进行一些预处理和转换,如计算库存周转率、库存预警等指标,并将其添加到事实表中,以丰富数据分析的维度。
3.3 累积型快照事实表
适用场景与业务特性:累积型快照事实表主要用于跟踪具有生命周期且状态随时间动态变化的业务流程,如订单从创建、发货、运输到签收的全过程,或项目从启动、执行到完成的各个阶段跟踪等。这类业务数据需要不断更新以反映业务流程的进展情况,因此采用新增及变化同步策略。例如,在订单处理过程中,随着订单状态的不断变化,累积型快照事实表会记录每个阶段的时间节点和相关信息,以便企业能够全面了解订单的生命周期和处理效率,及时发现潜在的问题和瓶颈。
构建实例与技术细节:以订单全生命周期累积快照事实表为例,源数据分散在 ODS 层的 ods_order、ods_shipment、ods_delivery 等表中。首先创建表结构:
CREATE EXTERNAL TABLE dwd_fact_order_lifecycle (order_id VARCHAR(50) COMMENT '订单 ID',user_id VARCHAR(50) COMMENT '用户 ID',order_create_time TIMESTAMP COMMENT '订单创建时间',shipment_time TIMESTAMP COMMENT '发货时间',delivery_time TIMESTAMP COMMENT '送达时间',order_status VARCHAR(20) COMMENT '订单状态') PARTITIONED BY (dt VARCHAR(10)) STORED AS PARQUET LOCATION '/warehouse/dwd/order_lifecycle/';
在首日数据加载时,通过关联多个源表获取初始数据,并插入到累积快照事实表中:
INSERT OVERWRITE TABLE dwd_fact_order_lifecycle PARTITION(dt = '2023-10-01')SELECTo.order_id,o.user_id,o.order_create_time,s.shipment_time,d.delivery_time,o.order_statusFROMods_order oLEFT JOIN ods_shipment s ON o.order_id = s.order_idLEFT JOIN ods_delivery d ON o.order_id = d.order_idWHEREo.dt = '2023-10-01';
在每日数据更新时,需要通过与前一日数据进行全外连接(FULL OUTER JOIN),根据业务规则更新或插入新记录。例如:
SET hive.exec.dynamic.partition.mode = nonstrict;INSERT OVERWRITE TABLE dwd_fact_order_lifecycle PARTITION(dt)SELECTIF(n.order_id IS NULL, o.order_id, n.order_id),IF(n.user_id IS NULL, o.user_id, n.user_id),-- 其他字段类似处理COALESCE(n.order_create_time, o.order_create_time),COALESCE(n.shipment_time, o.shipment_time),COALESCE(n.delivery_time, o.delivery_time),IF(n.order_status IS NULL,o.order_status,n.order_status),COALESCE(n.dt, o.dt) AS dtFROM(SELECT*FROMdwd_fact_order_lifecycleWHEREdt IN (SELECTDATE_FORMAT(order_create_time, 'yyyy-MM-dd')FROMods_orderWHEREdt = '2023-10-02')) o FULLOUTER JOIN (SELECT*FROMods_orderWHEREdt = '2023-10-02') n ON o.order_id = n.order_id;
在这个过程中,需要特别注意数据的一致性和完整性,确保累积型快照事实表能够准确反映订单的全生命周期状态变化。
4 DWD 层建设的优化策略与优秀实践经验
4.1 数据质量保障体系的构建
a. 数据清洗规则与流程设计
-
在数据进入 DWD 层之前,建立严格的数据清洗规则和流程至关重要。首先,需要识别和处理数据缺失值。对于关键业务字段的缺失值,可以根据业务逻辑和数据分布情况采用合适的填充方法,如使用默认值、均值、中位数或基于其他相关字段进行估算。例如,在销售数据中,如果某个订单的金额缺失,可以参考同类型商品的平均销售价格或历史订单的价格进行估算。其次,要处理数据异常值。通过设定合理的阈值范围或运用统计方法识别异常数据点,并根据业务实际情况进行修正或删除。例如,在订单数量数据中,如果出现某个订单的商品数量远远超出正常范围,可能需要进一步核实数据的准确性,如有错误则进行纠正。此外,还需要进行数据去重操作,确保数据的唯一性。可以根据数据的主键或唯一标识字段进行查重,并删除重复记录。
-
数据清洗规则与流程的精细化设计
-
缺失值处理策略:在数据进入 DWD 层之前,需制定全面且针对性强的缺失值处理策略。对于关键业务字段的缺失值,应根据业务逻辑和数据分布特点采用合适的填充方法。例如,在客户信息表中,如果客户年龄缺失,可参考客户的购买行为数据、会员等级或同类客户的平均年龄进行估算;在订单表中,若订单金额缺失,可结合商品价格表和订单商品明细进行计算补充。同时,对于一些无法准确估算的缺失值,可根据数据的重要性和分析需求,选择标记为缺失或设置默认值,但需确保标记和默认值的设置不会对后续分析产生误导。
-
异常值识别与修正方法:建立有效的异常值识别机制是确保数据质量的关键环节。通过设定合理的阈值范围、运用统计分析方法(如标准差、箱线图等)或基于业务规则进行判断,识别出数据中的异常值。例如,在销售数据中,如果某一商品的销售价格远远高于同类商品的平均价格或历史价格范围,可能是数据录入错误或特殊促销活动导致,需进一步核实并进行修正。对于确认的异常值,可根据业务实际情况采取不同的处理方法,如修正为合理值、删除异常记录或单独存储并标记以便后续分析。在处理过程中,要充分记录异常值的识别和处理过程,以便追溯和分析数据质量问题的根源。
-
重复值去重操作要点:数据去重是保证数据唯一性和准确性的重要步骤。在 DWD 层建设中,根据数据的主键或唯一标识字段进行查重操作。例如,在订单事实表中,订单编号通常是唯一标识,可通过对订单编号进行查重,删除重复的订单记录。在去重过程中,要注意数据的完整性和一致性维护,确保去重操作不会误删有效数据。同时,对于可能存在的部分字段重复但整体记录不完全相同的情况,需根据业务规则进行判断和处理,如合并重复记录或选择保留最新或最完整的记录。
-
-
数据标准化的关键技术与实现路径
-
维度数据标准化:维度数据的标准化是确保数据一致性和可比性的基础。对于不同数据源中的时间维度,统一时间格式(如采用 ISO 8601 标准格式:YYYY-MM-DDTHH:MM:SSZ)和时区设置至关重要。例如,在整合来自全球不同地区的销售数据时,需将所有时间数据转换为统一的 UTC 时间,避免因时间格式和时区差异导致的数据分析错误。对于地理区域维度,需建立统一的地理编码标准,将不同的地名、地址等转换为标准的地理编码(如经纬度或行政区域代码),方便进行地理空间分析。在用户维度,统一用户信息的编码规则和分类标准,如用户性别统一用特定代码表示(如 0 表示未知、1 表示男性、2 表示女性),用户职业分类采用行业通用标准等,确保在不同业务场景和数据分析中用户维度数据的一致性和可用性。
-
度量值标准化:在度量值方面,统一数据的单位和精度是关键。例如,在财务数据中,确保所有金额数据的单位统一为人民币元,并根据业务需求设置合理的精度(如保留两位小数)。对于数量数据,如商品销售量、库存数量等,明确其计数单位(如件、千克、立方米等)并保持一致。在进行数据计算和汇总时,要遵循统一的计算规则和精度要求,避免因单位和精度不一致导致的计算错误和数据分析偏差。
-
b.数据质量监控与预警机制
建立完善的数据质量监控体系,实时或定期监测数据的质量指标。常见的监控指标包括数据完整性(如特定字段的非空比例)、准确性(如数据是否符合业务规则和逻辑)、一致性(如跨表关联数据的一致性)等。可以利用数据质量管理工具(如 Apache Griffin、Informatica Data Quality 等)实现自动化监控,并设置预警阈值。一旦数据质量指标超出阈值范围,及时触发警报通知相关人员进行处理。同时,要建立数据质量问题的追溯和处理记录机制,以便分析问题的根源和改进数据处理流程。
4.2 性能优化的关键技术与方法
存储格式与压缩算法选择:选择合适的存储格式和压缩算法是提高 DWD 层性能的重要手段之一。Parquet 和 ORC 是两种常用的列式存储格式,它们在大数据场景下具有良好的性能表现。Parquet 格式具有较高的压缩比和查询性能,特别适合分析型查询场景。它能够有效地减少数据存储体积,提高数据读取速度,尤其是在处理大规模数据集时优势明显。ORC 格式则在复杂查询和数据更新方面表现较好,支持更高效的索引和数据压缩。在选择存储格式时,需要根据数据的特点和查询需求进行综合考虑。同时,结合合适的压缩算法可以进一步优化存储性能。例如,对于数据重复率较高的场景,可以选择 Snappy 压缩算法,它能够快速压缩和解压缩数据,减少存储开销;对于对压缩比要求较高的场景,可以考虑 LZO 或 Zstd 压缩算法,它们能够提供更高的压缩比,但可能在压缩和解压缩速度上稍逊一筹。
分区与分桶策略应用:合理运用分区和分桶技术可以显著提升数据的查询和处理效率。分区可以按照时间(如年、月、日)、业务区域、数据类型等维度进行划分。例如,在销售数据中,可以按照销售日期进行分区,这样在查询特定时间段内的销售数据时,能够快速定位到相应的分区,避免全表扫描,大大提高查询速度。分桶则是根据某个或多个关键字段对数据进行哈希分桶。通过分桶,可以将数据均匀分布到多个桶中,提高数据的并行处理能力。例如,在用户行为数据中,可以根据用户 ID 进行分桶,在进行基于用户维度的分析时,能够并行处理各个桶中的数据,加速查询过程。在实际应用中,需要根据数据的分布情况和查询频率合理设计分区和分桶策略,避免过度分区或分桶导致的性能下降。
4.3 团队协作与沟通的有效模式
跨部门协同合作机制:DWD 层的建设涉及多个部门,包括数据开发团队、业务部门、数据运维团队等。建立有效的跨部门协同合作机制是确保项目顺利推进的关键。首先,数据开发团队需要与业务部门紧密合作,深入了解业务需求和业务流程。通过定期的业务需求调研会议、现场访谈等方式,确保数据模型能够准确反映业务实际情况。业务部门应提供详细的业务规则、数据来源和业务流程文档,帮助数据开发人员更好地理解业务。同时,数据开发团队要向业务部门解释数据处理的技术细节和可能的结果,确保双方在数据理解上达成一致。其次,数据开发团队与数据运维团队需要密切协作,保障数据的稳定加载、存储和维护。数据运维团队负责数据仓库的基础设施建设和运维管理,确保数据存储的可靠性和性能。数据开发团队在进行数据处理和模型开发时,要遵循数据运维团队制定的规范和标准,及时沟通数据处理过程中遇到的问题和需求。通过建立联合工作小组、定期的项目沟通会议等方式,加强跨部门之间的信息共享和协作,及时解决问题,确保项目按时交付。
知识共享与文档管理实践:在 DWD 层建设过程中,注重知识共享和文档管理能够提高团队的工作效率和项目的可维护性。建立详细的技术文档,包括数据模型设计文档、ETL 流程文档、数据字典等。数据模型设计文档应描述事实表和维度表的结构、关系、业务含义和设计思路;ETL 流程文档要详细记录数据从源系统到 DWD 层的抽取、转换和加载过程,包括使用的工具、技术和代码逻辑;数据字典则要定义数据仓库中各个字段的名称、数据类型、业务含义和数据来源。利用团队协作工具(如 Confluence、Wiki 等)进行文档管理和共享,方便团队成员随时查阅和学习。同时,要建立文档的版本控制机制,确保文档的准确性和及时性。通过知识共享和文档管理,新成员能够快速了解项目背景和技术细节,降低团队培训成本,提高项目的可持续发展能力。
5 总结与展望
DWD 层的搭建是企业数据仓库建设中的关键环节,需要综合考虑业务需求、数据特性、技术选型和团队协作等多方面因素。通过合理的建模设计、高效的数据处理和持续的优化改进,能够构建出高质量、高性能的 DWD 层,为企业数据分析和决策提供坚实的数据支撑。
在未来,随着企业数字化转型的加速和大数据技术的不断发展,DWD 层的建设也将面临新的挑战和机遇。一方面,企业业务的日益复杂和数据量的持续增长将对 DWD 层的处理能力和存储效率提出更高的要求;另一方面,新兴技术如人工智能、机器学习在数据仓库领域的应用将为 DWD 层的优化和智能化发展带来新的思路和方法。企业需要持续关注行业动态,不断引入新的技术和最佳实践,进一步提升 DWD 层的价值和作用,助力企业在激烈的市场竞争中赢得优势,实现数据驱动的可持续发展。
希望本文能为企业数据仓库从业者在 DWD 层搭建过程中提供全面、深入且实用的指导,推动企业数据管理水平的提升和数据驱动决策的有效实施。在实际项目中,应根据企业具体情况灵活运用上述方法和策略,不断总结经验,探索适合自身的最佳实践路径。
相关文章:
从 0 到 1 构建数仓之DWD层
在企业数字化转型进程中,数据仓库的建设至关重要,而 DWD 层(明细粒度事实层)作为数据仓库的核心支撑层,其搭建质量直接影响企业数据的分析价值与决策效率。本文将结合实际案例与行业经验,详细阐述企业如何从…...
S4 HANA手工记账Tax Payable – FB41
本文主要介绍在S4 HANA OP中手工记账Tax Payable – FB41。具体请参照如下内容: 手工记账Tax Payable – FB41 该事务代码用于手工处理税码统驭科目的记账,一般税码科目需要设置为只能自动记账,因此无法手工对税码统驭科目记账,但…...
【自然语言处理(NLP)】NLP实战:IMDB影评情感分析项目
文章目录 介绍IMDB影评情感分析项目数据集项目实现1. 导包2. 加载IMDB数据3. 查看部分数据4. 分词5. 加载数据整合6. 构建模型7. 词嵌入8. 初始化模型和权重9. glove词向量10. 训练和评估11. 预测 个人主页:道友老李 欢迎加入社区:道友老李的学习社区 介…...
DIY Shell:探秘进程构建与命令解析的核心原理
个人主页:chian-ocean 文章专栏-Linux 前言: Shell(外壳)是一个操作系统的用户界面,它提供了一种方式,使得用户能够与操作系统进行交互。Shell 是用户与操作系统之间的桥梁,允许用户通过命令行…...
通过Redisson构建延时队列并实现注解式消费
目录 一、序言二、延迟队列实现1、Redisson延时消息监听注解和消息体2、Redisson延时消息发布器3、Redisson延时消息监听处理器 三、测试用例四、结语 一、序言 两个月前接了一个4万的私活,做一个线上商城小程序,在交易过程中不可避免的一个问题就是用户…...
SQL Server配置管理器无法连接到 WMI 提供程序
目录 第一步第二部 第一步 发现没有资源管理器 在文件夹找到管理器 打开发现报这个错误 配置管理器无法连接到 WMI 提供程序第二部 https://blog.csdn.net/thb369208315/article/details/126954074...
Linux内核源码:ext4 extent详解
在 Linux 系统的庞大体系中,文件系统就像是一个井然有序的图书馆,而 ext4 文件系统则是这座图书馆中极为重要的 “藏书室”,它负责高效管理和存储数据。在 ext4 众多的奥秘中,ext4 extent 犹如一颗璀璨的明珠,起着关键…...
Maven jar 包下载失败问题处理
Maven jar 包下载失败问题处理 1.配置好国内的Maven源2.重新下载3. 其他问题 1.配置好国内的Maven源 打开⾃⼰的 Idea 检测 Maven 的配置是否正确,正确的配置如下图所示: 检查项⼀共有两个: 确认右边的两个勾已经选中,如果没有请…...
自指学习:AGI的元认知突破
文章目录 引言:从模式识别到认知革命一、自指学习的理论框架1.1 自指系统的数学定义1.2 认知架构的三重反射1.3 与传统元学习的本质区别二、元认知突破的技术路径2.1 自指神经网络架构2.2 认知效能评价体系2.3 知识表示的革命三、实现突破的关键挑战3.1 认知闭环的稳定性3.2 计…...
排序算法--希尔排序
希尔排序是插入排序的改进版本,适合中等规模数据排序,性能优于简单插入排序。 // 希尔排序函数 void shellSort(int arr[], int n) {// 初始间隔(gap)为数组长度的一半,逐步缩小for (int gap n / 2; gap > 0; gap …...
Java 2024年面试总结(持续更新)
目录 最近趁着金三银四面了五六家公司吧,也整理了一些问题供大家参考一下(适合经验三年左右的)。 面试问题(答案是我自己总结的,不一定正确): 总结: 最近趁着金三银四面了五六家公…...
TensorFlow是个啥玩意?
TensorFlow是一个开源的机器学习框架,由Google开发。它可以帮助开发者构建和训练各种机器学习模型,包括神经网络和深度学习模型。TensorFlow的设计理念是使用数据流图来表示计算过程,其中节点表示数学运算,边表示数据流动。 Tens…...
不可信的搜索路径(CWE-426)
漏洞描述:程序使用关键资源时(如动态链接库、执行文件、配置文件等)没有明确的指定资源的路径,而是依赖操作系统去搜索资源,这种行为可能被攻击者利用,通过在搜索优先级较高的目录放置不良资源,…...
Linux——基础命令
$:普通用户 #:超级用户 cd 切换目录 cd 目录 (进入目录) cd ../ (返回上一级目录) cd ~ (切换到当前用户的家目录) cd - (返回上次目录) pwd 输出当前目…...
利用TensorFlow.js实现浏览器端机器学习:一个全面指南
引言 随着深度学习技术的不断发展,机器学习已从传统的服务器端运算逐渐转向了前端技术。TensorFlow.js 是 Google 推出的一个用于在浏览器中进行机器学习的开源库,它允许开发者在浏览器中直接运行机器学习模型,而无需依赖后端服务器。Tensor…...
利用HTML和css技术编写学校官网页面
目录 一,图例展示 二,代码说明 1,html部分: 【第一张图片】 【第二张图片】 【第三张图片】 2,css部分: 【第一张图片】 【第二张图片】 【第三张图片】 三,程序代码 一,…...
SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器
1、Spring Security 密码编码器 Spring Security 作为一个功能完备的安全性框架,一方面提供用于完成加密操作的 PasswordEncoder 组件,另一方面提供一个可以在应用程序中独立使用的密码模块。 1.1 PasswordEncoder 抽象接口 在 Spring Security 中,PasswordEncoder 接口代…...
笔记:新能源汽车零部件功率级测试怎么进行?
摘要:本文旨在梳理主机厂对新能源汽车核心零部件功率级测试需求,通过试验室的主流设备仪器集成,快速实现试验方案搭建,并体现测试测量方案的时效性、便捷性优势。目标是通过提升实现设备的有效集成能力、实现多设备测试过程的有效协同、流程化测试,可快速采集、分析当前数…...
ES6中的map和原生的对象有什么区别?
在 ES6 中,Map 和原生的对象(Object)都是用来存储键值对数据的集合,但它们有显著的区别。以下是它们之间的主要区别: 1. 键的类型 Object: 只允许使用字符串或符号作为键。其他类型的键(如数字或对象&…...
2502vim,vim文本对象中文文档
介绍 文本块用户(textobj-user)是一个可帮助你毫不费力地创建自己的文本对象的Vim插件. 因为有许多陷阱需要处理,很难创建文本对象.此插件隐藏了此类细节,并提供了声明式定义文本对象的方法. 你可用正则式来定义简单的文本对象,或使用函数来定义复杂的文本对象.如… 文本对…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
如何配置一个sql server使得其它用户可以通过excel odbc获取数据
要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据,你需要完成以下配置步骤: ✅ 一、在 SQL Server 端配置(服务器设置) 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到:SQL Server 网络配…...
CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...
