本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 SPARQL 更新加载将数据导入 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 更新加载将文件直接从Amazon S3 加载到 Neptune
由于 Neptune 不允许您在使用 SPARQL UPDATE LOAD 时将 IAM 角色传递给Amazon S3,因此要么相关的 Amazon S3 存储桶必须是公开的,要么必须在 LOAD 查询中使用预先签名的 Amazon S3 网址。
要为 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 文档
此外,要加载的文件的内容类型必须正确设置。
-
使用
-metadata
参数将文件上传到 Amazon S3 时设置文件的内容类型,如下所示: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 -
确认媒体类型信息实际存在。运行:
curl -v
bucket-name/folder-name
此命令的输出应显示您在上传文件时设置的媒体类型信息。
-
然后你可以使用
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 网址访问的存储桶。
您还可以设置 Web 代理服务器以从私有 Amazon S3 存储桶加载,如下所示:
使用 Web 服务器通过 SPARQL UPDATE LOAD 将文件加载到 Neptune
-
在托管 Neptune 和要加载的文件的 VPC 内运行的计算机上安装 Web 服务器。例如,使用 Amazon Linux,您可以如下所示安装 Apache:
sudo yum install httpd mod_ssl sudo /usr/sbin/apachectl start
-
定义您将要加载的 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
-
确认 MIME 类型映射可以正常使用。在您启动并运行 Web 服务器并托管了所选格式的 RDF 文件之后,您可以通过从本地主机向 Web 服务器发送请求来测试配置。
例如,您可以如下所示发送请求:
curl -v http://localhost:80/test.rdf
然后,在
curl
的详细输出中您应看到如下所示的行:Content-Type: application/rdf+xml
这指示已成功定义内容类型映射。
-
现在,您可以使用 SPARQL Upate 命令加载数据了:
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 服务器上的超时设置。您还可以通过在服务器上启用调试日志并查看超时来诊断问题。