在当今的数字时代,数据是每个组织成功的核心。 XML 是最常用的数据交换格式之一。 出于多种原因,分析 XML 文件至关重要。 首先,XML 文件用于许多行业,包括金融、医疗保健和政府。 分析 XML 文件可以帮助组织深入了解数据,从而做出更好的决策并改进运营。 分析 XML 文件还有助于数据集成,因为许多应用程序和系统使用 XML 作为标准数据格式。 通过分析 XML 文件,组织可以轻松地集成来自不同来源的数据并确保其系统之间的一致性。但是,XML 文件包含半结构化、高度嵌套的数据,使得访问和分析信息变得困难,特别是当文件很大并且具有复杂、高度嵌套的模式。
XML 文件非常适合应用程序,但它们可能不是分析引擎的最佳选择。 为了增强查询性能并能够轻松访问下游分析引擎,例如 亚马逊雅典娜,将 XML 文件预处理为列式格式(如 Parquet)至关重要。 这种转变可以提高分析工作流程的效率和可用性。 在这篇文章中,我们展示了如何使用处理 XML 数据 AWS胶水 和雅典娜。
解决方案概述
我们探索了两种可以简化 XML 文件处理工作流程的不同技术:
- 技术 1:使用 AWS Glue 爬网程序和 AWS Glue 可视化编辑器 – 您可以将 AWS Glue 用户界面与爬网程序结合使用来定义 XML 文件的表结构。 这种方法提供了用户友好的界面,特别适合喜欢使用图形方法来管理数据的个人。
- 技术 2:将 AWS Glue DynamicFrames 与推断和固定架构结合使用 – 爬虫在处理大于 的 XML 文件中的单行时存在限制 1 MB。 为了克服这个限制,我们使用 AWS Glue 笔记本来构建 AWS Glue
DynamicFrames
,同时利用推断模式和固定模式。 此方法可确保有效处理行大小超过 1 MB 的 XML 文件。
在这两种方法中,我们的最终目标是将 XML 文件转换为 Apache Parquet 格式,使它们易于使用 Athena 进行查询。 通过这些技术,您可以提高 XML 数据的处理速度和可访问性,从而使您能够轻松获得有价值的见解。
先决条件
在开始本教程之前,请完成以下先决条件(这些先决条件适用于这两种技术):
- 下载 XML 文件 技术1.xml 和 技术2.xml.
- 将文件上传到 亚马逊简单存储服务 (亚马逊 S3)存储桶。 您可以将它们上传到不同文件夹中的同一 S3 存储桶或不同的 S3 存储桶。
- 创建 AWS身份和访问管理 按照中的说明,您的 ETL 作业或笔记本的 (IAM) 角色 为 AWS Glue Studio 设置 IAM 权限.
- 使用以下命令向您的角色添加内联策略 已经:PassRole 行动:
- 向有权访问 S3 存储桶的角色添加权限策略。
现在我们已经完成了先决条件,让我们继续实施第一种技术。
技术 1:使用 AWS Glue 爬网程序和可视化编辑器
下图说明了可用于实施该解决方案的简单架构。
要使用 AWS Glue 和 Athena 分析存储在 Amazon S3 中的 XML 文件,我们完成以下高级步骤:
- 创建 AWS Glue 爬网程序以提取 XML 元数据并在 AWS Glue 数据目录中创建表。
- 使用 AWS Glue 提取、转换和加载 (ETL) 作业将 XML 数据处理并转换为适合 Athena 的格式(如 Parquet)。
- 通过 AWS Glue 控制台或 AWS命令行界面 (AWS CLI)。
- 将处理后的数据(Parquet 格式)与 Athena 表结合使用,从而启用 SQL 查询。
- 使用 Athena 中的用户友好界面,通过对 Amazon S3 中存储的数据进行 SQL 查询来分析 XML 数据。
该架构是一种可扩展、经济高效的解决方案,用于使用 AWS Glue 和 Athena 分析 Amazon S3 上的 XML 数据。 您无需复杂的基础设施管理即可分析大型数据集。
我们使用 AWS Glue 爬网程序来提取 XML 文件元数据。 您可以选择默认的 AWS Glue 分类器进行通用 XML 分类。 它自动检测 XML 数据结构和模式,这对于常见格式很有用。
我们还在该解决方案中使用自定义 XML 分类器。 它专为特定的 XML 模式或格式而设计,允许精确的元数据提取。 这非常适合非标准 XML 格式或需要对分类进行详细控制时。 自定义分类器确保仅提取必要的元数据,从而简化下游处理和分析任务。 此方法优化了 XML 文件的使用。
以下屏幕截图显示了带有标签的 XML 文件的示例。
创建自定义分类器
在此步骤中,您将创建自定义 AWS Glue 分类器以从 XML 文件中提取元数据。 完成以下步骤:
- 在AWS Glue控制台上的 爬行 在导航窗格中,选择 分类.
- 添加分类器.
- 选择 XML 作为分类器类型。
- 输入分类器的名称,例如
blog-glue-xml-contact
. - 针对 行标签,输入包含元数据的根标签的名称(例如,
metadata
). - 创建.
创建 AWS Glue 爬网程序来爬网 xml 文件
在本节中,我们将创建一个 Glue Crawler,以使用上一步中创建的客户分类器从 XML 文件中提取元数据。
建立资料库
- 去 AWS Glue控制台,选择 数据库 在导航窗格中。
- 点击 添加数据库。
- 提供一个名称,例如
blog_glue_xml
- 创建 数据库
创建爬虫
完成以下步骤来创建您的第一个爬网程序:
- 在 AWS Glue 控制台上,选择 爬行 在导航窗格中。
- 创建爬虫.
- 点击 设置爬虫属性 页面,为新爬虫提供一个名称(例如
blog-glue-parquet
),然后选择 下一页. - 点击 选择数据源和分类器 页面,选择 还没 下 数据源配置.
- 添加数据存储.
- 针对 S3 路径, 浏览到
s3://${BUCKET_NAME}/input/geologicalsurvey/
.
确保选择 XML 文件夹而不是文件夹内的文件。
- 将其余选项保留为默认值并选择 添加 S3 数据源.
- 扩大 自定义分类器 – 可选,选择 blog-glue-xml-contact,然后选择 下一页 并将其余选项保留为默认值。
- 选择您的 IAM 角色或选择 创建新的 IAM 角色,添加后缀
glue-xml-contact
(例如,AWSGlueServiceNotebookRoleBlog
),然后选择 下一页. - 点击 设置输出和调度 页面,在 输出配置,选择
blog_glue_xml
目标数据库. - 输入
console_
作为添加到表(可选)和下面的前缀 爬虫时间表,保持频率设置为 一经请求. - 下一页.
- 检查所有参数并选择 创建爬虫.
运行爬虫
创建爬网程序后,请完成以下步骤来运行它:
- 在 AWS Glue 控制台上,选择 爬行 在导航窗格中。
- 打开您创建的爬虫并选择 运行.
爬网程序将需要 1-2 分钟才能完成。
- 爬虫完成后,选择 数据库 在导航窗格中。
- 选择您创建的数据库并选择表名称以查看爬网程序提取的架构。
创建 AWS Glue 作业以将 XML 转换为 Parquet 格式
在此步骤中,您将创建一个 AWS Glue Studio 作业以将 XML 文件转换为 Parquet 文件。 完成以下步骤:
- 在 AWS Glue 控制台上,选择 工作机会 在导航窗格中。
- 下 建立工作, 选择 带有空白画布的视觉效果.
- 创建.
- 将作业重命名为
blog_glue_xml_job
.
现在您有一个空白的 AWS Glue Studio 可视化作业编辑器。 编辑器顶部是不同视图的选项卡。
- 选择 脚本 选项卡以查看 AWS Glue ETL 脚本的空外壳。
当我们在可视化编辑器中添加新步骤时,脚本将自动更新。
- 选择 工作细节 选项卡查看所有作业配置。
- 针对 IAM角色,选择
AWSGlueServiceNotebookRoleBlog
. - 针对 胶版,选择 Glue 4.0 – 支持 Spark 3.3、Scala 2、Python 3.
- 在 要求的工人数量 到2。
- 在 重试次数 到0。
- 选择 视觉 选项卡返回可视化编辑器。
- 点击 来源 下拉菜单,选择 AWS Glue数据目录.
- 点击 数据源属性 - 数据目录 选项卡,提供以下信息:
- 针对 数据库,选择
blog_glue_xml
. - 针对 表,选择爬网程序创建的以名称 console_ 开头的表(例如,
console_geologicalsurvey
).
- 针对 数据库,选择
- 点击 节点属性 选项卡,提供以下信息:
- 更改 名字 至
geologicalsurvey
数据集。 - 操作 和转变 更改架构(应用映射).
- 节点属性 并将转换的名称从更改架构(应用映射)更改为
ApplyMapping
. - 点击 目标 菜单中选择 S3.
- 更改 名字 至
- 点击 数据源属性– S3 选项卡,提供以下信息:
- 针对 格式, 选择 实木复合地板.
- 针对 压缩类型, 选择 未压缩.
- 针对 S3 源类型, 选择 S3位置.
- 针对 S3 网址,输入
s3://${BUCKET_NAME}/output/parquet/
. - 节点属性 并将名称更改为
Output
.
- 保存 保存工作。
- 运行 运行作业。
以下屏幕截图显示了可视化编辑器中的作业。
创建 AWS Gue 爬网程序来爬网 Parquet 文件
在此步骤中,您将创建一个 AWS Glue 爬网程序,以从您使用 AWS Glue Studio 作业创建的 Parquet 文件中提取元数据。 这次,您使用默认分类器。 完成以下步骤:
- 在 AWS Glue 控制台上,选择 爬行 在导航窗格中。
- 创建爬虫.
- 点击 设置爬虫属性 页面,为新爬网程序提供名称,例如 blog-glue-parquet-contact,然后选择 下一页.
- 点击 选择数据源和分类器 页面,选择 还没 数据源配置.
- 添加数据存储.
- 针对 S3 路径, 浏览到
s3://${BUCKET_NAME}/output/parquet/
.
确保您选择了 parquet
文件夹而不是文件夹内的文件。
- 选择您在先决条件部分创建的 IAM 角色或选择 创建新的 IAM 角色 (例如,
AWSGlueServiceNotebookRoleBlog
),然后选择 下一页. - 点击 设置输出和调度 页面,在 输出配置,选择
blog_glue_xml
数据库. - 输入
parquet_
作为添加到表(可选)和下面的前缀 爬虫时间表,保持频率设置为 一经请求. - 下一页.
- 检查所有参数并选择 创建爬虫.
现在您可以运行爬网程序,这需要 1-2 分钟才能完成。
您可以在 AWS Glue 数据目录中预览为 Parquet 文件新创建的架构,该架构类似于 XML 文件的架构。
我们现在拥有适合与 Athena 一起使用的数据。 在下一节中,我们使用 Athena 执行数据查询。
使用 Athena 查询 Parquet 文件
Athena 不支持查询 XML 文件格式,这就是为什么您将XML文件转换为Parquet,以便更高效的数据查询和使用 点符号 查询复杂类型和嵌套结构。
以下示例代码使用点表示法来查询嵌套数据:
现在我们已经完成了技术 1,让我们继续学习技术 2。
技术 2:将 AWS Glue DynamicFrames 与推断和固定架构结合使用
在上一节中,我们介绍了使用 AWS Glue 爬网程序生成表、使用 AWS Glue 作业将文件转换为 Parquet 格式以及 Athena 访问 Parquet 数据来处理小型 XML 文件的过程。 然而,爬虫在处理超过以下范围的 XML 文件时遇到限制: 大小1 MB。 在本节中,我们将深入研究批处理较大 XML 文件的主题,需要额外的解析来提取单个事件并使用 Athena 进行分析。
我们的方法涉及通过 AWS Glue 读取 XML 文件 动态框架,同时采用推断模式和固定模式。 然后我们使用以下方法提取 Parquet 格式的各个事件 关系化 转换,使我们能够使用 Athena 无缝查询和分析它们。
要实施此解决方案,您需要完成以下高级步骤:
- 创建 AWS Glue 笔记本来读取和分析 XML 文件。
- 使用
DynamicFrames
InferSchema
读取 XML 文件。 - 使用关系化函数取消任何数组的嵌套。
- 将数据转换为 Parquet 格式。
- 使用 Athena 查询 Parquet 数据。
- 重复前面的步骤,但这次将架构传递给
DynamicFrames
而不是使用InferSchema
.
电动汽车保有量数据 XML 文件有 response
标记在其根级别。 该标签包含一个数组 row
标签,嵌套在其中。 行标签是一个包含一组其他行标签的数组,这些标签提供有关车辆的信息,包括其品牌、型号和其他相关详细信息。 以下屏幕截图显示了一个示例。
创建 AWS Glue 笔记本
要创建 AWS Glue 笔记本,请完成以下步骤:
- 打开 AWS 胶水工作室 控制台,选择 工作机会 在导航窗格中。
- 选择 Jupyter笔记本 并选择 创建.
- 输入您的 AWS Glue 作业的名称,例如
blog_glue_xml_job_Jupyter
. - 选择您在先决条件中创建的角色 (
AWSGlueServiceNotebookRoleBlog
).
AWS Glue 笔记本附带了一个预先存在的示例,演示如何查询数据库并将输出写入 Amazon S3。
- 如以下屏幕截图所示调整超时(以分钟为单位)并运行单元以创建 AWS Glue 交互式会话。
创建基本变量
创建交互式会话后,在笔记本末尾创建一个包含以下变量的新单元(提供您自己的存储桶名称):
读取 XML 文件推断架构
如果您不将架构传递给 DynamicFrame
,它将推断文件的架构。 要使用动态帧读取数据,可以使用以下命令:
打印 DynamicFrame 架构
使用以下代码打印架构:
该模式显示了一个嵌套结构 row
包含多个元素的数组。 要将此结构取消嵌套到行中,您可以使用 AWS Glue 关系化 转型:
我们只对行数组中包含的信息感兴趣,我们可以使用以下命令查看架构:
列名称包含 row.row
,对应数据集中的数组结构和数组列。 我们不会重命名本文中的列; 有关执行此操作的说明,请参阅 使用 AWS Glue 自动动态映射和重命名数据文件中的列名称:第 1 部分。 然后,您可以使用以下命令将数据转换为 Parquet 格式并创建 AWS Glue 表:
AWS胶水 DynamicFrame
提供可在 ETL 脚本中使用的功能,以在数据目录中创建和更新架构。 我们使用 updateBehavior
参数直接在数据目录中创建表。 通过这种方法,我们不需要在 AWS Glue 作业完成后运行 AWS Glue 爬网程序。
通过设置schema读取XML文件
读取文件的另一种方法是预定义架构。 为此,请完成以下步骤:
- 导入 AWS Glue 数据类型:
- 为 XML 文件创建架构:
- 读取 XML 文件时传递 schema:
- 像以前一样取消数据集的嵌套:
- 将数据集转换为 Parquet 并创建 AWS Glue 表:
使用 Athena 查询表
现在我们已经创建了两个表,我们可以使用 Athena 查询这些表。 例如,我们可以使用以下查询:
清理
在本文中,我们创建了一个 IAM 角色、一个 AWS Glue Jupyter 笔记本以及 AWS Glue 数据目录中的两个表。 我们还将一些文件上传到 S3 存储桶。 要清理这些对象,请完成以下步骤:
- 在 IAM 控制台上,删除您创建的角色。
- 在 AWS Glue Studio 控制台上,删除自定义分类器、爬网程序、ETL 作业和 Jupyter 笔记本。
- 导航到 AWS Glue 数据目录并删除您创建的表。
- 在 Amazon S3 控制台上,导航到您创建的存储桶并删除名为
temp
,infer_schema
及no_infer_schema
.
关键精华
在 AWS Glue 中,有一个功能称为 InferSchema
在 AWS Glue 中 DynamicFrames
。 它根据数据框包含的数据自动计算出数据框的结构。 相反,定义模式意味着在加载数据之前明确说明数据框架的结构应该如何。
XML 是一种基于文本的格式,不限制其列的数据类型。 这可能会导致 InferSchema 函数出现问题。 例如,在第一次运行中,A 列值为 2 的文件会生成 A 列为整数的 Parquet 文件。 在第二次运行中,新文件的 A 列的值为 C,从而生成一个将 A 列作为字符串的 Parquet 文件。 现在 S3 上有两个文件,每个文件都有不同数据类型的 A 列,这可能会给下游带来问题。
对于嵌套结构或数组等复杂数据类型,也会发生同样的情况。 例如,如果一个文件有一个名为 transaction
,它被推断为一个结构体。 但如果另一个文件具有相同的标签,则会将其推断为数组
尽管存在这些数据类型问题, InferSchema
当您不知道架构或手动定义架构不切实际时,它非常有用。 然而,它对于大型或不断变化的数据集并不理想。 定义模式更加精确,尤其是对于复杂的数据类型,但也有其自身的问题,例如需要手动操作并且对数据更改不灵活。
InferSchema
存在局限性,例如不正确的数据类型推断以及处理空值的问题。 定义模式也有局限性,例如手动工作和潜在错误。
在推断模式和定义模式之间进行选择取决于项目的需求。 InferSchema 非常适合快速探索小型数据集,而定义模式更适合需要准确性和一致性的大型、复杂数据集。 考虑每种方法的权衡和限制,选择最适合您的项目的方法。
结论
在这篇文章中,我们探讨了两种使用 AWS Glue 管理 XML 数据的技术,每种技术都是为了解决您可能遇到的特定需求和挑战而定制的。
技术 1 为那些喜欢图形界面的人提供了一条用户友好的路径。 您可以使用 AWS Glue 爬网程序和可视化编辑器轻松定义 XML 文件的表结构。 这种方法简化了数据管理流程,对于那些寻求简单方法来处理数据的人来说特别有吸引力。
但是,我们认识到爬网程序有其局限性,特别是在处理行大于 1 MB 的 XML 文件时。 这就是技术 2 可以发挥作用的地方。 通过利用 AWS Glue DynamicFrames
借助推断模式和固定模式,并使用 AWS Glue 笔记本,您可以高效地处理任何大小的 XML 文件。 此方法提供了一个强大的解决方案,即使对于行超过 1 MB 限制的 XML 文件也能确保无缝处理。
当您探索数据管理世界时,在您的工具包中加入这些技术可以让您根据项目的具体要求做出明智的决策。 无论您喜欢技术 1 的简单性还是技术 2 的可扩展性,AWS Glue 都能为您提供有效处理 XML 数据所需的灵活性。
作者简介
纳夫尼特舒克拉担任 AWS 专家解决方案架构师,专注于分析。 他对帮助客户从数据中发现有价值的见解充满热情。 通过他的专业知识,他构建了创新的解决方案,使企业能够做出明智的、数据驱动的选择。 值得注意的是,Navnit Shukla 是《AWS 上的数据整理》一书的杰出作者。
帕特里克穆勒 在 AWS 担任高级数据实验室架构师。 他的主要职责是协助客户将他们的想法转化为可投入生产的数据产品。 在空闲时间,帕特里克喜欢踢足球、看电影和旅行。
阿莫盖夸德 是 Amazon Web Services 的高级解决方案开发人员。 他帮助全球客户在 AWS 上构建和部署 AI/ML 解决方案。 他的工作主要集中在计算机视觉和自然语言处理方面,并帮助客户优化其 AI/ML 工作负载以实现可持续性。 Amogh 获得了计算机科学硕士学位,专攻机器学习。
希拉·索诺内 是 AWS 的高级驻场架构师。 她帮助 AWS 客户在加速数据、分析以及 AI/ML 工作负载和实施方面做出明智的选择和权衡。 在业余时间,她喜欢与家人共度时光——通常是在网球场上。
- :具有
- :是
- :不是
- :在哪里
- $UP
- 1
- 10
- 100
- 12
- 121
- 13
- 14
- 1994
- 250
- 26
- 53
- 7
- 8
- 9
- a
- 关于
- 摘要
- 加速
- ACCESS
- 访问
- 完成
- 横过
- 操作
- 加
- 添加
- 额外
- 地址
- 后
- 年龄
- AI / ML
- 所有类型
- 让
- 允许
- 允许
- 还
- 替代
- Amazon
- 亚马逊雅典娜
- 亚马逊网络服务
- an
- 分析
- 分析
- 分析
- 分析
- 和
- 另一个
- 任何
- 阿帕奇
- 吸引人的
- 应用领域
- 使用
- 的途径
- 方法
- 架构
- 保健
- 排列
- AS
- 协助
- 协助
- At
- 作者
- 自动
- 可使用
- AWS
- AWS胶水
- 背部
- 基于
- 基本包
- BE
- 因为
- before
- 开始
- 作为
- 最佳
- 更好
- 之间
- 空白
- 书
- 都
- 建立
- 企业
- 但是
- by
- 被称为
- CAN
- 检索目录
- 原因
- 细胞
- 挑战
- 更改
- 更改
- 改变
- 选择
- 城市
- 分类
- 客户
- 码
- 柱
- 列
- COM的
- 购买的订单均
- 相当常见
- 常用
- 完成
- 完成
- 复杂
- 一台
- 计算机科学
- 计算机视觉
- 流程条件
- 进行
- 结合
- 考虑
- 安慰
- 经常
- 约束
- 建设
- 包含
- 包含
- 包含
- 对比
- 控制
- 兑换
- 转换
- 经济有效
- 经济高效的解决方案
- 县
- 法院
- 覆盖
- 履带
- 创建信息图
- 创建
- 创造
- 关键
- 习俗
- 顾客
- 合作伙伴
- data
- 数据集成
- 数据管理
- 数据驱动
- 数据库
- 数据集
- 处理
- 决定
- 默认
- 定义
- 定义
- 钻研
- 演示
- 依靠
- 部署
- 设计
- 详细
- 详情
- 开发商
- 不同
- 难
- 数字
- 数字时代
- 直接
- 发现
- 不同
- do
- 不会
- 完成
- 别
- DOT
- ,我们将参加
- 动态
- 每
- 缓解
- 容易
- 易
- 编辑
- 效果
- 只
- 效率
- 高效
- 有效
- 努力
- 费力
- 电动
- 电动车
- 分子
- 雇用
- 授权
- 如虎添翼
- 空的
- enable
- 使
- 遭遇
- 结束
- 引擎
- 提高
- 确保
- 确保
- 输入
- 热情
- 条目
- 故障
- 特别
- 醚(ETH)
- 甚至
- 事件
- 所有的
- 例子
- 超过
- 交换
- 专门知识
- 勘探
- 探索
- 探讨
- 提取
- 萃取
- 家庭
- 专栏
- 特征
- 图
- 文件
- 档
- 金融
- 姓氏:
- 固定
- 高度灵活
- 专注焦点
- 重点
- 以下
- 针对
- 格式
- FRAME
- Free
- 频率
- 止
- 功能
- Gain增益
- 一般用途
- 生成
- 全球
- Go
- 目标
- 政府
- 大
- 处理
- 处理
- 发生
- 治理
- 有
- 有
- he
- 医疗保健
- 胸襟
- 帮助
- 帮助
- 帮助
- 这里
- 高水平
- 高度
- 他的
- 创新中心
- How To
- 但是
- HTML
- HTTP
- HTTPS
- IAM
- 理想
- 思路
- 身分
- if
- 说明
- 实施
- 实现
- 实施
- 进口
- 改善
- 改善
- in
- 包含
- 个人
- 个人
- 行业
- 信息
- 通知
- 基础设施
- 创新
- 内
- 可行的洞见
- 代替
- 说明
- 整合
- 积分
- 互动
- 有兴趣
- 接口
- 成
- 涉及
- 问题
- IT
- 它的
- 工作
- 工作机会
- JPG
- JSON
- Jupyter笔记本
- 保持
- 知道
- 实验室
- 语言
- 大
- 大
- 领导
- 学习用品
- 学习
- Level
- 喜欢
- 极限
- 局限性
- 限制
- Line
- 线
- 加载
- 装载
- 逻辑
- 寻找
- 机
- 机器学习
- 主要
- 主要
- 使
- 制作
- 颠覆性技术
- 管理的
- 手册
- 手动
- 许多
- 制图
- 硕士
- 可能..
- 手段
- 菜单
- 元数据
- 方法
- 分钟
- 模型
- 更多
- 更高效
- 最先进的
- 移动
- 电影
- 多
- 姓名
- 命名
- 名称
- 自然
- 自然语言
- 自然语言处理
- 导航
- 旅游导航
- 必要
- 需求
- 需要
- 全新
- 新
- 下页
- 特别是
- 笔记本
- 现在
- 数
- 对象
- of
- 优惠精选
- on
- 一
- 仅由
- 运营
- 最佳
- 优化
- 优化
- 附加选项
- or
- 秩序
- 组织
- 起始地
- 其他名称
- 我们的
- 输出
- 产量
- 超过
- 克服
- 己
- 页
- 面包
- 参数
- 参数
- 部分
- 尤其
- 通过
- 径
- 帕特里克
- 演出
- 性能
- 权限
- 挑
- 柏拉图
- 柏拉图数据智能
- 柏拉图数据
- 播放
- 政策
- 人口
- 拥有
- 帖子
- 潜力
- 精确的
- 比较喜欢
- 先决条件
- 预览
- 以前
- 问题
- 过程
- 处理
- 处理
- 产品
- 项目
- 项目
- 提供
- 提供
- 发布
- 目的
- 蟒蛇
- 查询
- 快速
- 宁
- 阅读
- 容易
- 阅读
- 原因
- 收到
- 承认
- 参考
- 相应
- 岗位要求
- 营救
- 资源
- 响应
- 责任
- REST的
- 限制
- 限制
- 成果
- 健壮
- 角色
- 根
- 行
- 运行
- 同
- 保存
- 斯卡拉
- 可扩展性
- 可扩展性
- 科学
- 脚本
- 无缝的
- 无缝
- 其次
- 部分
- 看到
- 前辈
- 特色服务
- 会议
- 集
- 设置
- 几个
- 她
- 壳
- 应该
- 显示
- 如图
- 作品
- 类似
- 简易
- 简单
- 简化
- 单
- 尺寸
- 小
- So
- 足球
- 方案,
- 解决方案
- 一些
- 来源
- 来源
- 火花
- 专家
- 专业
- 具体的
- 特别是
- 速度
- 花费
- SQL
- 标准
- 启动
- 州/领地
- 个人陈述
- 说明
- 步
- 步骤
- 存储
- 存储
- 简单的
- 精简
- 串
- 强烈
- 结构体
- 结构
- 工作室
- 成功
- 这样
- 合适的
- SUPPORT
- 肯定
- 永续发展
- 产品
- 表
- 行李牌
- 量身定制
- 采取
- 需要
- 任务
- 技术
- 网球
- 比
- 这
- 信息
- 世界
- 其
- 他们
- 然后
- 那里。
- 博曼
- 他们
- Free Introduction
- 那些
- 通过
- 次
- 标题
- 标题
- 至
- 今天的
- 工具箱
- 最佳
- 主题
- 改造
- 转型
- 旅游
- 谈到
- 教程
- 二
- 类型
- 类型
- 全功能包
- 下
- 更新
- 更新
- 上传
- us
- 可用性
- 使用
- 用过的
- 用户
- 用户界面
- 用户友好
- 使用
- 运用
- 平时
- 利用
- 有价值
- 折扣值
- 价值观
- 汽车
- 版本
- 通过
- 查看
- 意见
- 愿景
- 观看
- 方法..
- we
- 卷筒纸
- Web服务
- 什么是
- ,尤其是
- 而
- 是否
- 这
- WHO
- 为什么
- 将
- 中
- 也完全不需要
- 工作
- 工作流程
- 工作流程
- 合作
- 世界
- 写
- XML
- 您
- 您一站式解决方案
- 和风网