
学好SQL就行了,DML/DDL ETL可以用很多工具来实现,比如Shell, Perl, Informatica, Ab Initio等等, SQL本身的逻辑和处理工作就是ETL的过程 如果是用SQL来实现ETL调度管理,可以先创建数据库表,然后,通过SQL实现Insert/Update/Delete来控制ETL脚本的被调度。
ETL,Extraction-Transformation-Loading的缩写,中文名称为数据抽取、转换和加载。
一般随着业务的发展扩张,产线也越来越多,产生的数据也越来越多,这些数据的收集方式、原始数据格式、数据量、存储要求、使用场景等方面有很大的差异。
数据抽取是指把ODS源数据抽取到DW中,数据拉取,清洗完之后,就需要展示了。一般是把清洗好的数据加载到mysql中,然后在各系统中使用,或者使用Tableau直接给相关人员展示。元数据管理系统对于数据仓库来说是必须的,并且相关人员必须定时维护,如果元数据和数据仓库中的变动不同步,那么元数据系统就形同虚设。
扩展资料
ETL所描述的过程,一般常见的作法包含ETL或是ELT,并且混合使用。通常愈大量的数据、复杂的转换逻辑、目的端为较强运算能力的数据库,愈偏向使用ELT,以便运用目的端数据库的平行处理能力。目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据, 是商业智能项目重要的一个环节。
参考资料:
ETL 不是一种材料,它是 Extract、Transform、Load 的缩写,是一种数据处理的方法。
ETL 是用于将源系统数据提取(Extract)到目标系统中进行转换(Transform),最后将转换后的数据载入(Load)目标系统的过程。这个过程有助于从不同来源、不同格式和不同质量的数据中创建高质量、一致性的数据集,以便于分析和报告。
ETL 可以广泛应用于数据仓库、商业智能、数据迁移等领域。通过 ETL,我们可以将来自不同数据库、文件、网络等的数据整合起来,进行清洗、加工和转化,使得数据质量更高、更易于使用。
显然不对。
百度百科可以看下ETL定义:ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。
这个源端到目的端不是说数据库之间的抽取才叫源端到目的端。数据库内部的数据加工也是啊,贴源层的数据到明细层也是,明细层到汇总层也是。而且你理解的ODS层之前的ETL过程实际就是抽取的过程,那么还有转换和清洗呢?清洗不仅仅是脏数据的清洗,也包括业务逻辑上的清洗,转换也是一样,不仅仅是映射关系的转换,也包含了业务逻辑的整合汇总等等。
实际上把抽过来的数据最终整合成使用方可方便使用的数据的整个过程都可以叫做ETL。
而目前的市场上来说职位上叫ETL或者数仓已经没有很明显的区分了,特别是互联网行业。我招一个ETL实际上就是干数仓的活,招一个数仓那你实际上也包含了ETL的能力。
目的: 在这篇文章中 你会使用设置好的文件配置OWB gR 的环境 你可以创建一个Warehouse Builder 用户然后登录进去 注意 : 这篇文章所使用设置脚本只能用于OWB gR 以前版本教程在OTN上
主题:这篇文章讨论如下专题总览先决条件引用材料Warehouse Builder g 架构和组件建立项目环境介绍OWB程序组组件登录到Design Center总结
总览 在这篇文章中你将会学习到如何执行建立脚本和配置OWB环境 同时也将使用OWB Repository Assistant 来创建用户和登录到你的元数据储存仓库
先决条件 为了成功完成这个指南 你应该执行下面 *** 作 完成安装Oracle Database (Enterprise Edition) g R (patched to for OLAP support) 或者 g R 我们建议你为数据库命名为orcl 否则 你需要将文中的数据库名字用你自己的数据库命名代替 注意: 这篇文章所使用的脚本在OWB g R 和Oracle Database g R 上测试过 你可以选择在Oracle Database g R ( ) 上或者Oracle g R 上运行脚本
为了简化设置过程 我们假设Oracle Database 和 OWB g 安装在同一台机器上 为了这次课程 我们强烈建议你在同一台机器上安装Oracle 和 OWB 注意: 如果你使用OWB g R 和Oracle Database g 要确保OWB 安装在一个空目录中 而不是Oracle Home
完成OWB g R 的安装 注意: OWB 包含以下组件:ETL Core feature: 这是随database standard edition 免费提供的核心功能 核心ETL功能随database license提供大量核心功能Enterprise ETL 选项: Enterprise ETL 选项提供支持大型伸缩和复杂部署功能 一些功能包括Type 和 Type SCD 可传输表空间 交互继承和分析影响 以及自定义对象 Data Quality Option: Data quality 选项是为了支持将数据转换成可信赖数据的基础Connectors : Connectors 允许客户快速连接和转换他们的CRM ERP 应用程序 包括以下一些connectors :SAP Oracle EBusiness Suite Peoplesoft / and Siebel需要更多OWB信息 请阅读Oracle Warehouse Builder User s Guide Product Options and Licensing 一章
参考材料以下是有用的参考资料列表:Oracle Warehouse Builder g Release :Document LibraryOracle Technology Neork(OTN): OWB Collateral LibraryOracle University ( 天课程) Oracle Warehouse Builder g Implementation Part ( 天)Oracle Warehouse Builder g Implementation Part ( 天)
Warehouse Builder g 体系结构和组件Oracle Warehouse Builder 是一个信息集成工具 它将数据转换成高质量的信息 Oracle Database 是OWB 体系结构的中心因为它储存著OWB的资源仓库和OWB产生的代码
下面的这张图说明了OWB的主要组件 Design Center 是用户用来完成designing mapping scheduling and deploying ETL processes 的界面 所有的元数据都是储存在OWB的资源仓库中的 资源仓库是建立在Oracle Database上的 你可以用Repository Browser 去查询资源仓库中的元数据 同样的经过ETL过程加载的目标数据库也是建立在Oracle Database 上的
图
Design CenterDesign Center提供图形界面来处理ETL过程
Control Center ManagerControl Center Manager 是Design Center 的客户端 Control Center Manager是一个全面的部署控制台让你能够查看和管理部署的方方面面
Target Schema目标数据库是你用来装载数据的 它包括Cube dimensions views 和mappings 目标数据库包括Warehouse Builder 组件比如synonyms 用来帮助ETL 过程连接监控和服务包的资源仓库 资源仓库储存所有的目标数据库信息比如执行和部署的信息 注意 目标数据库不是Warehouse Builder 软件的组件而更多的是Oracle Database的已存在的组件 同样的 你可以关联多个目标数据库到同一个资源仓库里 你可以有 比 或 比多的目标仓库对资源仓库关系
Warehouse Builder Repository资源仓库储存所有的元数据定义包括所有的数据源 目标数据库 ETL过程和设计元数据 除了包含设计元数据之外 资源仓库也包括运行时由Control Center Manager 和 Control Center Service 产生的运行数据作为OWB安装的开始 你会使用Repository Assistant 去创建一个资源仓库 你可以把OWB g资源仓库建立在Oracle Database gR 或者Oracle Database g
About WorkspacesWorkspaces定义了资源仓库 你可以创建一个或多个workspace 每一个workspace负责一组用户和他们相关的项目 一个公共的实践是为开发 测试和产品做单独的workspace 用这个实践后 你可以让你的开发人员连接到开发和测试workspace 但是限制他们连接产品级workspace
Repository BrowserRepository Browser是一个WEB用户界面让你查询资源仓库 你可以查看元数据 创建报表 审计运行 *** 作 和交互式分析影响 (perform lineage and impact ysis) Repository Browser被组织用来查看设计相关的或控制中心相关信息
Control Center ServiceControl Center Service用来注册地点(Location)的组件 它可以部署和执行ETL逻辑比如mappings 和process flows
建立项目环境为了部分填充你的资源仓库 你需要执行以下 *** 作:下载设置脚本如果使用Oracle Database gR 创建OWBSYS 用户并且允许连接Control Center 和 workspaces创建Design Center 用户和资源仓库 运行设置脚本
下载设置脚本 下载owbdemo_files
打开owbdemo_files zip 文件 解压到一个你熟悉的地方 注意 : 如果你解压到 d:\ 应该包括以下一些文件 D:\newowbdemo\create_users sqlD:\newowbdemo\createlocs tclD:\newowbdemo\createprj tclD:\newowbdemo\cube_sales tclD:\newowbdemo\dim_channels tclD:\newowbdemo\dim_customers tclD:\newowbdemo\dim_products tclD:\newowbdemo\dim_promotions tclD:\newowbdemo\dim_times tclD:\newowbdemo\load_channels tclD:\newowbdemo\load_customers tclD:\newowbdemo\load_products tclD:\newowbdemo\load_promotions tclD:\newowbdemo\load_sales tclD:\newowbdemo\loadall tclD:\newowbdemo\loadrolapsales tclD:\newowbdemo\loadsale aps tclD:\newowbdemo\loadxsales tclD:\newowbdemo\owbdemoinit tclD:\newowbdemo\sequences tclD:\newowbdemo\sourcefiles\export csvD:\newowbdemo\sourcefiles\expense_categories csv确保 export csv 文件和 expense_categories csv 文件在newowbdemo 文件夹下的 sourcefiles 子文件夹下
可选择性下载xsales zip 文件注意: 这是一个可选项除非你想做额外的练习
如果使用Oracle Database gR 创建OWBSYS 用户并且允许连接Control Center 和 workspaces注意: 如果你使用Oracle Database g R 你需要执行以下 *** 作 如果你使用Oracle g 跳过这一步
你需要运行一个脚本来创建OWBSYS 资源仓库模式 Oracle g 默认自带的 但是Oracle g R 需要手工运行 这个脚本在 <your OWB home>/OWB/UnifiedRepos/cat_owb sql 注意: 你执行sqlplus 的方法非常重要:不要从 Start > Programs > Oracle Database Home Folder 或者Warehouse Builder folder 相反 应该从 Start > Run > cmd exe 输入路径并回车 你需要确定Warehouse Builder是最前面的路径从而让SQL Plus会话从Warehouse Builder 安装的地方执行起 如果不是的话你需要临时制定path 变量 比如Path = <Warehouse Builder home>\bin 然后用具有sysdba 权限的sys 用户登录 比如 在命令行下输入: sqlplus sys/<sys password> as sysdba作为sysdba连接到SQL Plus 实行以下命令:@<your owb home>/owb/UnifiedRepos/cat_owb sql回车 你需要输入OWBSYS 用户所使用的表空间 强烈建议你使用默认的USERS 表空间 输入users 然后回车
图
当这条命令成功执行后 将会显示下面这句话 If you are NOT using an OWB installed in the Oracle database home please now run reset_owbcc_home
先前 我们建议安装Warehouse Builder在不同于Oracle Database Home目录的地方 为了确保能在Oracle gR 访问Control Center 运行UnifedRepos/reset_owbcc_home sql 并把Warehouse Builder Home 环境变量传给它 这个脚本需要sys 权限的用户 比如键入如下命令:SQL>@c:\oracle\OWB_HOME_ G\owb\UnifiedRepos\reset_owbcc_home;回车确认 你将会要求输入完整的OWB Control Center 安装目录 先注意以下注释 注意:在后面的例子中我们使用 / 即使是在Windows *** 作系统中 完整的路径一定是大小写敏感的 一定要确认驱动符号是大写的 比如 C 并且后面的文件夹名都是大小写敏感的 比如如下例子:C:/oracle/OWB_home_ g输入回车
如果数据库启用的增强密码选项 那么创建OWBSYS之后 你需要解锁(unlock) OWBSYS帐号和解封(unexpired)它的帐号 用第二个或第三个SQLPLUS命令行来解锁 OWBSYS 并给他一个新的密码 alter user OWBSYS account unlock ;alter user OWBSYS identified by OWBSYS ;上面的解释在OWB G Installation Guide documentation 里面有 在 Hosting the Repository on Oracle Database g R 章节
对于每一个Warehouse Builder 客户端安装都需要能够连接到 gR 的workspaces OWB g 的客户端默认的workspaces是建立在 g Database上的 也就是说 Warehouse Builder repository 是假设安装在Oracle g 上的 为了能够连接 gR 的repository和它的workspaces 修改你机器上的<owb_home>/owb/bin/admin/Preference properties文件 如果这个文件不存在用在同一个目录下的示例文件Preference properties tmp 创建它 在preference properties 文件中 添加REPOS_DB_VERSION_ALLOWED 并将它的值设成Oracle g Oracle g (也许 g已经存在了)
创建Design Center 用户和Repository 当第一次登录到OWB Design Center时 你需要创建一个能够登录的用户 创建一个workspace 一个新的workspaces 用户并且安装Warehouse Builder repository 选择 Start > Programs > {your OWB g client home} > Warehouse Builder > Design Center出现Design Center 的登录画面
图
如果没有看见workspace Management 按钮 点上面的Show Details 按钮 单击Workspace Management 然后出现Repository Assistant 向导的欢迎环面 点Next
图
在Database Information 里输入如下信息 Host Name 你的ipPort Number Oracle Service Name orcl (或者你的sid)
图
点击 Next
在Choose Operation 窗口中 选择 Manage Warehouse Builder workspaces
图
点击Next
在Choose Workspace Operations 窗口 点击Create a new Warehouse Builder workspace
图
点击 Next
在New or Existing User 窗口中 单击Create a workspace with a new user as workspace owner
图
单击 Next
在DBA Information 窗口 输入如下值User Name systemPassword oracle
图
单击Next
在Workspace Owner (New) 窗口 输入如下值:Workspace Owner s User Name rep_ownerWorkspace Owner s Password rep_ownerWorkspace Owner s Password Confirmation rep_ownerWorkspace Name my_workspace
图
单击Next
在 OWBSYS Information 窗口 输入如下值 User Name OWBSYSPassword owbsys
图
单击Next
在Select Tablespaces 窗口 接受所有默认的选项 单击Next
图
在Select Languages 窗口 接受默认值并单击Next
图
Workspace Users (可选项) 窗口允许你选择已经存在的数据库用户或新创建一个用户来当 workspace user如果你先前没有指定的workspace owner 那你需要新建一个数据库用户来当workspace user 单击Create New User
图
在Create New Database User 窗口里 输入如下值:
User Name Rep_userPassword Rep_userRe enter Password Rep_userDBA User Name SYSTEMDBA User Password Oracle (你的system 密码)
图
Workspace Users (可选项)窗口出现 新的 rep_user 在右边的Selected List 里面
图
单击Next
在 Summary 窗口中 检查所有的信息然后单击Finish
图
在Installation Progress窗口出现后 安装 OWBSYS 用户和 repository owner 需要花费大概几分钟的时间
图
在 Installation Successful 窗口出现后 单击 OK Repository Assistant 窗口会关闭 如果Design Center Logon 窗口还在的话 单击 Cancel 关闭它 在Warehouse Builder Warning 窗口中 单击Yes 退出Warehouse Builder 你等会儿要重新登录
Run the Setup Scripts 在你开始之前 你必须要从下载的文件 owbdemo_files zip文件中运行一些脚本 注意:下面的课程中的目录的屏幕截图中我们假设你使用D:盘 如果你使用的是C:盘 替换相应的位置 用sys登录到SQLPlus 并且运行你下载的 D:\newowbdemo| 文件夹下的create_users sql@d:\newowbdemo\create_users sql;
图 退出 SQLPlus注意: create_users sql 脚本将会创建两个用户: xsales 和 eul_from_owb 如果你打算用 xsales 原数据文件进行可选择的课程 你需要也把下载下来的xsales zip 文件解压出来的xsales dmp 导入到数据库 你可以选择性的导入 xsales 数据 注意:导入xsales dmp 文件是可选择性的除非你想要自己做以下练习 如果你想要导入的话 执行以下命令 <database ORACLE_HOME>\BIN\IMP XSALES/XSALES@<ORCL 或者 你的数据库service namefile=<PAHT>\xsales dmp full=y把其中的<ORACLE_HOME>替换成你自己的oracle database home path 并把文件的位置替换到你解压xsales dmp 文件的位置
现在你需要运行一个 tcl 脚本来预定义OWB Project 首先 你需要编辑owbdemoinit tcl 脚本 它定义了一些变量将会被其他的tcl 脚本调用 owbdemoinit tcl 脚本提供给你这些如下这些变量 编辑这些变量以使它满足你的电脑环境变量设置set owbclient rep_ownerset owbclientpwd rep_ownerset sysuser sysset syspwd oracleset host localhostset port set service orclset project OWB_DEMOset sourcedir d:/newowbdemoset dataspace USERSset indexspace USERSset tempspace TEMPset snapspace USERSset sqlpath d:/oracle/ /db_ /BINset sid orclset workspaceOwner rep_ownerset workspaceName my_workspace你需要设置所有的这些变量 set sqlpath 语句应该指向你的Oracle Database home 目录 注意 这个脚本是运行在默认的tablespace 之上的 我们建议你使用默认的tablespace 如果你需要运行这些脚本在你自己的项目上的话 你需要手工编辑多个这样的脚本
为了运行 tcl 脚本 你需要启动 OWB Plus 环境 有两种方法启动 OWB Plus :在Design Center 里面 你可以从 Windows 菜单选择 OWB Plus 然而 对于这次示例 我们选用其他方式来启动OWB Plus 环境 Start > Programs > {Oracle OWB Gr ClientHome> Warehouse Builder > OWB Plus在 OWB+> 提示符下输入cd 命令进入到你的下载文件解压目录cd d:\\newowbdemo\\在这个命令之后 输入source 命令 第一个source 命令执行 owbdemoinit tcl 脚本 它包含预定义的一些环境变量设置 第二个source 命令执行 loadall tcl 脚本 它会依次加载所有的其他脚本 source owbdemoinit tcl输入回车source loadall tcl输入回车这个脚本应该以一个 Disconnected 结束并且最后回到 OMB+> 提示符环境 这个脚本定义了一部分我们需要创建的OWB_DEMO Project的数据 我们等下会在OWB Project 上工作
介绍OWB 程序组组件 你现在需要检查一下你的OWB 安装组成 选择 Start > Programs > {Oracle – OWB gR clientHome} > Warehouse Builder > Administration 这会显示一些OWB 产品的组件
图
查看一下如下菜单选项Administration Repository Assistant 用来创建和映射OWB repository 和用户的Start/Stop Control Center Service 用来启动和停止OWB Control CenterDesign Center 主要的客户端 用来定义数据源 目标 ETL mapping 和转换的Documentation 这会把你重定向到OWB 的OTN 上 OMB Plus 用来执行tcl 脚本的环境Repository Browser 用来执行查询和检查repository 设计和control center 元数据的
登入到 Design Center为了启动OWB Design Center 执行以下步骤: 选择 Start > Programs > {Oracle – OWBclientHome} > Warehouse Builder > Design Center Design Center Logon 窗口会出现 输入rep_owner 做用户名和密码 默认的Connection details 选项是选上了的 如果你不能看到Connection details 选项 单击Show Details 输入主机名或者你的电脑名字 port : 选择orcl 作为你的数据库service name 单击OK
图
Design Center 出现了 Design Center 被分成了三个面板 Project Explorer Connection Explorer 和Global Explorer在Project Explorer 面板里面左边包含两个Project: MY_PROJECT 一个OWB创建时就有的默认的空的项目 另一个是 OWB_DEMO 一个我们刚才用脚本预先定义的项目
图
一个项目是一个包含设计任务的容器 当你创建了一个项目后 你就可以创建其他的OWB 对象了 Warehouse Builder 包含 wizards object editors property sheets 和 object finding tools 来帮助你设计和实现你的商业智能系统 在Project Explorer 面板导航树下面 展开OWB_DEMO project 一大堆的东西出现在树下面 Database Files Applications Data Profiles 等等 展开Database 节点 你将会看到一堆object types 用来设计你的Warehouse 的 :Oracle databases Non_Oracle databases 和 可传输的模块 (Transportable modules)展开Oracle 节点 你将会看到两个已经预先定义的模块 : SALES_WH 和 XSALES 模块 (Modules) 是用来把逻辑上的原数据库定义或者目标数据库定义分组的
图
展开SALES_WH 模块 一些对象类型出现在了树下 mappings transformations dimensions cubes tables 等等 你可以展开其中一些节点来看看我们预先用脚本定义了哪些东西
图
lishixinzhi/Article/program/Oracle/201311/16882
ETLETL即数据抽取(Extract)、转换(Transform)、装载(Load)的过程
它是构建数据仓库的重要环节
数据仓库是面向主题的、集成的、稳定的且随时间不断变化的数据集合,用以支持经营管理中的决策制定过程
数据仓库系统中有可能存在着大量的噪声数据,引起的主要原因有:滥用缩写词、惯用语、数据输入错误、重复记录、丢失值、拼写变化等
即便是一个设计和规划良好的数据库系统,如果其中存在着大量的噪声数据,那么这个系统也是没有任何意义的,因为“垃圾进,垃圾出”(garbagein,garbageout),系统根本就不可能为决策分析系统提供任何支持
为了清除噪声数据,必须在数据库系统中进行数据清洗
目前有不少数据清洗研究和ETL研究,但是如何在ETL过程中进行有效的数据清洗并使这个过程可视化,此方面研究不多
联机事务处理OLTP联机分析处理(OLAP)的概念最早是由关系数据库之父E
F
Codd于1993年提出的,他同时提出了关于OLAP的12条准则
OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理(OLTP)明显区分开来
当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-linetransactionprocessing)、联机分析处理OLAP(On-LineAnalyticalProcessing)
OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易
OLAP是数据仓库系统的主要应用,支持复杂的分析 *** 作,侧重决策支持,并且提供直观易懂的查询结果
OLAP是使分析人员、管理人员或执行人员能够从多角度对信息进行快速、一致、交互地存取,从而获得对数据的更深入了解的一类软件技术
软件说明
通过etl工具定时将SqlServer指定的表数据同步到oracle数据库
在数据库建立增删改的触发器。触发器将变更放到临时表里。
通过etl工具读取临时表同步给oracle
优点:比较实时
缺点:影响到业务系统,因为需要在业务系统建立触发器
实例说明:
例如在sqlserver有一张用户表(sys_user)需定时同步oracle数据库的用户表,
包括新增、删除、修改同步
给同步的表建三类触发器:
insert触发器:向表中插入数据时被触发;
update触发器:修改表中数据时被触发;
delete触发器:从表中删除数据时被触发。
以sqlserver的用户表举例,
Sqlserver的sys_user表,有两个字段id,name
具体流程:
以新增数据举例
Ø 一、在sqlserver新建触发器trigger_sysuser_insert
if (object_id('trigger_sysuser_insert') is not null)
drop trigger trigger_sysuser_insert
go
create trigger trigger_sysuser_insert
on sys_user --表名
for insert --插入后触发
--instead of insert --插入前触发,使用插入前触发时,不执行默认插入
as
--开始执行逻辑
declare @id int, @name varchar(20);
select @id = id, @name = name from sys_user; -------------- inserted 存放了当前插入的值
--select @name,@age
---创建临时表
if not exists (select from sysobjects where id = object_id('##sys_user_insert')
and OBJECTPROPERTY(id, 'IsUserTable') = 1)
create table ##sys_user_insert
(
id int,
name varchar(32)
);
insert into ##sys_user_insert (id,name) values(@id,@name);
go
在sys_user新增数据时会被触发,将新增的数据加入临时表##sys_user_insert,此时
的临时表 ##sys_user_insert会增加一条记录
Ø 二、配置elt流程
节点1 从临时表读取数据,写入数据流
节点2 从数据流获取数据写入oracle
节点3 从sqlserver的临时表删除已经被同步的记录
Ø 三、建立作业调度
设置调度周期
适用增量数据同步
在要同步的源表里有时间戳字段,每当数据发生新增,时间戳会记录发生变化的时间,etl工具根据时间范围定时同步数据
优点:基本不影响业务系统
缺点:要求源表必须有时间戳这一列,适用增量场景,修改、删除不太适用
定时清空oracle数据源,将sqlserver的数据全盘拷贝到oracle数据源。一般用于数据量不大,实时性要求不高的场景。
优点:基本不影响业务系统,开发、部署都很简单
缺点:效率低
Etl流程
结论
准能现场数据同步,涉及增、删、改的同步,比较适用触发器的方式进行数据同步,但触发器仍会存在失效的情况,若现场有数据质量系统,定期数据稽核,查缺补漏,保证两边数据库的一致性;
以上就是关于用SQL脚本写ETL全部的内容,包括:用SQL脚本写ETL、ETL什么意思、ETL是什么材料等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)