实时计算:Azure Stream Analytics:实时计算案例研究:物联网数据分析_第1页
实时计算:Azure Stream Analytics:实时计算案例研究:物联网数据分析_第2页
实时计算:Azure Stream Analytics:实时计算案例研究:物联网数据分析_第3页
实时计算:Azure Stream Analytics:实时计算案例研究:物联网数据分析_第4页
实时计算:Azure Stream Analytics:实时计算案例研究:物联网数据分析_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实时计算:AzureStreamAnalytics:实时计算案例研究:物联网数据分析1实时计算与AzureStreamAnalytics1.11实时计算的重要性与应用场景实时计算技术在现代数据处理中扮演着至关重要的角色,尤其在物联网(IoT)、金融交易、社交媒体分析、网络安全监控等领域。它能够即时处理和分析数据流,提供即时反馈,这对于需要快速响应的场景至关重要。例如,在物联网中,实时计算可以用于监测设备状态,预测维护需求,或在异常情况发生时立即采取行动。1.1.1应用场景示例物联网监控:实时分析传感器数据,检测异常,触发警报。金融交易:实时监控市场数据,执行高频交易策略。社交媒体分析:实时分析用户活动,识别趋势,进行即时营销。网络安全:实时检测网络流量,识别潜在的攻击行为。1.22AzureStreamAnalytics概述与优势AzureStreamAnalytics是微软Azure平台提供的一项服务,用于处理和分析实时数据流。它基于SQL-like查询语言,使得数据工程师和分析师能够以接近实时的方式处理和分析数据,而无需编写复杂的流处理代码。1.2.1主要优势易于使用:提供SQL-like查询语言,降低学习曲线。可扩展性:能够处理每秒数百万事件的数据流。集成性:无缝集成Azure的其他服务,如AzureIoTHub、AzureEventHubs、AzureBlobStorage等。成本效益:按事件计费,无需预先购买计算资源。1.2.2示例:使用AzureStreamAnalytics处理物联网数据假设我们有一个物联网设备,每秒发送温度数据到AzureEventHubs。下面是一个简单的查询,用于检测温度是否超过阈值,并将结果发送到AzureBlobStorage。--AzureStreamAnalytics查询示例

WITHTemperatureDataAS(

SELECTdeviceId,temperature,timestamp

FROMinput

WHEREtemperature>30

)

SELECT*

INTOoutput

FROMTemperatureData在这个例子中,input是事件中心的输入流,output是Blob存储的输出。TemperatureData是一个CTE(CommonTableExpression),用于筛选温度超过30度的记录。1.33物联网数据流处理需求分析物联网数据流处理通常需要解决以下关键需求:数据清洗:去除无效或错误的数据。数据聚合:汇总数据,如计算平均温度。实时警报:当数据满足特定条件时,立即发送警报。数据存储与历史分析:将数据存储以供后续分析。数据安全与隐私:确保数据传输和存储的安全性,保护用户隐私。1.3.1需求分析示例假设我们正在监控一个智能城市的空气质量传感器。我们需要实时分析数据,当空气质量指数(AQI)超过100时,立即通知相关部门。同时,我们还需要将所有数据存储在AzureBlobStorage中,以供后续的历史分析。--AzureStreamAnalytics查询示例

WITHAQIDataAS(

SELECTdeviceId,aqi,timestamp

FROMinput

WHEREaqi>0ANDaqi<500--数据清洗,去除无效值

)

SELECT*

INTOoutput

FROMAQIData

WHEREaqi>100--实时警报条件在这个例子中,我们首先通过AQIDataCTE清洗数据,确保AQI值在合理范围内。然后,我们筛选出AQI超过100的记录,这些记录将被发送到output,即Blob存储。通过上述分析和示例,我们可以看到AzureStreamAnalytics在处理物联网数据流时的强大功能和灵活性,能够满足实时计算的多种需求。2设置AzureStreamAnalytics环境2.1创建AzureStreamAnalytics作业2.1.1环境搭建在开始创建AzureStreamAnalytics作业之前,首先需要确保你已经在Azure门户中注册并登录。接下来,按照以下步骤创建一个新的StreamAnalytics作业:打开Azure门户,在左侧菜单中选择“创建资源”。搜索StreamAnalytics,在搜索结果中选择“StreamAnalytics作业”并点击“创建”。填写基本信息,包括订阅、资源组、作业名称和位置。确保选择一个靠近数据源的区域以减少延迟。配置作业,在创建作业后,进入作业的“概述”页面,然后点击“输入”、“查询”和“输出”来分别配置。2.1.2示例代码//本示例代码用于说明如何使用AzureStreamAnalyticsSDK创建作业,但实际操作需在Azure门户中进行。

//下面的代码仅用于演示目的,展示如何使用C#与AzureStreamAnalytics交互。

usingMicrosoft.Azure.Management.StreamAnalytics;

usingMicrosoft.Azure.Management.StreamAnalytics.Models;

usingMicrosoft.Rest;

//创建StreamAnalytics管理客户端

varcredentials=SdkContext.AzureCredentialsFactory.FromServicePrincipal(clientId,clientSecret,tenantId,AzureEnvironment.AzureGlobalCloud);

varclient=newStreamAnalyticsManagementClient(credentials){SubscriptionId=subscriptionId};

//定义作业

varjob=newJob();

job.Name="MyIoTJob";

job.Location="eastus";

job.Sku=newSku{Name=SkuName.Standard};

job.JobProperties=newJobProperties();

job.JobProperties.Outputs=newList<Output>();

job.JobProperties.Inputs=newList<Input>();

job.JobProperties.Transformation=newTransformation();

//创建作业

varresponse=client.Jobs.CreateOrUpdate(resourceGroupName,job.Name,job);2.2配置输入源:物联网设备数据2.2.1数据源选择AzureStreamAnalytics支持多种输入源,对于物联网设备数据,通常使用AzureIoTHub或EventHubs作为输入。这些服务可以收集来自大量设备的实时数据,并将其转发给StreamAnalytics作业进行处理。2.2.2示例配置在AzureStreamAnalytics作业中添加输入源,具体步骤如下:选择输入源类型,在“输入”页面中,选择“添加输入”,然后选择“物联网中心”或“事件中心”作为数据源。填写输入源详情,包括输入源的名称、物联网中心或事件中心的连接字符串、事件格式等。2.2.3示例代码//本示例代码用于说明如何使用C#配置AzureStreamAnalytics作业的输入源。

//实际操作需在Azure门户中进行,但此代码展示了与AzureIoTHub交互的基本方法。

usingMicrosoft.Azure.Devices;

usingMicrosoft.Azure.Devices.Shared;

usingSystem;

usingSystem.Threading.Tasks;

//创建IoTHub注册表管理器

RegistryManagerregistryManager=RegistryManager.CreateFromConnectionString("HostName=MyIoTH;SharedAccessKeyName=iothubowner;SharedAccessKey=MyAccessKey");

//获取设备

Devicedevice=awaitregistryManager.GetDeviceAsync("MyDevice");

//读取设备的连接字符串

stringconnectionString=device.Authentication.SymmetricKey.PrimaryKey;2.3定义输出目标:存储或实时仪表板2.3.1输出目标选择StreamAnalytics作业处理完数据后,可以将结果输出到多种目标,包括AzureBlob存储、PowerBI、EventHubs等。选择输出目标时,应考虑数据的最终用途和访问需求。2.3.2示例配置配置输出目标的步骤如下:选择输出目标类型,在“输出”页面中,选择“添加输出”,然后选择“Blob存储”或“PowerBI”作为目标。填写输出目标详情,包括输出的名称、存储账户的连接字符串、容器名称或PowerBI的工作区ID等。2.3.3示例代码//本示例代码用于说明如何使用C#配置AzureStreamAnalytics作业的输出目标。

//实际操作需在Azure门户中进行,但此代码展示了如何与AzureBlob存储交互。

usingMicrosoft.WindowsAzure.Storage;

usingMicrosoft.WindowsAzure.Storage.Blob;

usingSystem;

//创建存储账户的云存储账户

CloudStorageAccountstorageAccount=CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=mykey;EndpointSuffix=");

//创建Blob服务客户端

CloudBlobClientblobClient=storageAccount.CreateCloudBlobClient();

//获取容器引用

CloudBlobContainercontainer=blobClient.GetContainerReference("mycontainer");

//创建容器(如果不存在)

container.CreateIfNotExists();通过上述步骤,你可以设置一个完整的AzureStreamAnalytics环境,用于处理物联网设备的实时数据,并将结果输出到AzureBlob存储或实时仪表板。这为实时监控和分析物联网数据提供了强大的工具。3编写与优化查询3.1使用SQL查询语言处理流数据在AzureStreamAnalytics中,处理流数据的核心是使用SQL查询语言。这不同于传统的SQL,因为它被设计用于实时数据流,允许你从连续的数据流中提取、过滤和分析数据。下面是一个示例,展示如何使用AzureStreamAnalytics的SQL查询语言来处理物联网设备发送的温度数据。--创建输入流

CREATEINPUT[TemperatureStream]WITH(

[DATApolicy='streaming'],

[EVENThubpolicy='inputpolicy'],

[SERIALIZATIONformat='json']

)

AS

SELECT*

FROM[DeviceMessages]

WHERE[DeviceMessages].Body.deviceType='TemperatureSensor';

--创建输出流

CREATEOUTPUT[TemperatureAlerts]WITH(

[DATApolicy='streaming'],

[EVENThubpolicy='outputpolicy'],

[SERIALIZATIONformat='json']

)

AS

SELECT[DeviceID],[Temperature],[Timestamp]

FROM[TemperatureStream]

WHERE[Temperature]>30;在这个例子中,我们首先创建了一个名为TemperatureStream的输入流,它从一个事件中心接收数据,数据格式为JSON。然后,我们创建了一个输出流TemperatureAlerts,当温度超过30度时,它将发送警报。这展示了如何使用SQL查询语言来过滤和选择特定的数据流。3.2实现数据聚合与窗口操作数据聚合和窗口操作是实时计算中非常重要的功能,它们允许你对数据流进行汇总分析,如计算平均值、最大值或最小值。在AzureStreamAnalytics中,你可以使用TUMBLE窗口函数来定义一个时间窗口,然后在该窗口内执行聚合操作。--使用TUMBLE窗口函数进行数据聚合

WITH[TemperatureTumble]AS(

SELECT[DeviceID],TUMBLE([Timestamp],INTERVAL'5'MINUTE)AS[WindowStart],AVG([Temperature])AS[AverageTemperature]

FROM[TemperatureStream]

GROUPBY[DeviceID],TUMBLE([Timestamp],INTERVAL'5'MINUTE)

)

SELECT[DeviceID],[AverageTemperature],[WindowStart]

FROM[TemperatureTumble]

WHERE[AverageTemperature]>25;在这个例子中,我们使用TUMBLE函数创建了一个5分钟的滚动窗口,并计算了每个窗口内设备的平均温度。如果平均温度超过25度,我们将生成一个警报。这种类型的查询对于监控和响应物联网设备的异常行为非常有用。3.3优化查询性能:使用参考数据与流数据连接AzureStreamAnalytics支持将参考数据与流数据连接,以增强实时分析的能力。参考数据可以是静态的,如设备配置或阈值设置,而流数据则是动态的,如传感器读数。通过连接这两种类型的数据,你可以实现更复杂的业务逻辑,同时保持查询的高效执行。--创建参考数据表

CREATEREFERENCE[DeviceConfig]WITH(

[DATApolicy='reference'],

[SERIALIZATIONformat='json']

)

AS

SELECT[DeviceID],[Threshold]

FROM[ConfigMessages];

--连接参考数据与流数据

SELECT[TemperatureStream].[DeviceID],[TemperatureStream].[Temperature],[DeviceConfig].[Threshold]

FROM[TemperatureStream]

JOIN[DeviceConfig]

ON[TemperatureStream].[DeviceID]=[DeviceConfig].[DeviceID]

WHERE[TemperatureStream].[Temperature]>[DeviceConfig].[Threshold];在这个例子中,我们首先创建了一个名为DeviceConfig的参考数据表,它包含了每个设备的温度阈值。然后,我们将TemperatureStream流数据与DeviceConfig参考数据连接,基于设备ID进行匹配。如果设备的温度超过了其配置的阈值,我们将生成一个警报。这种连接操作可以显著提高查询的性能和准确性,因为它避免了在流数据中进行复杂的条件检查。通过上述示例,我们可以看到AzureStreamAnalytics如何使用SQL查询语言、数据聚合和窗口操作以及参考数据连接来处理和分析物联网数据。这些技术的结合使用,使得实时计算在物联网数据分析中变得既强大又灵活。4案例研究:物联网数据分析应用4.1监测与预警:实时设备状态分析4.1.1实时设备状态分析原理实时设备状态分析是物联网(IoT)数据处理中的关键环节,它允许企业即时监控设备的运行状态,及时发现异常并发出预警,从而避免设备故障导致的生产中断。AzureStreamAnalytics作为微软Azure平台上的实时流数据处理服务,能够高效地处理来自IoT设备的大量数据,通过定义流数据查询,实时分析设备状态,识别潜在问题。4.1.2实时设备状态分析内容实时设备状态分析通常包括数据收集、数据处理、异常检测和预警通知四个步骤。AzureStreamAnalytics在数据处理阶段发挥核心作用,它能够接收来自IoTHub的设备数据,应用预定义的查询逻辑,实时计算设备的健康指标,并在检测到异常时触发预警。示例:实时温度异常检测假设我们有一组IoT设备,每分钟向IoTHub发送温度数据。我们的目标是实时检测温度是否超出正常范围,并在异常时发送预警。--AzureStreamAnalytics查询示例

WITHTemperatureDataAS(

SELECT

deviceId,

temperature,

TIMESTAMPAStime,

LAG(temperature,1)OVER(PARTITIONBYdeviceIdORDERBYTIMESTAMP)ASprevTemperature

FROM

[input]

)

SELECT

deviceId,

temperature,

time,

IIF(ABS(temperature-prevTemperature)>10,1,0)ASisAnomaly

INTO

[output]

FROM

TemperatureData

WHERE

isAnomaly=1;在这个示例中,我们首先使用WITH子句定义了一个名为TemperatureData的临时表,它包含了设备ID、温度、时间戳以及前一个温度值。然后,我们通过IIF函数计算当前温度与前一个温度的差值是否超过10度,如果超过,则标记为异常。最后,我们将异常记录输出到指定的输出流中。4.2预测性维护:基于历史数据的设备故障预测4.2.1预测性维护原理预测性维护利用历史数据和机器学习算法预测设备的未来状态,识别可能的故障模式,从而提前采取措施,减少非计划停机时间。AzureStreamAnalytics可以与AzureMachineLearning结合使用,将实时数据流与训练好的预测模型相结合,进行实时预测。4.2.2预测性维护内容预测性维护流程包括数据收集、特征工程、模型训练和实时预测。AzureStreamAnalytics在实时预测阶段发挥作用,它接收实时数据流,应用特征工程,将数据转换为模型可以理解的格式,然后调用AzureMachineLearning中的模型进行预测。示例:基于历史数据的设备故障预测假设我们已经训练了一个预测模型,用于预测设备的故障概率。现在,我们需要在AzureStreamAnalytics中实时应用这个模型。--AzureStreamAnalytics查询示例

WITHPredictedDataAS(

SELECT

deviceId,

temperature,

vibration,

TIMESTAMPAStime,

ML.Predict(ML.ModelName,temperature,vibration)ASfailureProbability

FROM

[input]

)

SELECT

deviceId,

time,

failureProbability

INTO

[output]

FROM

PredictedData

WHERE

failureProbability>0.8;在这个示例中,我们使用ML.Predict函数调用AzureMachineLearning中的模型ML.ModelName,并传入实时温度和振动数据作为输入,计算设备的故障概率。然后,我们将故障概率超过0.8的记录输出到指定的输出流中。4.3能源管理:实时能源消耗监控与优化4.3.1实时能源消耗监控与优化原理实时能源消耗监控与优化是通过持续监测能源使用情况,分析能源消耗模式,识别浪费和低效使用,从而优化能源管理,降低运营成本。AzureStreamAnalytics可以实时处理能源消耗数据,通过数据分析和算法应用,提供即时的优化建议。4.3.2实时能源消耗监控与优化内容实时能源消耗监控与优化包括数据收集、数据处理、模式分析和优化建议生成。AzureStreamAnalytics在数据处理和模式分析阶段发挥作用,它能够实时处理能源消耗数据,识别高消耗模式,并生成优化建议。示例:实时能源消耗模式分析假设我们有一组设备,每分钟向IoTHub发送能源消耗数据。我们的目标是实时分析能源消耗模式,识别高消耗时段。--AzureStreamAnalytics查询示例

WITHEnergyDataAS(

SELECT

deviceId,

energyConsumption,

TIMESTAMPAStime,

DATEPART(hour,TIMESTAMP)AShour

FROM

[input]

)

SELECT

hour,

AVG(energyConsumption)ASavgEnergyConsumption

INTO

[output]

FROM

EnergyData

GROUPBY

TumblingWindow(hour,1),

hour;在这个示例中,我们首先使用WITH子句定义了一个名为EnergyData的临时表,它包含了设备ID、能源消耗、时间戳以及小时数。然后,我们通过GROUPBY和TumblingWindow函数按小时计算平均能源消耗。最后,我们将结果输出到指定的输出流中,用于进一步的分析和优化决策。以上示例展示了如何使用AzureStreamAnalytics进行实时设备状态分析、基于历史数据的设备故障预测以及实时能源消耗监控与优化。通过这些技术,企业可以更有效地管理其物联网设备和能源使用,提高运营效率,降低成本。5整合与扩展AzureStreamAnalytics功能5.1集成AzureIoTHub与StreamAnalytics5.1.1原理与内容AzureIoTHub是一个用于连接和管理物联网设备的服务。它允许设备与云服务进行双向通信,是收集和处理来自物联网设备数据的理想起点。AzureStreamAnalytics则是一个用于实时分析流数据的服务,可以处理来自IoTHub的大量数据,进行实时分析和洞察。示例:从IoTHub读取数据并进行实时分析//创建一个AzureStreamAnalytics作业,输入源为IoTHub

//作业名称:IoTHubToStreamAnalytics

//输入源:IoTHubInput

//查询:SELECT*FROMIoTHubInputWHEREtemperature>30

//代码示例(使用AzureStreamAnalyticsSDK)

usingMicrosoft.Azure.StreamAnalytics;

usingMicrosoft.Azure.StreamAnalytics.Linq;

varjob=newStreamAnalyticsJob("IoTHubToStreamAnalytics");

varinput=job.Inputs.AddIoTHubInput("IoTHubInput","YourIoTHubConnectionString");

varquery=input.Select((row,context)=>new

{

DeviceId=row["deviceId"],

Temperature=row["temperature"],

Timestamp=context.Timestamp

}).Where(row=>(double)row.Temperature>30);

job.Outputs.Add("HotDeviceAlerts",query);

job.Start();5.1.2描述在上述示例中,我们创建了一个AzureStreamAnalytics作业,该作业从IoTHub读取数据,然后使用SQL类似的查询语言来筛选出温度超过30度的设备数据。筛选后的数据将被输出到另一个服务,例如AzureBlob存储或EventHubs,用于进一步处理或警报。5.2利用AzureMachineLearning进行深度分析5.2.1原理与内容AzureMachineLearning是一个用于构建、训练和部署机器学习模型的服务。通过将AzureStreamAnalytics与AzureMachineLearning结合使用,可以实现实时数据的深度分析,例如预测性维护、异常检测等。示例:使用AzureMachineLearning进行异常检测#使用AzureMachineLearningSDK来创建一个异常检测模型

#模型名称:AnomalyDetectionModel

#输入数据:温度数据流

#输出:异常检测结果

#代码示例

fromazureml.coreimportWorkspace

fromazureml.core.modelimportModel

fromazureml.streamsimportStreamAnalyticsJob

ws=Workspace.from_config()

model=Model(ws,"AnomalyDetectionModel")

#创建StreamAnalytics作业,使用MachineLearning服务

job=StreamAnalyticsJob("AnomalyDetectionJob")

job.inputs.add("TemperatureStream","YourIoTHubConnectionString")

job.outputs.add("AnomalyResults","YourOutputConnectionString")

#使用MachineLearning服务进行异常检测

job.query="""

WITHTemperatureDataAS(

SELECT

deviceId,

temperature,

TIMESTAMPDIFF(SECOND,LAG(temperature)OVER(PARTITIONBYdeviceIdORDERBYtimestamp),temperature)AStemperatureChange

FROMTemperatureStream

)

SELECT

deviceId,

temperature,

CASE

WHENtemperatureChange>10THEN'Anomaly'

ELSE'Normal'

ENDASstatus

FROMTemperatureData

"""

job.deploy(model)5.2.2描述在这个示例中,我们首先使用AzureMachineLearning创建了一个异常检测模型。然后,我们创建了一个AzureStreamAnalytics作业,该作业从IoTHub读取温度数据流,并使用模型来检测温度变化是否超过10度,以此判断是否为异常状态。检测结果将被输出到指定的服务,例如AzureTable存储,用于存储和查询异常事件。5.3通过AzureFunctions实现自定义处理逻辑5.3.1原理与内容AzureFunctions是一个无服务器计算服务,可以用于执行自定义的业务逻辑。通过在AzureStreamAnalytics作业中调用AzureFunctions,可以实现更复杂的数据处理和逻辑判断,例如基于规则的警报、数据清洗等。示例:使用AzureFunctions进行基于规则的警报//AzureFunctions代码示例

publicstaticvoidAlertFunction([StreamAnalyticsInput]dynamicinput,[StreamAnalyticsOutput]outdynamicoutput)

{

if(input.temperature>35&&input.humidity>80)

{

output=new

{

deviceId=input.deviceId,

temperature=input.temperature,

humidity=input.humidity,

timestamp=input.timestamp,

alert="HighTemperatureAndHumidity"

};

}

}

//AzureStreamAnalytics作业配置

//作业名称:RuleBasedAlerts

//输入源:IoTHubInput

//调用AzureFunctions:AlertFunction

//代码示例(使用AzureStreamAnalyticsSDK)

usingMicrosoft.Azure.StreamAnalytics;

usingMicrosoft.Azure.StreamAnalytics.Linq;

varjob=newStreamAnalyticsJob("RuleBasedAlerts");

varinput=job.Inputs.AddIoTHubInput("IoTHubInput","YourIoTHubConnectionString");

varfunction=job.Functions.AddFunction("AlertFunction","YourFunctionAppUrl");

varquery=input.Select((row,context)=>new

{

DeviceId=row["deviceId"],

Temperature=row["temperature"],

Humidity=row["humidity"],

Timestamp=context.Timestamp

});

query=query.InvokeFunction("AlertFunction");

job.Outputs.Add("Alerts",query);

job.Start();5.3.2描述在这个示例中,我们创建了一个AzureFunctions,该函数接收来自AzureStreamAnalytics的数据流,检查温度和湿度是否同时超过阈值(35度和80%),如果满足条件,则生成一个警报。AzureStreamAnalytics作业配置中,我们调用了这个AzureFunctions,将处理后的数据输出到另一个服务,例如AzureServiceBus,用于接收和处理警报信息。以上示例展示了如何整合AzureIoTHub、AzureStreamAnalytics、AzureMachineLearning和AzureFunctions,以实现物联网数据的实时收集、分析、深度处理和自定义逻辑执行。通过这些服务的组合使用,可以构建出功能强大、灵活多变的物联网数据处理和分析系统。6最佳实践与常见问题解决6.1设计高效的数据流处理架构在设计高效的数据流处理架构时,使用AzureStreamAnalytics进行物联网数据分析,关键在于理解数据流的特性以及如何优化数据处理流程。以下是一些核心原则和步骤:6.1.1数据源选择与优化选择合适的数据源:AzureStreamAnalytics支持多种数据源,包括IoTHub、EventHubs、BlobStorage等。选择与你的物联网设备最匹配的数据源,可以提高数据摄入效率。数据格式标准化:确保所有设备发送的数据格式一致,可以减少数据转

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论