本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
RDF 数据的原生导出
海王星导出 API 使您能够将数据从海王星数据库导出到亚马逊 S3。您可以以 N-Triples 或 N-Quads 格式导出 RDF 数据。
原生导出的工作原理
本机导出在 Neptune 集群的写入器实例上运行,并使用分段上传将导出的数据写入到 Amazon S3。由于导出使用写入器实例的计算资源,因此我们强烈建议对克隆集群运行导出,以避免影响生产工作负载。有关更多信息,请参阅建议。
出口吞吐量
导出吞吐量大致呈线性增长,实例大小最大为。r7i.16xlarge根据保守的规划估计,预计每个 vCPU 每秒大约有 50,000 条语句。
使用此公式估算出口持续时间:
export_seconds = total_statements / (vCPUs × 50,000)
实际吞吐量取决于数据集特征,包括谓词基数、语句复杂性和集群大小。
先决条件
在使用导出 API 之前,您必须:
让 Neptune 数据库集群运行 1.4.6.0 或更高版本(支持 1.4.8.0 或更高版本)
exportFilter
建议
我们强烈建议在没有任何 read/write 工作负载的克隆集群上运行导出操作,以避免对生产性能产生影响。
为了获得最佳的性价比,我们建议使用 16xlarg e 实例进行导出操作。此实例类型提供:
足够的内存来处理大型数据集而不会降低性能
用于并行导出处理的最佳 CPU 资源
导出工作负载的最佳成本效益
IAM 权限
导出功能涉及两个独立的 IAM 角色:
调用者的 IAM 角色 — 向导出 API 终端节点发送请求的 IAM 委托人(用户或角色)。此角色需要 Neptune 数据访问权限。
S3 访问 IAM 角色 — Neptune 在将导出的数据写入亚马逊 S3 时所扮演的角色。您在导出请求的
iamRoleArn参数中传递此角色的 ARN,它必须与您的 Neptune 集群相关联。
来电者权限(海王星数据访问操作)
调用导出 API 的 IAM 委托人必须在其 IAM 政策中执行以下 Neptune 数据访问操作:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowNeptuneExportActions", "Effect": "Allow", "Action": [ "neptune-db:StartExportJob", "neptune-db:GetExportJobStatus", "neptune-db:ListExportJobs", "neptune-db:CancelExportJob" ], "Resource": "arn:aws:neptune-db:us-east-1:123456789012:cluster-resource-id/*" } ] }
有关更多信息,请参阅使用 IAM 数据访问策略声明。
S3 访问角色权限
iamRoleArn请求参数中传递的 IAM 角色必须与您的 Neptune 集群相关联,并且必须授予 Neptune 写入目标 S3 存储桶的权限。有关创建 IAM 角色并将其与集群关联的步骤,请参阅创建 IAM 角色以允许 Neptune 访问 Amazon S3。
与只需要读取权限的批量加载器不同,导出 API 需要 S3 的写入权限。使用以下权限策略代替该页面上描述的AmazonS3ReadOnlyAccess托管策略。
将以下权限策略附加到 S3 访问角色:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3WriteForNeptuneExport", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:GetBucketPublicAccessBlock" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }
可选 KMS 权限
如果您在导出请求kmsKeyIdentifier中指定,请向 S3 访问角色添加以下权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowKMSForNeptuneExport", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id" } ] }
导出端点
要导出数据,您需要向https://your-neptune-endpoint:port/export终端节点发送 HTTP 请求。
导出请求语法
POST https://your-neptune-endpoint:port/export
请求标头
Content-Type: application/json
请求正文
{ "destination": "string", "format": "string", "iamRoleArn": "string", "region": "string", "compression": "string", "kmsKeyIdentifier": "string", "exportFilter": { "namedGraphUris": ["string"] } }
请求参数
- 目的地(字符串)
必需。存储导出数据的 S3 URI。必须采用
s3://bucket-name/optional-prefix/格式。- 格式(字符串)
-
必需。导出数据的格式。有效值:
ntriples— 以 N-Triples 格式导出数据nquads— 以 N-Quads 格式导出数据
- iam RoleArn(字符串)
必需。海王星为访问 S3 存储桶而承担的 IAM 角色的亚马逊资源名称 (ARN)。
- 区域(字符串)
必需。S3 存储桶的。 Amazon Web Services 区域 必须与您的 Neptune 集群位于同一区域。
- 压缩(字符串)
-
可选。导出文件的压缩格式。有效值:
gz-以 .gz 格式压缩文件
- kms KeyIdentifier(字符串)
可选。用于加密导出 Amazon KMS 数据的密钥的 ARN。
- 导出过滤器(对象)
可选。用于有选择地导出 RDF 数据子集的过滤器。在引擎版本 1.4.8.0 及更高版本中可用。
- 命名 GraphUris(字符串数组)
要导出的命名图形 URI(最多 100 个)。仅导出指定图表中的数据。如果指定的图表为空,则导出成功,结果为空。无效的 URI 失败。
InvalidParameterException
响应语法
{ "status": "string", "payload": { "exportId": "string" } }
- 状态(字符串)
请求的 HTTP 状态。
- 导出 ID(字符串)
导出任务的唯一标识符。
导出状态端点
要检查导出任务的状态,您需要使用导出 ID 向导出端点发送 HTTP GET 请求。
GET https://your-neptune-endpoint:port/export?exportId=export-id
请求参数
- 导出 ID(字符串)
必需。导出任务的唯一标识符。
响应语法
{ "status": "string", "payload": { "exportId": "string", "destination": "string", "status": "string", "statusReason": "string", "format": "string", "iamRoleArn": "string", "kmsKeyIdentifier": "string", "exportFilter": { "namedGraphUris": ["string"] }, "exportTaskDetails": { "timeElapsedSeconds": number, "startTime": number, "numRecordsWritten": number, "progressPercentage": number } } }
- 导出 ID(字符串)
导出任务的唯一标识符。
- 目的地(字符串)
导出数据的 S3 URI。
- 状态(字符串)
-
导出任务的当前状态。有效值:
EXPORT_NOT_STARTED— 导出已排队但尚未开始EXPORT_IN_PROGRESS— 导出当前正在运行EXPORT_COMPLETED— 导出成功完成EXPORT_CANCELLING— 导出已取消EXPORT_CANCELLED_BY_USER— 用户取消了导出EXPORT_S3_ERROR— 由于 S3 访问错误,导出失败EXPORT_FAILED— 由于其他错误,导出失败
- 状态原因(字符串)
有关导出状态的其他信息。
- 格式(字符串)
导出的数据的格式。
- iam RoleArn(字符串)
用于 S3 访问的 IAM 角色的 ARN。
- kms KeyIdentifier(字符串)
用于加密的 KMS 密钥的 ARN(如果已指定)。
- 导出过滤器(对象)
应用的导出过滤器(如果在请求中指定了过滤器)。
named GraphUris(字符串数组)-用于过滤导出的命名图形 URI。
- 导出 TaskDetails(对象)
-
有关导出任务进度的详细信息:
时间 ElapsedSeconds(数字)-自导出开始以来经过的时间
startTime(数字)— 导出开始时的纪元时间
num RecordsWritten(数字)— 写入 S3 的记录数
progressPercenty(数字)— 导出完成的百分比
列出导出端点
要列出所有导出任务,您需要向导出端点发送 HTTP GET 请求。
GET https://your-neptune-endpoint:port/export
响应语法
{ "status": "string", "payload": [ "string" ] }
- 有效载荷(阵列)
所有导出任务的导出 ID 数组。
取消导出端点
要取消导出任务,您需要使用导出 ID 向导出端点发送 HTTP DELETE 请求。
DELETE https://your-neptune-endpoint:port/export?exportId=export-id
请求参数
- 导出 ID(字符串)
必需。要取消的导出任务的唯一标识符。
响应语法
{ "status": "string", "payload": { "message": "string" } }
导出输出格式
S3 目录结构
导出的数据按如下方式组织在您的 S3 存储桶中:
s3://your-bucket/export-id/ ├── data/ │ ├── part-00000.nt │ ├── part-00001.nt │ └── ... └── export_status.json
- 数据/ 目录
包含以指定格式导出的图形数据文件。
- export_status.json 文件
包含有关导出操作的元数据。
错误响应
常见错误码
- BadRequestException
该请求包含无效的参数或导出已在进行中。
- AccessDeniedException
IAM 角色缺少访问 S3 或 KMS 所需的权限。
错误响应示例
{ "code": "BadRequestException", "requestId": "request-id", "message": "Export already in progress with ID 'existing-id'. Please wait or cancel it first.", "detailedMessage": "Detailed error description" }
示例
开始导出
curl -X POST https://your-cluster-endpoint:8182/export \ -H "Content-Type: application/json" \ -d '{ "destination": "s3://my-bucket/exports/", "format": "ntriples", "iamRoleArn": "arn:aws:iam::123456789012:role/neptune-export-role", "region": "us-west-2" }'
开始筛选导出(命名图形)
curl -X POST https://your-cluster-endpoint:8182/export \ -H "Content-Type: application/json" \ -d '{ "destination": "s3://my-bucket/exports/", "format": "nquads", "iamRoleArn": "arn:aws:iam::123456789012:role/neptune-export-role", "region": "us-west-2", "exportFilter": { "namedGraphUris": [ "http://example.com/graph1", "http://example.com/graph2" ] } }'
检查导出状态
curl -X GET "https://your-cluster-endpoint:8182/export?exportId=<id>"
取消导出
curl -X DELETE "https://your-cluster-endpoint:8182/export?exportId=<id>"
限制
原生导出有以下限制:
实例支持 — Neptune 无服务器实例或只读副本不支持本机导出。导出始终在已配置集群的写入器实例上运行。
每个集群一次导出 -一次只能在集群上激活一个导出。如果您在另一次导出过程中提交了新的导出请求,则该请求将失败。
不自动恢复 -如果引擎在导出期间重新启动,则导出将失败,必须从头开始重新启动。引擎重启后导出进度不会保留。
引擎事件后的状态可用性 -如果引擎崩溃,则无法通过状态 API 检索导出状态。
写入期间的一致性 -如果您的集群在导出期间为写入流量提供服务,则导出的数据可能会反映图表的部分或不一致的视图。为保证一致的导出,请对克隆的集群运行导出。