版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据集成工具:ApacheNifi:Nifi数据流文件与属性理解1数据集成工具:ApacheNifi:Nifi数据流文件与属性理解1.1介绍ApacheNifi基础1.1.1Nifi的架构与组件ApacheNiFi是一个易于使用、功能强大且可靠的数据处理和分发系统。它被设计用于自动化数据流在不同的系统之间,如传统和现代IT系统,以实现数据的无缝集成。NiFi的架构基于流处理模型,其中数据被表示为流文件,并通过处理器在网络中移动。架构概述NiFiWebUI:提供了一个直观的用户界面,用于创建、监控和管理数据流。NiFiController:管理NiFi实例的配置和运行时状态。NiFiProcessors:执行数据流中的操作,如读取、转换、写入数据。NiFiConnections:连接处理器,定义数据流的路径。NiFiProvenance:记录数据流的完整历史,包括数据的来源、去向和处理过程。NiFiPolicies:定义数据流的安全性和访问控制。组件详解Processor:NiFi的核心组件,负责执行数据处理任务。例如,GetFile处理器用于从文件系统读取数据,PutFile处理器用于将数据写回到文件系统。Connection:连接两个处理器,定义数据流的方向。数据流文件从源处理器通过连接流向目标处理器。ControllerService:提供配置信息给处理器,如数据库连接、加密服务等。RemoteProcessGroup:用于在不同的NiFi实例之间传输数据,实现分布式数据处理。Funnel:汇聚多个连接到一个处理器,简化数据流的管理。Splitter:将数据流文件分割成多个子文件,用于并行处理或按需分发。Joiner:将多个数据流文件合并成一个,用于数据聚合。Queue:存储数据流文件,提供缓冲和调度机制。1.1.2数据流文件的概念与重要性在NiFi中,数据被封装在称为数据流文件的单元中。每个数据流文件包含两部分:内容和属性。数据流文件内容数据流文件的内容是实际的数据,可以是任何类型的数据,如文本、图像、音频、视频等。数据流文件的内容在NiFi内部通过字节流进行传输和处理。数据流文件属性数据流文件的属性是一组键值对,用于描述数据流文件的元数据。属性可以包括文件名、创建时间、数据类型等信息。这些属性对于数据的路由、过滤和处理至关重要。重要性路由和过滤:处理器可以基于数据流文件的属性来决定数据的流向,实现数据的智能路由和过滤。数据处理:属性可以被处理器用于动态配置处理逻辑,如根据文件类型选择不同的解析器。审计和追踪:属性记录了数据流文件的处理历史,有助于审计和追踪数据的来源和去向。性能优化:通过属性,NiFi可以实现数据的缓存和调度,提高数据处理的效率。示例:使用属性进行数据路由假设我们有一个数据流,其中包含不同类型的日志文件:access.log和error.log。我们希望将access.log文件发送到一个处理器进行访问统计,而将error.log文件发送到另一个处理器进行错误分析。<!--NiFiXML配置示例-->
<processorid="1"type="GetFile">
<propertyname="InputDirectory"value="/path/to/logs"/>
<propertyname="FileFilter"value="*.log"/>
</processor>
<processorid="2"type="RouteOnAttribute">
<propertyname="MatchType"value="equals"/>
<propertyname="Attribute"value="filename"/>
<propertyname="Value"value="access.log"/>
<connectionid="3"type="toAccessStats"destination="AccessStatsProcessor"/>
<connectionid="4"type="toErrorAnalysis"destination="ErrorAnalysisProcessor"/>
</processor>
<processorid="5"type="AccessStatsProcessor">
<!--处理access.log文件的统计-->
</processor>
<processorid="6"type="ErrorAnalysisProcessor">
<!--处理error.log文件的分析-->
</processor>在这个例子中,RouteOnAttribute处理器基于filename属性的值来决定数据流文件的去向。如果属性值等于access.log,数据流文件将被发送到AccessStatsProcessor;如果属性值等于error.log,数据流文件将被发送到ErrorAnalysisProcessor。通过这种方式,NiFi可以灵活地根据数据的特性进行智能路由,实现数据的高效处理和分析。2理解Nifi数据流文件2.1数据流文件的结构在ApacheNiFi中,数据流文件(FlowFile)是数据处理和传输的基本单位。每个FlowFile代表一个数据包,可以包含任何类型的数据,如文本、图像、音频、视频等。FlowFile的结构设计得非常灵活,以适应各种数据集成需求。2.1.1内容FlowFile的核心是其内容,存储在ContentRepository中。ContentRepository可以是磁盘、内存或任何其他持久化存储。内容可以是任何形式的数据,NiFi通过ContentRepository来管理这些数据的存储和检索。2.1.2属性FlowFile还包含一组属性,这些属性是键值对,用于描述数据的元数据。例如,一个包含图片的FlowFile可能有属性filename和imageType,分别描述图片的文件名和类型。这些属性在数据流中非常有用,因为NiFi的处理器可以基于这些属性来做出决策,如路由、过滤或转换数据。2.1.3关联关系FlowFile通过关联关系(Relationships)在NiFi的数据流中移动。当一个处理器完成对FlowFile的处理后,它会根据处理结果将FlowFile发送到一个或多个关联关系。每个关联关系代表数据流中的一个方向,如success、failure或自定义的routeToDB等。2.2数据流文件的生命周期数据流文件在NiFi中的生命周期从创建开始,到最终被终止或输出结束。这个过程涉及多个阶段,每个阶段都有其特定的处理器和策略。2.2.1创建数据流文件的创建通常发生在数据源处理器中,如GetFile、GetHTTP或GetFTP。这些处理器从外部系统读取数据,并将其封装成FlowFile,然后将其放入数据流中。<!--NiFiXML配置示例-->
<processorid="12345678-1234-1234-1234-1234567890ab"type="cessors.standard.GetFile">
<name>GetFile</name>
<scheduledState>ENABLED</scheduledState>
<autoTerminatedRelationships>
<relationship>success</relationship>
</autoTerminatedRelationships>
<properties>
<property>
<name>InputDirectory</name>
<value>/path/to/input/directory</value>
</property>
</properties>
</processor>2.2.2处理一旦FlowFile被创建,它将通过一系列的处理器进行处理。每个处理器可以读取、修改或删除FlowFile的内容和属性。例如,PutEmail处理器可以基于FlowFile的属性发送电子邮件。<!--NiFiXML配置示例-->
<processorid="abcdefgh-1234-1234-1234-1234567890ab"type="cessors.standard.PutEmail">
<name>PutEmail</name>
<scheduledState>ENABLED</scheduledState>
<autoTerminatedRelationships>
<relationship>success</relationship>
</autoTerminatedRelationships>
<properties>
<property>
<name>RecipientEmailAddress</name>
<value>recipient@</value>
</property>
<property>
<name>EmailSubject</name>
<value>${emailSubject}</value>
</property>
</properties>
</processor>2.2.3路由在处理过程中,FlowFile会根据处理器的逻辑和FlowFile的属性被路由到不同的关联关系。例如,如果一个FlowFile的处理失败,它可能会被路由到failure关系,而成功的FlowFile则会被路由到success关系。<!--NiFiXML配置示例-->
<processorid="ijklmnop-1234-1234-1234-1234567890ab"type="cessors.standard.SplitText">
<name>SplitText</name>
<scheduledState>ENABLED</scheduledState>
<relationships>
<relationship>success</relationship>
<relationship>failure</relationship>
</relationships>
<properties>
<property>
<name>LineSplitCount</name>
<value>100</value>
</property>
</properties>
</processor>2.2.4终止或输出数据流文件的生命周期最终会在数据终止处理器或输出处理器中结束。例如,PutFile处理器可以将FlowFile的内容写入到文件系统中,从而完成数据的输出。<!--NiFiXML配置示例-->
<processorid="qrstuvwxyz-1234-1234-1234-1234567890ab"type="cessors.standard.PutFile">
<name>PutFile</name>
<scheduledState>ENABLED</scheduledState>
<autoTerminatedRelationships>
<relationship>success</relationship>
</autoTerminatedRelationships>
<properties>
<property>
<name>OutputDirectory</name>
<value>/path/to/output/directory</value>
</property>
</properties>
</processor>2.2.5清理NiFi还提供了清理机制,用于管理ContentRepository中的数据。例如,CleanUp策略可以定期删除不再需要的FlowFile内容,以释放存储空间。<!--NiFiXML配置示例-->
<controllerServiceid="cleanup-1234-1234-1234-1234567890ab"type="org.apache.nifi.services.content.ContentRepositoryCleanup">
<name>CleanupContentRepository</name>
<properties>
<property>
<name>CleanupInterval</name>
<value>1hour</value>
</property>
</properties>
</controllerService>通过理解FlowFile的结构和生命周期,用户可以更有效地设计和管理NiFi的数据流,确保数据的正确处理和传输。3深入数据流文件属性3.1属性的定义与作用在ApacheNiFi中,数据流文件(FlowFile)是数据处理的基本单元。每个FlowFile都包含两部分:内容和属性。内容是实际的数据,而属性则是一组键值对,用于描述数据的元数据,如来源、目的地、处理步骤等。属性在数据流中扮演着关键角色,它们不仅帮助NiFi处理器(Processor)识别数据的特性,还用于动态地控制数据的流向和处理方式。3.1.1属性的定义属性是FlowFile的一部分,它们以键值对的形式存储。键是属性的名称,值是与该名称相关的数据。例如,一个属性可能被命名为filename,其值可能为/path/to/file.csv。这些属性可以由NiFi的处理器、控制器服务或报告任务创建、修改或删除。3.1.2属性的作用数据识别:属性可以用来识别数据的类型或来源,如mime.type或source.system。动态路由:通过属性,NiFi可以动态地决定数据流文件的下一步处理,例如,根据content.type属性将数据路由到不同的处理器。数据处理:属性可以被处理器用来决定如何处理数据,如compression.codec可以指定数据的压缩方式。审计和跟踪:属性可以记录数据流文件的处理历史,如provenance.event.id,这对于审计和故障排查非常有用。3.2如何使用属性进行数据处理在NiFi中,处理器可以通过属性来决定数据的处理逻辑。例如,一个处理器可能需要根据数据的类型(由属性mime.type表示)来选择不同的处理方式。下面,我们将通过一个具体的例子来说明如何在NiFi中使用属性。3.2.1示例:根据文件类型进行数据处理假设我们有一个数据流,其中包含多种类型的文件,如CSV、JSON和XML。我们的目标是根据文件类型将数据路由到不同的处理器进行处理。这可以通过使用GetFile处理器和RouteOnAttribute处理器来实现。使用GetFile处理器读取文件:配置GetFile处理器以监控一个目录,当有新文件到达时,它会创建一个FlowFile,并将文件的元数据(如文件名、大小、创建时间等)作为属性添加到FlowFile中。使用RouteOnAttribute处理器进行路由:RouteOnAttribute处理器可以读取FlowFile的属性,并根据属性值将数据流文件路由到不同的输出通道。在这个例子中,我们可以配置RouteOnAttribute处理器来读取mime.type属性,并根据其值将数据流文件路由到处理CSV、JSON或XML的特定处理器。配置RouteOnAttribute处理器-**属性选择**:选择`mime.type`作为路由属性。
-**路由规则**:
-如果`mime.type`的值为`text/csv`,则将数据流文件发送到`CSVProcessor`通道。
-如果`mime.type`的值为`application/json`,则将数据流文件发送到`JSONProcessor`通道。
-如果`mime.type`的值为`application/xml`,则将数据流文件发送到`XMLProcessor`通道。
-如果`mime.type`的值不匹配上述任何规则,则将数据流文件发送到`UnknownType`通道。3.2.2使用处理器进行数据处理一旦数据流文件被路由到特定的通道,就可以使用相应的处理器进行处理。例如,处理CSV文件的处理器可能需要读取filename属性来确定文件的完整路径,然后使用该路径来读取和解析CSV数据。示例:CSV处理器配置-**处理器名称**:`CSVProcessor`
-**配置**:
-**文件路径属性**:`filename`
-**解析规则**:根据`filename`属性的值读取文件,并使用预定义的CSV解析规则来处理数据。通过这种方式,NiFi可以灵活地处理不同类型的数据,而无需为每种类型的数据编写单独的处理逻辑。属性的使用使得数据处理流程更加动态和可配置,从而提高了NiFi在复杂数据集成场景中的适应性和效率。在实际操作中,NiFi的属性使用和配置可以通过NiFi的图形用户界面进行,无需编写代码。但是,理解属性的原理和作用对于设计高效、灵活的数据处理流程至关重要。通过上述示例,我们可以看到,属性不仅简化了数据的识别和处理,还使得数据流的控制更加动态和智能。4操作与管理数据流文件4.1数据流文件的操作技巧在ApacheNiFi中,数据流文件(FlowFile)是数据处理的基本单元。每个FlowFile代表一个数据包,可以包含任意类型的数据。NiFi提供了丰富的操作技巧来处理这些数据流文件,包括但不限于数据的读取、写入、转换、路由和分发。4.1.1读取数据流文件NiFi通过源头处理器(如GetFile、GetHTTP)读取数据。例如,GetFile处理器可以从文件系统中读取文件并将其转换为FlowFile。<!--GetFile处理器配置示例-->
<processor>
<type>cessors.standard.GetFile</type>
<name>GetFileExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>InputDirectory</name>
<value>/path/to/input/directory</value>
</property>
<property>
<name>KeepSourceFile</name>
<value>false</value>
</property>
</properties>
</processor>4.1.2写入数据流文件NiFi的PutFile处理器可以将FlowFile写入文件系统。例如,将处理后的数据写入指定目录。<!--PutFile处理器配置示例-->
<processor>
<type>cessors.standard.PutFile</type>
<name>PutFileExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>OutputDirectory</name>
<value>/path/to/output/directory</value>
</property>
<property>
<name>FilenameFormat</name>
<value>${uuid}-${filename}</value>
</property>
</properties>
</processor>4.1.3转换数据流文件UpdateAttribute处理器可以修改FlowFile的属性,例如添加、删除或更新元数据。<!--UpdateAttribute处理器配置示例-->
<processor>
<type>cessors.standard.UpdateAttribute</type>
<name>UpdateAttributeExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>AttributeExpressionLanguage</name>
<value>newAttribute=${oldAttribute:replace('old','new')}</value>
</property>
</properties>
</processor>UpdateContent处理器可以修改FlowFile的内容,例如替换文本或添加数据。<!--UpdateContent处理器配置示例-->
<processor>
<type>cessors.standard.UpdateContent</type>
<name>UpdateContentExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>ContentExpressionLanguage</name>
<value>${content:replace('old','new')}</value>
</property>
</properties>
</processor>4.1.4路由数据流文件RouteOnAttribute处理器根据FlowFile的属性值进行路由,将数据发送到不同的输出通道。<!--RouteOnAttribute处理器配置示例-->
<processor>
<type>cessors.standard.RouteOnAttribute</type>
<name>RouteOnAttributeExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>RoutingStrategy</name>
<value>Routetoasinglerelationshipbasedonattributevalue</value>
</property>
<property>
<name>AttributetoRouteOn</name>
<value>priority</value>
</property>
<property>
<name>RoutetoRelationship</name>
<value>highPriorityif${priority}=='high'</value>
</property>
</properties>
</processor>4.1.5分发数据流文件SplitText处理器可以将一个大的数据流文件分割成多个小的FlowFile,基于文本内容。<!--SplitText处理器配置示例-->
<processor>
<type>cessors.standard.SplitText</type>
<name>SplitTextExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>LineSplitter</name>
<value>Line</value>
</property>
<property>
<name>LineSplitterConfiguration</name>
<value>LineTerminator:\n</value>
</property>
</properties>
</processor>4.2数据流文件的管理与监控NiFi提供了强大的工具来管理与监控数据流文件,确保数据处理的效率和准确性。4.2.1管理数据流文件暂停与恢复处理器:在NiFi界面中,可以轻松地暂停和恢复处理器,控制数据流的处理速度。终止数据流文件:当数据流文件不再需要时,可以使用TerminateFlowFile处理器来终止它,释放资源。<!--TerminateFlowFile处理器配置示例-->
<processor>
<type>cessors.standard.TerminateFlowFile</type>
<name>TerminateFlowFileExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
</processor>4.2.2监控数据流文件使用LogAttribute处理器:可以记录FlowFile的属性,便于监控和调试。使用LogMessage处理器:可以记录FlowFile的内容,帮助理解数据流的细节。<!--LogAttribute处理器配置示例-->
<processor>
<type>cessors.standard.LogAttribute</type>
<name>LogAttributeExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>LogLevel</name>
<value>INFO</value>
</property>
<property>
<name>AttributestoLog</name>
<value>filename,size,priority</value>
</property>
</properties>
</processor>4.2.3数据流文件的统计与报告NiFi的统计和报告功能可以提供关于数据流文件处理的详细信息,包括处理速度、错误率等。这些信息可以通过NiFi的监控仪表板或使用Report处理器生成报告。<!--Report处理器配置示例-->
<processor>
<type>cessors.standard.Report</type>
<name>ReportExample</name>
<bundle>
<groupId>org.apache.nifi</groupId>
<artifactId>nifi-standard-nar</artifactId>
<version>1.13.0</version>
</bundle>
<properties>
<property>
<name>ReportType</name>
<value>ProcessorStatistics</value>
</property>
<property>
<name>ReportFilePath</name>
<value>/path/to/report/file</value>
</property>
</properties>
</processor>通过上述操作与管理技巧,可以有效地控制和优化ApacheNiFi中的数据流文件处理流程,确保数据集成任务的高效执行。5实战案例:使用Nifi属性进行数据集成5.1案例分析:属性在数据集成中的应用在ApacheNifi中,属性(Properties)是配置处理器(Processors)、控制器服务(ControllerServices)和报告任务(ReportingTasks)的关键元素。它们允许用户自定义数据流的行为,从而实现灵活的数据集成。属性可以是静态的,也可以是动态的,后者允许在运行时根据数据流中的条件进行更改。5.1.1静态属性静态属性在创建或编辑处理器时设置,它们不会在数据流运行过程中改变。例如,当使用GetFile处理器从文件系统中读取数据时,可以设置InputDirectory属性来指定文件的来源。-**处理器名称**:GetFile
-**属性**:InputDirectory
-**值**:/path/to/input/directory5.1.2动态属性动态属性则可以在数据流运行时根据需要进行更改。这通常通过表达式语言(ExpressionLanguage)实现,该语言允许用户在属性值中插入变量,这些变量可以是系统属性、流程属性或来自数据流文件的属性。例如,使用PutFile处理器时,可以设置FilePath属性为动态表达式,如${output.dir}/${filename},其中${output.dir}是一个系统属性,${filename}是从数据流文件中获取的属性。-**处理器名称**:PutFile
-**属性**:FilePath
-**值**:${output.dir}/${filename}5.1.3属性在数据集成中的作用路径配置:动态属性可以用于根据数据内容或外部条件动态生成文件路径,如上例所示。数据过滤:通过设置处理器的属性,可以过滤特定的数据流文件,例如,使用QueryRecord处理器时,可以设置SQL查询语句作为属性,以选择满足特定条件的记录。数据转换:属性可以用于配置转换规则,如使用ReplaceText处理器时,可以设置要替换的文本和替换后的文本作为属性。错误处理:动态属性可以用于配置错误处理策略,例如,当数据流文件不符合预期格式时,可以将其重定向到特定的错误目录。5.2最佳实践:优化数据流文件处理在使用Nifi进行数据集成时,合理地使用和配置属性可以显著提高数据流的效率和灵活性。以下是一些最佳实践:5.2.1使用动态属性减少硬编码避免在属性中使用硬编码的值,如文件路径或数据库连接字符串。相反,使用动态属性,这样可以在不修改数据流的情况下轻松地更改这些值。5.2.2利用表达式语言Nifi的表达式语言非常强大,可以用于生成动态属性值。例如,可以使用${now()}来获取当前时间,或者${uuid()}来生成一个唯一的UUID。5.2.3优化属性的使用避免不必要的属性设置:只设置处理器真正需要的属性,过多的属性设置会增加数据流的复杂性。使用属性引用:如果多个处理器需要相同的属性值,可以使用属性引用(如${myProperty})来避免重复设置。定期审查属性配置:随着数据流的演变,定期审查和更新属性配置,以确保它们仍然满足当前的需求。5.2.4利用控制器服务控制器服务可以提供动态属性,如数据库连接、加密服务等。通过将这些服务与处理器关联,可以简化属性的管理,并提高数据流的可维护性。5.2.5测试和验证属性配置在数据流投入生产之前,确保对所有属性配置进行充分的测试和验证。使用Nifi的测试功能,如RunValidation,来检查属性设置是否正确。5.2.6文档化属性使用为数据流中的每个处理器和其属性创建详细的文档,包括属性的用途、默认值和可能的动态表达式。这将有助于团队成员理解和维护数据流。通过遵循这些最佳实践,可以确保在使用ApacheNifi进行数据集成时,属性的使用既高效又灵活,从而提高数据处理的性能和可维护性。6进阶:自定义属性与表达式语言6.1自定义属性的创建与使用在ApacheNiFi中,自定义属性允许用户在数据流中存储和检索特定信息,这为处理流程提供了更大的灵活性和动态性。自定义属性可以被NiFi处理器、控制器服务或表达式语言引用,以实现基于属性的决策逻辑。6.1.1创建自定义属性自定义属性的创建通常在NiFi的控制器服务中进行,例如ScriptingControllerService或StandardControllerService。下面是一个使用ScriptingControllerService(以JavaScript为例)创建自定义属性的示例://在ScriptingControllerService中创建自定义属性
varcustomProperty='myCustomProperty';
varcustomValue='myCustomValue';
//设置自定义属性
flowFile=session.putAttribute(flowFile,customProperty,customValue);
session.transfer(flowFile,REL_SUCCESS);6.1.2使用自定义属性一旦自定义属性被创建,它就可以在数据流中的任何处理器中被引用。例如,使用PutFile处理器将文件输出到特定目录,该目录路径可以基于自定义属性动态决定:<propertyname="Directory"value="${myCustomProperty}/output"/>在这个例子中,${myCustomProperty}将被替换为在控制器服务中设置的值myCustomValue,因此文件将被输出到myCustomValue/output目录。6.2Nifi表达式语言详解NiFi表达式语言是一种强大的工具,用于在数据流中动态生成属性值。它支持变量引用、函数调用和条件语句,使得数据处理流程更加灵活和可配置。6.2.1变量引用在表达式语言中,可以使用${variableName}来引用NiFi中的属性或系统变量。例如,下面的表达式将引用名为myVariable的属性:<propertyname="Directory"value="${myVariable}/data"/>6.2.2函数调用表达式语言支持多种函数,用于数据转换和处理。例如,substring函数可以用于截取字符串的一部分:<propertyname="Filename"value="${substring(${filename},0,5)}_new"/>在这个例子中,substring函数将从filename属性的值中截取前5个字符,并在后面添加_new。6.2.3条件语句表达式语言还支持条件语句,如if语句,用于基于属性值的决策。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 资产公司垫资协议书范本模板
- 吉林艺术学院《材料研究》2021-2022学年第一学期期末试卷
- 吉林师范大学《知识产权法》2021-2022学年第一学期期末试卷
- 2022年江苏省公务员录用考试《行测》真题(C类)及答案解析
- 黄金提纯厂合作协议书范文范本
- 吉林师范大学《体育社会学》2021-2022学年第一学期期末试卷
- 金融机构员工休息室规范
- 在线乐器教学平台实施方案
- 吉林师范大学《电子商务法》2021-2022学年第一学期期末试卷
- 吉林大学《植物分子育种学》2021-2022学年第一学期期末试卷
- 认识经济全球化 说课课件-2023-2024学年高中政治统编版选择性必修一当代国际政治与经济
- 2024网站渗透测试报告
- 2023-2024学年七年级上册语文期中考试高频考点13 写作实践解析版
- 九年级上期中考试质量分析
- DB-T29-139-2015天津市房屋修缮工程质量验收标准
- 消防安全知识宣讲会
- 金融服务创新联合体协议书
- 单词默写表(素材)-2023-2024学年人教PEP版英语五年级上册
- 发票勾选认证培训课件
- 2024年高考数学复习备考策略讲座
- 2022版义务教育(生物学)课程标准(附课标解读)
评论
0/150
提交评论