View a markdown version of this page

示例:将数据加载到 Neptune 数据库实例中 - Amazon Neptune

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

示例:将数据加载到 Neptune 数据库实例中

此示例演示如何将数据加载到 Amazon Neptune 中。除非另有说明,否则您必须在与 Neptune 数据库实例相同的 Amazon Virtual Private Cloud (VPC) 中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例中执行这些步骤。

数据加载示例的先决条件

在开始之前,您必须具有以下内容:

  • 一个 Neptune 数据库实例。

    有关启动 Neptune 数据库实例的信息,请参阅创建 Amazon Neptune 集群。

  • 将数据文件放入其中的 Amazon Simple Storage Service (Amazon S3) 桶。

    您可以使用现有存储段。如果没有 S3 桶,请参阅 Amazon S3 入门指南中的创建桶。

  • 为以 Neptune 加载程序支持的格式之一加载的数据绘制图形:

    如果您使用 Gremlin 查询图形,则 Neptune 可以采用逗号分隔值 (CSV) 格式加载数据,如Gremlin 加载数据格式中所述。

    如果您使用 OpenCypher 来查询图表,海王星还可以按开放Cypher-specific CSV格式加载数据,如中所述。openCypher 数据的加载格式

    如果您使用 SPARQL,则 Neptune 可加载采用大量 RDF 格式的数据,如RDF 加载数据格式中所述。

  • Neptune 数据库实例要代入的 IAM 角色,此角色具有允许访问 S3 桶中的数据文件的 IAM policy。此策略必须授予读取和列出权限。

    有关创建对 Amazon S3 具有访问权限的角色,然后将其与 Neptune 集群关联的信息,请参阅先决条件:IAM 角色和 Amazon S3 访问权限。

    注意

    Neptune Load API 只需要对数据文件的读取访问权限。IAM policy 不需要允许对整个桶的写入访问权限或访问权限。

  • Amazon S3 VPC 端点。想要了解更多信息,请参阅创建 Amazon S3 VPC 端点部分。

创建 Amazon S3 VPC 端点

Neptune 加载程序需要 Amazon S3 的 VPC 端点。

设置 Amazon S3 访问权限
  1. 登录 AWS 管理控制台 并打开亚马逊 VPC 控制台,网址为https://console.aws.amazon.com/vpc/。

  2. 在左侧导航窗格中,选择端点。

  3. 选择创建端点。

  4. 选择 Service Name (服务名称) com.amazonaws.region.s3。

    注意

    如果此处的区域不正确,请确保控制台区域正确。

  5. 选择包含您的 Neptune 数据库实例的 VPC。

  6. 选中与子网 (与集群相关) 关联的路由表旁边的复选框。如果只有一个路由表,则必须选中该框。

  7. 选择创建端点。

有关创建端点的信息,请参阅《Amazon VPC 用户指南》中的 VPC 端点。有关 VPC 端点的限制的信息,请参阅 Amazon S3 的 VPC 端点。

将数据加载到 Neptune 数据库实例中
  1. 将数据文件复制到 Amazon S3 桶。S3 存储桶必须与加载数据的集群位于同一 AWS 区域。

    您可以使用以下 AWS CLI 命令将文件复制到存储桶。

    注意

    此命令不需要从 Amazon EC2 实例运行。

    aws s3 cp data-file-name s3://bucket-name/object-key-name
    注意

    在 Amazon S3 中,对象键名称是文件的整个路径,其中包含文件名。

    示例:在命令 aws s3 cp datafile.txt s3://examplebucket/mydirectory/datafile.txt 中,对象键名称为 mydirectory/datafile.txt。

    或者,您可以使用将文件上传 AWS 管理控制台 到 S3 存储桶。在处打开 Amazon S3 控制台 https://console.aws.amazon.com/s3/,然后选择一个存储桶。选择 “上传” 来上传文件。

  2. 从命令行窗口中,使用端点、Amazon S3 路径、格式和 IAM 角色 ARN 的正确值输入以下内容,以运行 Neptune 加载程序。

    format 参数可以是下列任意值:csv(对于 Gremlin),opencypher(对于 openCypher),或者 ntriples、nquads、turtle 和 rdfxml(对于 RDF)。有关其他参数的信息,请参阅Neptune 加载程序命令。

    有关查找 Neptune 数据库实例的主机名的信息,请参阅连接到 Amazon Neptune 端点部分。

    区域参数必须与集群和 S3 存储桶的区域匹配。

    亚马逊 Neptune 在以下 AWS 地区可用:

    • 美国东部(弗吉尼亚州北部):us-east-1

    • 美国东部(俄亥俄州):us-east-2

    • 美国西部(北加利福尼亚):us-west-1

    • 美国西部(俄勒冈州):us-west-2

    • 加拿大(中部):ca-central-1

    • 加拿大西部(卡尔加里):ca-west-1

    • 南美洲(圣保罗):sa-east-1

    • 欧洲地区(斯德哥尔摩):eu-north-1

    • 欧洲(西班牙):eu-south-2

    • 欧洲地区(爱尔兰):eu-west-1

    • 欧洲地区(伦敦):eu-west-2

    • 欧洲地区(巴黎):eu-west-3

    • 欧洲地区(法兰克福):eu-central-1

    • 中东(巴林):me-south-1

    • 中东(阿联酋):me-central-1

    • 以色列(特拉维夫):il-central-1

    • 非洲(开普敦):af-south-1

    • 亚太地区(香港):ap-east-1

    • 亚太地区(东京):ap-northeast-1

    • 亚太地区(首尔):ap-northeast-2

    • 亚太地区(大阪):ap-northeast-3

    • 亚太地区(新加坡):ap-southeast-1

    • 亚太地区(悉尼):ap-southeast-2

    • 亚太地区(雅加达):ap-southeast-3

    • 亚太地区(墨尔本):ap-southeast-4

    • 亚太地区(马来西亚):ap-southeast-5

    • 亚太地区(孟买):ap-south-1

    • 亚太地区(海得拉巴):ap-south-2

    • 中国(北京):cn-north-1

    • 中国(宁夏):cn-northwest-1

    • AWS GovCloud (US-West):   us-gov-west-1

    • AWS GovCloud (US-East):   us-gov-east-1

    AWS CLI
    aws neptunedata start-loader-job \ --endpoint-url https://your-neptune-endpoint:port \ --source "s3://bucket-name/object-key-name" \ --format "format" \ --iam-role-arn "arn:aws:iam::account-id:role/role-name" \ --s3-bucket-region "region" \ --no-fail-on-error \ --parallelism "MEDIUM" \ --no-update-single-cardinality-properties \ --queue-request \ --dependencies "load_A_id" "load_B_id"

    有关更多信息,请参阅《命令参考》中的 start-loader-job。 AWS CLI

    SDK
    import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.start_loader_job( source='s3://bucket-name/object-key-name', format='format', iamRoleArn='arn:aws:iam::account-id:role/role-name', s3BucketRegion='region', failOnError=False, parallelism='MEDIUM', updateSingleCardinalityProperties=False, queueRequest=True, dependencies=['load_A_id', 'load_B_id'] ) print(response)
    awscurl
    awscurl https://your-neptune-endpoint:port/loader \ --region us-east-1 \ --service neptune-db \ -X POST \ -H 'Content-Type: application/json' \ -d '{ "source" : "s3://bucket-name/object-key-name", "format" : "format", "iamRoleArn" : "arn:aws:iam::account-id:role/role-name", "region" : "region", "failOnError" : "FALSE", "parallelism" : "MEDIUM", "updateSingleCardinalityProperties" : "FALSE", "queueRequest" : "TRUE", "dependencies" : ["load_A_id", "load_B_id"] }'
    注意

    此示例假设您的 AWS 证书是在您的环境中配置的。替换us-east-1为 Neptune 集群的区域。

    curl
    curl -X POST https://your-neptune-endpoint:port/loader \ -H 'Content-Type: application/json' \ -d '{ "source" : "s3://bucket-name/object-key-name", "format" : "format", "iamRoleArn" : "arn:aws:iam::account-id:role/role-name", "region" : "region", "failOnError" : "FALSE", "parallelism" : "MEDIUM", "updateSingleCardinalityProperties" : "FALSE", "queueRequest" : "TRUE", "dependencies" : ["load_A_id", "load_B_id"] }'

    有关创建 IAM 角色并将其与 Neptune 集群关联的信息,请参阅先决条件:IAM 角色和 Amazon S3 访问权限。

    注意

    有关加载请求参数的详细信息,请参阅Neptune 加载程序请求参数)。简而言之:

    source 参数接受指向单个文件或文件夹的 Amazon S3 URI。如果指定文件夹,Neptune 将加载该文件夹中的每个数据文件。

    文件夹可包含多个顶点文件和多个边缘文件。

    URI 可以采用以下任意格式。

    • s3://bucket_name/object-key-name

    • https://s3.amazonaws.com/bucket_name/object-key-name

    • https://s3-us-east-1.amazonaws.com/bucket_name/object-key-name

    format 可以是下列项之一:

    • Gremlin 属性图的 Gremlin CSV 格式 (csv)

    • openCypher 属性图的 openCypher CSV 格式 (opencypher)

    • RDF 的 N -Triples (ntriples) 格式 / SPARQL

    • N-Quads (nquads) RDF/SPARQL 的格式

    • RDF/XML (rdfxml) RDF/SPARQL 的格式

    • RDF 的 Turtle (turtle) 格式 / SPARQL

    可选 parallelism 参数,您可用于限制批量加载进程中使用的线程数。它可以设置为 LOW、MEDIUM、HIGH 或 OVERSUBSCRIBE。

    将 updateSingleCardinalityProperties 设置为 "FALSE" 时,如果在为边缘或单基数顶点属性加载的源文件中提供了多个值,则加载程序将返回错误。

    如果已有加载作业正在运行,则将 queueRequest 设置为 "TRUE" 会将加载请求放入队列中。

    dependencies 参数使加载请求的执行取决于成功完成已放入队列中的一个或多个加载作业。

  3. Neptune 加载程序将返回允许检查状态或取消加载过程的任务 id,例如:

    { "status" : "200 OK", "payload" : { "loadId" : "ef478d76-d9da-4d94-8ff1-08d9d4863aa5" } }
  4. 在步骤 3 中输入以下命令以获取具有 loadId 的加载的状态:

    AWS CLI
    aws neptunedata get-loader-job-status \ --endpoint-url https://your-neptune-endpoint:port \ --load-id ef478d76-d9da-4d94-8ff1-08d9d4863aa5

    有关更多信息,请参阅《命令参考》中的 get-loader-job- status。 AWS CLI

    SDK
    import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.get_loader_job_status( loadId='ef478d76-d9da-4d94-8ff1-08d9d4863aa5' ) print(response)
    awscurl
    awscurl 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5' \ --region us-east-1 \ --service neptune-db
    注意

    此示例假设您的 AWS 证书是在您的环境中配置的。替换us-east-1为 Neptune 集群的区域。

    curl
    curl -G 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5'

    如果加载的状态列出错误,则可以请求更详细的状态和错误的列表。有关更多信息以及示例,请参阅 海王星加载器 API Get-Status。

  5. (可选) 取消 Load 任务。

    在步骤 3 中输入以下命令以通过任务 id Delete 加载程序任务:

    AWS CLI
    aws neptunedata cancel-loader-job \ --endpoint-url https://your-neptune-endpoint:port \ --load-id ef478d76-d9da-4d94-8ff1-08d9d4863aa5

    有关更多信息,请参阅《命令参考》中的 cancel-loader-job 。 AWS CLI

    SDK
    import boto3 from botocore.config import Config client = boto3.client( 'neptunedata', endpoint_url='https://your-neptune-endpoint:port', config=Config(read_timeout=None, retries={'total_max_attempts': 1}) ) response = client.cancel_loader_job( loadId='ef478d76-d9da-4d94-8ff1-08d9d4863aa5' ) print(response)
    awscurl
    awscurl 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5' \ --region us-east-1 \ --service neptune-db \ -X DELETE
    注意

    此示例假设您的 AWS 证书是在您的环境中配置的。替换us-east-1为 Neptune 集群的区域。

    curl
    curl -X DELETE 'https://your-neptune-endpoint:port/loader/ef478d76-d9da-4d94-8ff1-08d9d4863aa5'

    DELETE 命令将在成功取消后返回 HTTP 代码 200 OK。

    不会回滚已完成加载的加载任务中文件的数据。数据仍保留在 Neptune 数据库实例中。