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

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

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

SPARQL UPDATE LOAD 命令的语法在 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 LOAD URI 都必须以 https:// 开头。这包括 Amazon S3 URL。

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

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

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

要为 Amazon S3 文件生成预签名 URL,您可以使用如下 Amazon 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 服务器,通过 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 UPDATE 命令加载数据:

    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 服务器上的超时设置。您还可以通过在服务器上启用调试日志并查看超时来诊断问题。