使用 SPARQL UPDATE LOAD 将数据导入到 Neptune - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 SPARQL UPDATE LOAD 将数据导入到 Neptune

SPARQL 更新加载命令的语法在SPARQL 1.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— (必需) 指定包含要加载到图形中的数据的远程数据文件。

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

    • .nt 表示 NTriples。

    • .nq 表示 NQuads。

    • .trig 表示 Trig。

    • .rdf 表示 RDF/XML。

    • .ttl 表示 Turtle。

    • .n3 表示 N3。

    • .jsonld 表示 JSON-LD。

  • INTO GRAPH(要加载数据的命名图形)— (可选) 指定应将数据加载到的图形。

    Neptune 将每个三元组与一个命名图形相关联。您可以使用回退命名图形 URI 指定默认命名图形http://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 LOADURI 必须以https://. 这包括 Amazon S3 URL。

与 Neptune 批量装载机相反,调用SPARQL UPDATE LOAD是完全事务性的。

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

由于 Neptune 不允许您在使用 SPARQL UPDATE LOAD 时将 IAM 角色传递给 Amazon S3,因此所讨论的 Amazon S3 存储桶必须是公有存储桶,或者您必须使用预签名 Amazon S3 URL在 LOAD 查询中。

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

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

然后,您可以在LOAD命令:

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 存储桶或您使用预签名 Amazon S3 URL在 LOAD 查询中。

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

使用 Web 服务器,通过 SPARQL UPDATE LOAD 将文件加载到 Neptune

  1. 在运行在 VPC 中且托管了 Neptune 和要加载文件的的计算机上安装 Web 服务器。例如,使用 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。

    • .rdf 表示 RDF/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 类型映射可以正常使用。在您启动并运行 Web 服务器并托管了所选格式的 RDF 文件之后,您可以通过从本地主机向 Web 服务器发送请求来测试配置。

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

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

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

    Content-Type: application/rdf+xml

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

  4. 现在,您已准备好使用 SPARQL UDPATE 命令加载数据:

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

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

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

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