创建虚拟知识图谱,使用 Amazon Neptune 和 Amazon S3 数据湖 数据库博客
使用 Amazon Neptune 和 Amazon S3 数据湖创建虚拟知识图谱
作者 Mike Havey 和 Charles Ivie发布时间 2024年2月21日分类 高级 (300)、Amazon Athena、Amazon Neptune、技术如何做永久链接评论
关键要点
企业中的数据常常因为存储需求而分散在多个数据库中。本文展示了如何使用 SPARQL 查询 Amazon Neptune 和 Amazon S3 中的数据。知识图谱适合存储结构化数据和数据湖适合存储大量传感器读取数据结合,以便于进行复杂查询。解决方案架构通过一个 SPARQL 11 联合查询来整合两个数据来源,实现高效的数据检索。在企业中,逻辑上相互关联的数据往往分散在不同的数据库中。有些数据适合不同的存储方案,而将所有数据放在一个数据存储中可能并不现实。然而,这些数据通常需要重新关联,以提供组织使用的解决方案。最大的挑战是将数据从多个系统汇聚在一起。
在这篇文章中,我们将展示如何通过使用 SPARQL 来查询 Amazon Neptune 和 Amazon Simple Storage ServiceAmazon S3中的数据。
知识图谱与数据湖的区别
考虑一个使用案例,我们想分析来自全球各地气象站的气候数据,这些数据覆盖了许多年。每个气象站在一段时间内进行了数十亿次读取,并且一些气象站的运营时间超过了 100 年。
气象站非常适合使用 知识图谱。在这个图中,气象站作为资源,具有重要的属性,例如位置、高度和传感器类型。我们可能还会添加其他属性,例如与气象站所在城市相关的数据,包括 柯本气候分类、人口、人口统计和经济信息。然后,我们可以在这些数据上运行遍历查询,例如:“列出城市在欧洲或非洲且人口少于 100 万的所有气象站。”
Neptune 是一种图数据库服务,支持 W3C 的 SPARQL 和 RDF 的推荐,使得构建与高度关联的数据集合作的应用变得非常简单。
银河加速器相反,从气象站传感器收集的阅读数据非常适合存储在压缩数据湖中,因为这些数据数量庞大,且其模型之间的连接性不高。读取的确切数量未知,而且仍在不断增长,因此数据湖的特点能够存储几乎无限量的数据非常适合这种情况,我们也可以提出类似的请求:“列出平均年温度超过 18 摄氏度、平均湿度超过 50 的所有气象站。”
Amazon S3 是一种对象存储服务,可以存储任何数量的数据。例如,您可以将大量压缩的 Apache Parquet 文件存储在数据湖中。
在我们的使用案例中,数据分布在两个系统中,即 Neptune 和 Amazon S3,但我们希望提出的请求能够从这两个系统中同时检索数据。例如:“列出城市在欧洲或非洲且人口少于 100 万的所有气象站,同时平均年温度超过 18 摄氏度、平均湿度高于 50。”
解决方案概述
我们设置了一个架构,使用一个单一的 SPARQL 11 联合查询 来查询所有关联数据,作为一个单一的图,部分数据来自 Neptune,其他数据在虚拟图中则源自 Amazon S3 中的 Parquet 文件。
本篇文章中使用了来自 国家环境信息中心 (NCEI) 的公开可用数据。我们选择并分离了一部分可用数据,涉及全球温度读取信息。
我们在本篇文章中使用的所有代码、数据和脚本都可以在 Graph Virtualization in Amazon Neptune GitHub 仓库 中找到。
数据的分离和加载到 Amazon Neptune 和 Amazon S3 的具体方式如下:
数据来源内容Neptune气象站的经纬度坐标、名称和唯一标识符Amazon S3温度读取的摄氏度和华氏度、读取的时间戳、气象站的唯一标识符下图展示了解决方案架构。
我们的解决方案中使用了以下服务:
Amazon Athena Athena 是一种无服务器的交互式分析服务,可以通过 AWS Glue 对存储在 S3 数据湖中的数据提供 SQL 访问。Amazon Elastic Container Service Amazon ECS 是完全托管的容器编排服务,使您能够轻松地部署、管理和扩展容器化应用。AWS Glue AWS Glue 是一种完全托管的提取、转换和加载 (ETL) 服务,能够分析和分类 S3 数据湖中的数据。Amazon Neptune Neptune 是一种快速、可靠且完全托管的图数据库服务,专为存储数十亿个关系和以毫秒延迟查询图数据而优化。Amazon Simple Storage Service Amazon S3 是一种提供行业领先的可伸缩性、数据可用性、安全性和性能的对象存储服务。OntopVKG Ontop 是一个虚拟知识图谱系统,公开一个映射到 SQL 端点的 SPARQL 端点。此外,我们提供了一个 AWS Cloud9 开发环境,以便构建和部署 Ontop 容器。
我们执行以下步骤来链接这些数据集:
运行一个 AWS CloudFormation 模板以创建主栈。在 AWS Cloud9 IDE 中运行由主栈创建的脚本以设置测试数据。运行一个由主栈创建的 AWS Glue 爬虫,以爬取 Amazon S3 中的数据,定义 Athena 所需的表结构。使用 AWS Cloud9 IDE,构建 Ontop 容器并将其部署到 ECS 集群。Ontop 公开一个 SPARQL 端点,该端点映射到来自 Athena 的 SQL 端点,可以访问 S3 数据湖中的数据。创建可访问 S3 数据湖的 SPARQL 端点后,我们可以使用 SPARQL 11 联合查询功能,在 Neptune 上运行一个单独的图查询,返回两个数据集中的数据。

先决条件
在此操作流程中,您需要一个具备权限创建 Neptune、AWS Glue、Amazon ECS 和相关服务资源的 AWS 账户。阅读本指南不需要先前对这篇文章中工具和技术的知识,但是掌握以下概念会更有帮助:
关联数据SPARQL 和 RDFAmazon S3AthenaAmazon ECS客户需自行承担运行此解决方案所产生的费用。有关费用估算的帮助,请访问 AWS 费用计算器。
使用 AWS CloudFormation 设置资源
要通过 AWS CloudFormation 供应资源,请从我们的 GitHub 仓库 下载 CloudFormation 模板 的副本。然后按照以下步骤进行:
在 AWS CloudFormation 控制台中,选择 创建堆栈。选择 使用新资源标准。选择 上传模板文件。选择 选择文件 上传您所下载的本地模板副本,文件名为 ontopmainyaml。选择 下一步。输入您选择的堆栈名称。请记住该名称以供后续步骤使用。您可以保留 参数 部分中的默认值。选择 下一步。继续审核其余部分。阅读并在 功能 部分选择复选框。选择 创建堆栈。该堆栈将创建 Neptune 集群、Neptune 笔记本实例、用于部署 Ontop 的 ECS 集群、用于存储气候读取数据的 S3 桶,以及一个 AWS Glue 数据目录数据库和爬虫,以将数据暴露为数据湖。它还创建了一个 AWS Cloud9 IDE,您可以在其中设置 Ontop 容器。
在 AWS Cloud9 中复制气候文件
按照以下步骤设置您的数据:
在 AWS Cloud9 控制台中,找到环境 OntopCloud9IDE。选择 打开 以打开环境,运行以下代码:
bash
获取代码
git clone https//githubcom/awssamples/amazonneptunegraphvirtualizationgit
使脚本可执行
cd amazonneptunegraphvirtualization/scripts/chmod x sh
将数据文件复制到您的桶。这可能需要几分钟。
/s3cpsh
将 ltyourstacknamegt 替换为您之前创建的 CloudFormation 堆栈的名称。这些步骤将气候数据文件复制到堆栈创建的 S3 桶中。复制过程可能需要几分钟完成。
在继续下个步骤时,请保持 IDE 打开。
设置和测试数据湖
打开浏览器的新标签页并完成以下步骤以创建您的数据湖:
在 AWS Glue 控制台中,选择导航窗格中的 爬虫。选择爬虫 ClimateCrawler,然后选择 运行,等待爬虫完成。在导航窗格中的 数据目录 下,选择 表。应该会有一个名为 climate 的表。在 Athena 控制台中,导航到查询编辑器。在 设置 部分,选择 管理,并将查询结果位置设置为由 AWS CloudFormation 创建的 S3 桶。在 Athena 查询编辑器中,选择 climate 表,然后运行 SQL 查询以确认湖中有气候读取数据:
sqlSELECT FROM ontopdemolakeclimate LIMIT 10
构建 Ontop 容器
回到 AWS Cloud9 IDE 中构建 Ontop 容器。
在构建之前,您可以检查文件。 Ontop 在 Amazon ECS 中运行于 Docker 容器。Dockerfile 描述了 Ontop 运行此示例所需的所有配置和资源。
以下是文件的摘要;有关更多细节,请访问 Ontop 教程:
Athena JDBC 驱动程序 Ontop 需要此 驱动程序 来连接 Athena 公开的 SQL 端点。climateowl 这是 OWL 本体文件,描述了我们从 Ontop 展示的模型。该文件包括以下陈述,以描述 WeatherStation存储在 Neptune 中与 TemperatureReading存储在 Amazon S3 中之间的关系。有关为其他使用案例创建 OWL 本体的更多了解,请参考我们的 GitHub 仓库。
plaintext
http//climateawscom/ontology/reading
clmoreading rdftype owlObjectProperty rdfssubPropertyOf owltopObjectProperty rdfsdomain clmoWeatherStation rdfsrange clmoTemperatureReading
climateobda 这是定义将通过 Ontop 展示的图模型的映射文件。文件中包含以下映射,其中 TemperatureReading RDF 陈述被定义并与 AWS Glue 数据目录中通过 Athena 访问的 climate 表的列映射:
plaintexttarget clmr{timestamp}/{station} a clmoTemperatureReading clmodateTime {date}xsddateTime clmofahrenheit {fahrenheit}xsdfloat source select from lensesclimate
climateproperties 此属性文件描述了 Ontop 连接到 Athena 所需的所有 JDBC 连接参数,以及 Ontop 的其他属性,如日志配置。
lensesjson Ontop lenses 定义 SQL 数据的视图,在 Ontop 容器级别定义,为 Ontop 提供了有关模式的额外信息,以优化 SPARQLSQL 映射。以下 uniqueConstraint 定义了站和时间戳的组合,可视为复合唯一键。这有助于 Ontop 容器在检索数据湖中的温度读取时生成更高效的 SQL 查询。
jsonuniqueConstraints { added [ { name uc1 determinants [ timestamp station ] } ] }
构建容器
要从这些文件构建 Ontop 容器,请按照以下步骤操作:
在终端运行以下命令,并替换您的堆栈名称:
bash/buildsh ltyourstacknamegt
完成后,容器将被添加到 ECR 仓库中。
在 Amazon ECR 控制台中,打开 ontoplake 私有仓库,并检查构建状态。![ECR 私有仓库](https//d2908q01vomqb2cloudfrontnet/887309d048beef83ad3eabf2a