数据仓库:Snowflake:Snowflake数据仓库的运维与监控_第1页
数据仓库:Snowflake:Snowflake数据仓库的运维与监控_第2页
数据仓库:Snowflake:Snowflake数据仓库的运维与监控_第3页
数据仓库:Snowflake:Snowflake数据仓库的运维与监控_第4页
数据仓库:Snowflake:Snowflake数据仓库的运维与监控_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

数据仓库:Snowflake:Snowflake数据仓库的运维与监控1Snowflake数据仓库简介1.1Snowflake架构概述Snowflake是一种云原生的数据仓库解决方案,其架构设计独特,采用了存算分离(SeparationofStorageandCompute)和多云支持(Multi-CloudSupport)的理念。这种架构允许数据存储和计算资源独立扩展,从而提高了效率和成本效益。1.1.1存算分离数据存储:数据以优化的列式存储格式保存在云存储中,如AmazonS3或MicrosoftAzureBlobStorage。这种存储方式支持大规模数据的高效读取和写入。计算资源:计算资源(即虚拟仓库)可以独立于存储资源进行扩展。这意味着用户可以根据查询需求动态调整计算能力,而无需移动数据。1.1.2多云支持Snowflake支持在多个云平台上运行,包括AmazonAWS、MicrosoftAzure和GoogleCloudPlatform。这种多云策略提供了灵活性,允许用户根据其业务需求和云策略选择最适合的云环境。1.2Snowflake的关键特性1.2.1弹性扩展Snowflake允许用户根据需要动态调整计算资源。例如,当执行复杂查询时,可以增加计算节点以加速处理速度;在低负载期间,可以减少计算节点以降低成本。--创建一个虚拟仓库,指定其大小和自动扩展策略

CREATEWAREHOUSEmy_warehouse

WAREHOUSE_SIZE='XSMALL'

AUTO_SUSPEND=300

AUTO_RESUME=TRUE

MIN_CLUSTER_COUNT=1

MAX_CLUSTER_COUNT=5;1.2.2无管理Snowflake是一种无管理的数据仓库,用户无需担心硬件维护、软件升级或数据备份等任务。所有这些操作都由Snowflake自动处理,使用户能够专注于数据和分析,而不是基础设施管理。1.2.3安全性Snowflake提供了强大的安全功能,包括数据加密、网络隔离和细粒度的访问控制。用户可以设置复杂的权限和角色,以确保数据的安全性和合规性。--创建一个角色并授予特定权限

CREATEROLEmy_role;

GRANTSELECTONTABLEmy_tableTOROLEmy_role;1.2.4数据共享Snowflake的共享功能允许用户轻松地与外部组织共享数据,而无需复制或导出数据。这种共享机制可以实时更新,确保共享数据的最新性和一致性。--创建一个共享对象

CREATESHAREmy_share;

--向共享对象添加表

GRANTSELECTONTABLEmy_tableTOSHAREmy_share;1.2.5数据集成Snowflake支持与多种数据源的集成,包括结构化和非结构化数据。它可以通过多种方式(如复制、导入或使用外部表)轻松地将数据集成到数据仓库中。--从AmazonS3导入数据到Snowflake表

COPYINTOmy_table

FROM@my_stage/my_file.csv

CREDENTIALS=(AWS_KEY_ID='my_key_id',AWS_SECRET_KEY='my_secret_key')

FILE_FORMAT=(TYPE='CSV',FIELD_DELIMITER=',',SKIP_HEADER=1);1.2.6实时分析Snowflake的数据仓库设计允许实时分析大规模数据集。它支持实时数据加载和查询,使得用户能够立即从最新数据中获取洞察。--实时查询数据

SELECT*FROMmy_tableWHEREdate=CURRENT_DATE();1.2.7支持多种数据类型Snowflake支持包括结构化、半结构化和非结构化数据在内的多种数据类型。它能够直接查询JSON和XML数据,无需预先转换数据格式。--查询JSON数据

SELECTparse_json(json_column)->>'$.key'ASvalue

FROMmy_json_table;1.2.8自动优化Snowflake自动优化数据存储和查询性能,包括自动数据压缩、列式存储和查询优化。这减少了用户的管理负担,同时提高了数据仓库的性能。--自动优化查询

SELECT*FROMmy_tableWHEREcolumn1='value'ANDcolumn2>100;通过上述特性,Snowflake为用户提供了一个强大、灵活且易于管理的数据仓库解决方案,适用于各种规模和复杂度的数据分析需求。2数据仓库:Snowflake:Snowflake数据仓库的运维与监控2.1Snowflake运维基础2.1.1账户和仓库管理在Snowflake中,账户管理是运维的基础。账户是Snowflake环境的最高级别,包含所有用户、角色、仓库、数据库、模式、表等资源。仓库是Snowflake的计算资源,用于执行查询和数据处理任务。创建账户Snowflake的账户通常由Snowflake的销售团队或合作伙伴创建,但作为运维人员,你需要了解账户的结构和配置。管理仓库仓库的管理包括创建、修改和删除仓库。以下是一个创建仓库的例子:--创建一个名为my_warehouse的仓库

CREATEWAREHOUSEmy_warehouse

WAREHOUSE_SIZE='XSMALL'

AUTO_SUSPEND=300

AUTO_RESUME=TRUE

MIN_CLUSTER_COUNT=1

MAX_CLUSTER_COUNT=1;在这个例子中,我们创建了一个名为my_warehouse的仓库,其大小为XSMALL,自动暂停时间为300秒,自动恢复功能开启,最小和最大集群数量均为1。2.1.2用户和角色管理用户和角色管理是Snowflake安全性和访问控制的核心。用户是Snowflake账户中的实体,可以是人或应用程序。角色是一组权限的集合,可以授予用户。创建用户创建用户需要管理员权限。以下是一个创建用户的例子:--创建一个名为my_user的用户

CREATEUSERmy_user

PASSWORD='my_password'

DEFAULT_ROLE='my_role'

MUST_CHANGE_PASSWORD=FALSE;在这个例子中,我们创建了一个名为my_user的用户,其默认角色为my_role,并且不需要更改密码。创建角色创建角色同样需要管理员权限。以下是一个创建角色的例子:--创建一个名为my_role的角色

CREATEROLEmy_role;然后,你可以将权限授予这个角色:--将对my_database数据库的访问权限授予my_role角色

GRANTUSAGEONDATABASEmy_databaseTOROLEmy_role;2.1.3资源监控与优化Snowflake提供了多种工具和指标来监控和优化资源使用,包括查询监控、仓库监控和存储监控。查询监控查询监控可以帮助你了解查询的性能和资源使用情况。以下是一个查询监控的例子:--查看最近的查询历史

SELECT*FROMtable(information_schema.query_history());这个查询将返回最近的查询历史,包括查询的开始和结束时间、查询的文本、查询的仓库、查询的状态等信息。仓库监控仓库监控可以帮助你了解仓库的资源使用情况。以下是一个仓库监控的例子:--查看仓库的使用情况

SELECT*FROMtable(information_schema.warehouses());这个查询将返回仓库的详细信息,包括仓库的名称、大小、状态、当前的CPU使用率、当前的内存使用率等信息。存储监控存储监控可以帮助你了解存储的使用情况。以下是一个存储监控的例子:--查看存储的使用情况

SELECT*FROMtable(information_schema.tables());这个查询将返回所有表的详细信息,包括表的名称、数据库、模式、行数、数据大小等信息。以上就是Snowflake数据仓库的运维与监控的基本内容,包括账户和仓库管理、用户和角色管理以及资源监控与优化。通过这些操作,你可以有效地管理和优化你的Snowflake数据仓库,提高数据处理的效率和安全性。3数据仓库:Snowflake:数据加载与管理3.1数据加载最佳实践在Snowflake中,数据加载是一个关键步骤,直接影响到数据仓库的性能和数据的可用性。以下是一些最佳实践,帮助你更高效地加载数据:3.1.1使用COPYINTO命令Snowflake的COPYINTO命令是加载数据到表中的最有效方式。它支持从多种数据源(如S3、AzureBlobStorage等)直接加载数据,而无需先将数据导入到Snowflake的本地文件系统。示例代码--将数据从S3加载到Snowflake表中

COPYINTOmy_table

FROM@my_stage/my_file.csv

CREDENTIALS=(AWS_KEY_ID='my_aws_key_id'AWS_SECRET_KEY='my_aws_secret_key')

FILE_FORMAT=(TYPE='CSV'FIELD_DELIMITER=','SKIP_HEADER=1)

ON_ERROR='ABORT_STATEMENT';3.1.2数据预处理在加载数据前,进行数据预处理可以显著提高加载速度。例如,压缩数据文件、确保数据格式与表结构匹配等。示例代码#使用gzip压缩数据文件

gzipdata.csv3.1.3批量加载批量加载数据比单个文件加载更高效。Snowflake建议每次加载至少包含100MB的数据。3.1.4数据类型匹配确保CSV文件中的数据类型与Snowflake表中的列类型匹配,可以避免数据转换时的性能开销。3.2数据表管理与优化Snowflake的数据表管理包括创建、修改和删除表,以及优化表的性能。3.2.1创建表使用CREATETABLE语句创建新表。示例代码CREATETABLEmy_table(

idINT,

nameVARCHAR,

ageINT

);3.2.2修改表使用ALTERTABLE语句修改现有表的结构。示例代码ALTERTABLEmy_table

ADDCOLUMNemailVARCHAR;3.2.3删除表使用DROPTABLE语句删除不再需要的表。示例代码DROPTABLEmy_table;3.2.4表优化Snowflake的表优化主要通过调整表的存储格式和使用分区来实现。示例代码--调整表的存储格式

ALTERTABLEmy_table

SET(STORAGE_FORMAT='PARQUET');

--使用分区

CREATETABLEmy_table(

idINT,

nameVARCHAR,

ageINT,

load_dateDATE

)

PARTITIONBY(load_date);3.3数据分区与压缩数据分区和压缩是Snowflake中提高查询性能和存储效率的重要手段。3.3.1数据分区Snowflake支持自动分区,通过PARTITIONBY子句在创建表时指定。分区可以基于日期、数字或字符串列。示例代码CREATETABLEsales(

sale_idINT,

sale_dateDATE,

amountDECIMAL(10,2)

)

PARTITIONBY(sale_date);3.3.2数据压缩Snowflake自动对数据进行压缩,但你可以通过ALTERTABLE命令更改压缩格式,以适应不同的数据类型和查询模式。示例代码ALTERTABLEmy_table

SET(COMPRESSION='SNAPPY');通过遵循上述最佳实践,你可以确保在Snowflake数据仓库中高效地加载、管理和查询数据。4数据仓库:Snowflake:查询性能优化4.1查询优化策略在Snowflake中,优化查询性能是确保数据仓库高效运行的关键。以下是一些核心策略:4.1.1利用分区消除--示例:查询特定分区的数据,避免扫描整个表

SELECT*FROMsales

WHEREsale_date>='2023-01-01'ANDsale_date<='2023-03-31';此查询通过指定日期范围,仅扫描相关分区,提高查询速度。4.1.2选择性优化--示例:使用更具体的选择条件

SELECT*FROMproducts

WHEREcategory='Electronics'ANDprice>100;通过限制查询条件,减少数据扫描量,提升性能。4.1.3列存储优化--示例:仅选择需要的列

SELECTproduct_name,priceFROMproducts;避免使用SELECT*,减少数据传输量,提高查询效率。4.2索引与统计信息4.2.1索引使用Snowflake自动管理索引,但理解索引如何工作对于优化查询至关重要。4.2.2统计信息--示例:更新统计信息以优化查询计划

ALTERTABLEsalesREFRESHSTATISTICS;定期更新统计信息,帮助Snowflake优化器做出更佳的查询计划决策。4.3缓存与结果重用4.3.1结果缓存Snowflake的结果缓存可以存储查询结果,当相同的查询再次执行时,直接从缓存中读取,无需重新计算。--示例:使用结果缓存

SELECT*FROMsales

WHEREsale_date='2023-01-01';如果此查询结果已被缓存,再次执行时将直接从缓存中读取。4.3.2结果重用--示例:使用WITH子句重用查询结果

WITHdaily_salesAS(

SELECTproduct_id,SUM(quantity)AStotal_quantity

FROMsales

WHEREsale_date='2023-01-01'

GROUPBYproduct_id

)

SELECTduct_name,ds.total_quantity

FROMproductsp

JOINdaily_salesdsONduct_id=duct_id;此示例中,daily_sales的计算结果被重用,避免了对sales表的重复扫描。4.3.3管理缓存--示例:清除特定查询的缓存

ALTERSESSIONSETQUERY_RESULT_CACHE_TIME_TO_LIVE=0;此设置可以清除缓存,强制查询重新计算,适用于数据频繁更新的场景。以上策略和示例展示了如何在Snowflake数据仓库中优化查询性能,通过合理利用分区、选择性、列存储、索引、统计信息以及缓存和结果重用,可以显著提升数据处理速度和效率。5数据仓库:Snowflake:成本控制与预算管理5.1Snowflake成本模型Snowflake的数据仓库成本模型基于“分离存储与计算”的架构,这意味着存储和计算资源是独立计费的。具体来说,Snowflake的成本由以下几部分组成:存储成本:根据存储的数据量进行计费,包括数据仓库中存储的原始数据和查询结果。计算成本:根据虚拟仓库的使用时间进行计费,即使在数据加载或查询过程中,也只在数据被处理时计费。数据共享成本:当与其他Snowflake账户共享数据时,会产生额外的费用。数据传输成本:根据数据的传输量进行计费,包括从数据仓库到外部系统的数据导出。5.1.1示例:查询成本估算--SQL示例:查询成本估算

SELECTAPPROXIMATE_COST('SELECT*FROMsalesWHEREdate>\'2022-01-01\'');此查询将估算执行特定SQL查询的成本,帮助用户在运行查询前了解可能的费用。5.2成本控制策略为了有效控制Snowflake数据仓库的成本,可以采取以下策略:使用适当的虚拟仓库大小:根据查询的复杂性和数据量选择合适的虚拟仓库大小,避免资源浪费。优化查询:通过索引、分区和数据压缩等技术优化查询性能,减少计算成本。数据归档:将不经常访问的历史数据归档到成本更低的存储层,如Snowflake的TimeTravel功能或外部存储。设置自动暂停和自动扩展:虚拟仓库可以配置为在空闲时自动暂停,以及在负载增加时自动扩展,以节省成本和提高性能。5.2.1示例:自动暂停虚拟仓库--SQL示例:设置虚拟仓库自动暂停

ALTERWAREHOUSEmy_warehouseSET(AUTO_SUSPEND=300);此命令将虚拟仓库my_warehouse的自动暂停时间设置为5分钟,即在空闲5分钟后自动暂停,以节省成本。5.3预算设置与监控Snowflake允许用户设置预算,以避免意外的高额费用。预算可以设置在账户级别或虚拟仓库级别。此外,Snowflake提供了多种监控工具,帮助用户实时跟踪成本和资源使用情况。设置账户预算:在账户级别设置预算,当总成本达到预算时,所有虚拟仓库将自动暂停。设置虚拟仓库预算:在虚拟仓库级别设置预算,当虚拟仓库的成本达到预算时,该虚拟仓库将自动暂停。使用Snowflake监控工具:Snowflake提供了监控仪表板和报告,可以查看成本、资源使用和查询性能等信息。5.3.1示例:设置虚拟仓库预算--SQL示例:设置虚拟仓库预算

ALTERWAREHOUSEmy_warehouseSET(CREDIT_QUOTA=100);此命令将虚拟仓库my_warehouse的预算设置为100个计算信用,当使用量达到100个信用时,虚拟仓库将自动暂停。5.3.2示例:监控成本和资源使用--SQL示例:查询虚拟仓库的资源使用情况

SELECT*FROMSNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORYWHEREWAREHOUSE_NAME='my_warehouse';此查询将返回虚拟仓库my_warehouse的资源使用历史,包括计算时间、信用使用和状态等信息,帮助用户监控成本和资源使用情况。通过以上策略和工具,用户可以有效地控制和管理Snowflake数据仓库的成本,确保资源的合理使用和预算的遵守。6数据仓库:Snowflake:安全与合规6.1数据加密与安全在Snowflake数据仓库中,数据安全是首要考虑的事项。Snowflake提供了多层次的数据加密和保护机制,确保数据在传输和存储过程中的安全性。6.1.1传输层加密Snowflake使用TLS(TransportLayerSecurity)协议对所有网络通信进行加密,确保数据在客户端和服务器之间的传输安全。6.1.2存储层加密所有存储在Snowflake的数据,无论是在磁盘上还是在内存中,都默认进行加密。Snowflake使用AES-256加密算法,确保数据的存储安全。6.1.3客户端加密Snowflake支持客户端数据加密,允许用户在数据上传前进行加密,确保数据在上传过程中的安全性。6.1.4示例:使用Snowflake的客户端加密上传数据#导入必要的库

importsnowflake.connector

importos

fromcryptography.fernetimportFernet

#生成加密密钥

key=Fernet.generate_key()

cipher_suite=Fernet(key)

#加密数据

withopen('data.csv','rb')asfile:

data=file.read()

encrypted_data=cipher_suite.encrypt(data)

#将加密后的数据上传到Snowflake

conn=snowflake.connector.connect(

user='your_username',

password='your_password',

account='your_account'

)

cursor=conn.cursor()

cursor.execute("PUT'file://encrypted_data.csv'@your_stage/encrypted_data.csv")在上述示例中,我们首先使用cryptography库生成一个加密密钥,然后使用该密钥对本地文件data.csv进行加密。加密后的数据被上传到Snowflake的指定阶段(stage)。6.2访问控制与审计Snowflake提供了精细的访问控制和审计功能,帮助组织管理数据访问权限,同时监控和记录所有数据活动。6.2.1角色和权限Snowflake使用角色(Role)和权限(Privilege)系统来管理数据访问。角色可以被授予不同的权限,如创建数据库、表、视图等,也可以被授予对特定数据库、表或视图的访问权限。6.2.2审计日志Snowflake自动记录所有数据库活动,包括查询、数据加载、权限更改等,这些记录存储在审计日志中,可用于合规性检查和安全审计。6.2.3示例:在Snowflake中创建角色并授予权限--创建角色

CREATEROLEmy_role;

--授予角色权限

GRANTCREATEDATABASEONACCOUNTTOmy_role;

GRANTUSAGE,SELECTONALLTABLESINSCHEMAmy_schemaTOmy_role;

--使用角色

USEROLEmy_role;在上述示例中,我们首先创建了一个名为my_role的角色,然后授予了创建数据库的权限和对my_schema中所有表的使用和选择权限。最后,我们切换到my_role角色,以便使用这些权限。6.3合规性与法规遵循Snowflake设计时充分考虑了合规性和法规遵循,确保数据处理符合各种行业标准和法规要求。6.3.1数据保护法规Snowflake支持多种数据保护法规,如GDPR(GeneralDataProtectionRegulation)、HIPAA(HealthInsurancePortabilityandAccountabilityAct)等,确保数据处理符合法规要求。6.3.2数据生命周期管理Snowflake提供了数据生命周期管理功能,允许用户设置数据保留策略,确保数据在规定的时间内被保留或自动删除,符合合规性要求。6.3.3示例:在Snowflake中设置数据保留策略--设置表的数据保留期为1年

ALTERTABLEmy_tableSETRETENTION_TIME_IN_DAYS=365;在上述示例中,我们使用ALTERTABLE命令将my_table的数据保留期设置为365天(1年)。这意味着超过1年的数据将被自动删除,以符合数据保护法规中的数据最小化原则。通过上述介绍和示例,我们可以看到Snowflake在数据加密与安全、访问控制与审计、合规性与法规遵循方面提供了强大的功能,确保数据在处理过程中的安全性和合规性。7监控与警报7.1Snowflake监控工具在Snowflake数据仓库的运维中,使用内置的监控工具是至关重要的。Snowflake提供了多种监控功能,包括系统监控、查询监控和资源监控,帮助管理员实时了解数据仓库的运行状态。7.1.1系统监控系统监控提供了关于Snowflake实例的全局视图,包括仓库的CPU使用率、内存使用情况、存储使用情况等。管理员可以通过Snowflake的Web界面或API访问这些信息。示例:使用SnowflakeSQL查询系统监控信息--查询当前所有仓库的CPU使用率

SELECTwarehouse_name,cpu_usage_percentage

FROMtable(information_schema.warehouses());

--查询存储使用情况

SELECTdatabase_name,schema_name,bytes,bytes/(1024*1024*1024)ASgb

FROMtable(information_schema.tables())

WHEREtable_type='BASETABLE';7.1.2查询监控查询监控帮助跟踪和分析执行的查询,包括查询的执行时间、资源消耗和错误信息。这对于优化查询性能和资源管理非常有用。示例:查询监控信息--获取最近执行的查询信息

SELECTquery_id,query_text,start_time,end_time,bytes_scanned,bytes_written

FROMtable(information_schema.query_history());7.1.3资源监控资源监控提供了关于Snowflake资源的详细信息,如仓库、数据库和表的使用情况。这有助于管理员了解资源的消耗和优化资源分配。示例:资源监控信息--查询仓库的资源使用情况

SELECTwarehouse_name,total_elapsed_time,total_billable_time

FROMtable(information_schema.warehouse_metering_history());7.2性能指标与警报设置性能指标是衡量数据仓库运行状态的关键,包括查询响应时间、资源利用率等。设置警报可以帮助管理员在性能指标超出预设阈值时及时采取行动。7.2.1设置警报在Snowflake中,可以通过创建警报来监控特定的性能指标。警报可以配置为在指标达到或超过阈值时发送通知。示例:创建警报--创建一个警报,当CPU使用率超过80%时触发

CREATEALERTcpu_usage_alert

WHEN(SELECTcpu_usage_percentageFROMtable(information_schema.warehouses())WHEREwarehouse_name='MY_WAREHOUSE')>80

THEN

SENDEMAILTO'admin@'WITHSUBJECT'HighCPUUsageAlert';7.2.2管理警报管理员可以启用、禁用或删除警报,以及查看警报的历史记录。示例:管理警报--启用警报

ALTERALERTcpu_usage_alertENABLE;

--禁用警报

ALTERALERTcpu_usage_alertDISABLE;

--删除警报

DROPALERTcpu_usage_alert;7.3日志分析与问题排查日志分析是数据仓库运维中的重要环节,通过分析日志可以发现潜在的问题和异常行为,帮助进行问题排查和性能优化。7.3.1日志分析Snowflake的日志包含了系统事件、查询日志和仓库日志等,这些日志可以被导出并分析。示例:导出日志--导出查询日志

COPYINTO's3://my-bucket/query_logs/'

FROMinformation_schema.query_history

CREDENTIALS=(aws_key_id='MY_AWS_KEY_ID',aws_secret_key='MY_AWS_SECRET_KEY');7.3.2问题排查当数据仓库出现性能问题或错误时,通过分析日志可以找到问题的根源。示例:分析日志排查问题--查找执行时间超过10分钟的查询

SELECTquery_id,query_text,start_time,end_time

FROMtable(information_schema.query_history())

WHEREend_time-start_time>INTERVAL'10'MINUTE;通过上述监控工具、性能指标与警报设置以及日志分析与问题排查的详细讲解和示例,可以有效地管理和监控Snowflake数据仓库,确保其高效稳定运行。8高级运维技巧8.1自动化运维流程在Snowflake数据仓库的运维中,自动化是提高效率和减少人为错误的关键。通过使用API和工具,可以实现数据仓库的自动化管理,包括用户管理、权限分配、资源监控等。8.1.1示例:使用SnowflakeAPI自动创建用户importrequests

importjson

#设置Snowflake的API端点和认证信息

url="https://your_"

user="your_username"

password="your_password"

account="your_account"

#构建请求头

headers={

"Content-Type":"application/json",

"Accept":"application/json"

}

#构建请求体

payload={

"name":"new_user",

"password":"new_password",

"email":"new_user@",

"comment":"ThisisanewusercreatedbyAPI"

}

#发送POST请求创建用户

response=requests.post(f"{url}/session/v1/login-request?request_id=1&account={account}",

headers=headers,

data=json.dumps({"data":{"username":user,"password":password}}))

session_token=response.json()['data']['sessionToken']

#使用sessiontoken发送POST请求创建新用户

response=requests.post(f"{url}/api/v2/users",

headers={**headers,"Authorization":f"Bearer{session_token}"},

data=json.dumps(payload))

#检查响应状态

ifre

温馨提示

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

评论

0/150

提交评论