用于SPARQLUPDATELOAD将数据导入 Neptune - Amazon Neptune

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

用于SPARQLUPDATELOAD将数据导入 Neptune

该SPARQLUPDATELOAD命令的语法在 SPARQL1.1 更新建议中指定:

LOAD SILENT (URL of data to be loaded) INTO GRAPH (named graph into which to load the data)
  • SILENT –(可选)即使在处理过程中出现错误,也使操作返回成功。

    当单个事务包含多个语句(例如 "LOAD ...; LOAD ...; UNLOAD ...; LOAD ...;")并且即使某些远程数据无法处理也希望事务完成时,这可能很有用。

  • URL of data to be loaded   —(必需)指定包含要加载到图表中的数据的远程数据文件。

    远程文件必须具有以下扩展名之一:

    • .nt对于NTriples。

    • .nq对于NQuads。

    • .trig 表示 Trig。

    • .rdffo RDF r/XML。

    • .ttl 表示 Turtle。

    • .n3 表示 N3。

    • .jsonld代表 JSON-LD。

  • INTO GRAPH(named graph into which to load the data)   —(可选)指定应将数据加载到的图表。

    Neptune 将每个三元组与一个命名图形相关联。你可以使用后备命名图来指定默认的命名图 URIhttp://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph,如下所示:

    INTO GRAPH <http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph>
注意

当你需要加载大量数据时,我们建议你改用 Neptune 批量加载器。UPDATE LOAD有关批量加载程序的更多信息,请参阅使用 Amazon Neptune 批量加载器摄取数据

您可以使用 SPARQL UPDATE LOAD 直接从 Amazon S3 加载数据,或者从通过自行托管 Web 服务器获取的文件加载数据。要加载的资源必须与 Neptune 服务器位于同一区域,并且必须允许在中使用资源的终端节点。VPC有关创建 Amazon S3 端点的信息,请参阅创建 Amazon S3 VPC 终端节点

一切都SPARQL UPDATE LOADURIs必须从开始https://。这包括亚马逊 S3 URLs。

与 Neptune 批量加载程序相反,对 SPARQL UPDATE LOAD 的调用是完全事务性的。

使用以下命令将文件直接从 Amazon S3 加载到 Neptune SPARQL UPDATE LOAD

由于 Neptune 不允许您在使用时将IAM角色传递给 Amazon S3 SPARQL UPDATELOAD,因此要么相关的 Amazon S3 存储桶必须是公开的,要么您必须在查询中使用预签名的 Amazon S3 URL。LOAD

要为 Amazon URL S3 文件生成预签名文件,您可以使用如下 AWS CLI 命令:

aws s3 presign --expires-in (number of seconds) s3://(bucket name)/(path to file of data to load)

然后你就可以在LOAD命令URL中使用生成的预签名:

curl https://(a Neptune endpoint URL):8182/sparql \ --data-urlencode 'update=load (pre-signed URL of the remote Amazon S3 file of data to be loaded) \ into graph (named graph)'

有关更多信息,请参阅身份验证请求:使用查询参数Boto3 文档展示了如何使用 Python 脚本生成预签名。URL

此外,要加载的文件的内容类型必须正确设置。

  1. 将文件上传到 Amazon S3 时,使用 -metadata 参数设置文件的内容类型,如下所示:

    aws s3 cp test.nt s3://bucket-name/my-plain-text-input/test.nt --metadata Content-Type=text/plain aws s3 cp test.rdf s3://bucket-name/my-rdf-input/test.rdf --metadata Content-Type=application/rdf+xml
  2. 确认媒体类型信息实际存在。运行:

    curl -v bucket-name/folder-name

    此命令的输出应显示您在上传文件时设置的媒体类型信息。

  3. 然后,您可以使用 SPARQL UPDATE LOAD 命令将这些文件导入到 Neptune:

    curl https://your-neptune-endpoint:port/sparql \ -d "update=LOAD <https://s3.amazonaws.com/bucket-name/my-rdf-input/test.rdf>"

上述步骤仅适用于公有 Amazon S3 存储桶,或您在LOAD查询中使用预签名 Amazon S3 访问URL的存储桶。

您还可以设置 Web 代理服务器,以便从私有 Amazon S3 桶中加载,如下所示:

使用 Web 服务器将文件加载到 Neptune 中 SPARQL UPDATE LOAD
  1. 在托管 Neptune 和要加载的文件的计算机上运行 Web 服务器。VPC例如,使用 Amazon Linux,您可以如下所示安装 Apache:

    sudo yum install httpd mod_ssl sudo /usr/sbin/apachectl start
  2. 定义要加载RDF的文件内容的MIME类型。SPARQL使用 Web 服务器发送的Content-type标头来确定内容的输入格式,因此必须为 Web 服务器定义相关MIME类型。

    例如,假设您使用以下文件扩展名来标识文件格式:

    • .nt对于NTriples。

    • .nq对于NQuads。

    • .trig 表示 Trig。

    • .rdffo RDF r/XML。

    • .ttl 表示 Turtle。

    • .n3 表示 N3。

    • .jsonld代表 JSON-LD。

    如果您使用 Apache 2 作为 Web 服务器,您将编辑文件 /etc/mime.types 并添加以下类型:

    text/plain nt application/n-quads nq application/trig trig application/rdf+xml rdf application/x-turtle ttl text/rdf+n3 n3 application/ld+json jsonld
  3. 确认 MIME-type 映射是否有效。启动并运行 Web 服务器并以您选择的格式托管RDF文件后,您可以通过从本地主机向 Web 服务器发送请求来测试配置。

    例如,您可以如下所示发送请求:

    curl -v http://localhost:80/test.rdf

    然后,在 curl 的详细输出中您应看到如下所示的行:

    Content-Type: application/rdf+xml

    这指示已成功定义内容类型映射。

  4. 现在,您已准备好使用以下SPARQLUPDATE命令加载数据:

    curl https://your-neptune-endpoint:port/sparql \ -d "update=LOAD <http://web_server_private_ip:80/test.rdf>"
注意

当加载的源文件很大时,在 Web 服务器上使用 SPARQL UPDATE LOAD 可能会触发超时。Neptune 在文件数据流式传入时进行处理,对于大文件,其用时可能会超过在服务器上配置的超时。这反过来又可能导致服务器关闭连接,当 Neptune 在直播中遇到意外EOF情况时,这可能会导致以下错误消息:

{ "detailedMessage":"Invalid syntax in the specified file", "code":"InvalidParameterException" }

如果您收到此消息,但不认为自己的源文件包含无效语法,请尝试增加 Web 服务器上的超时设置。您还可以通过在服务器上启用调试日志并查看超时来诊断问题。