

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Exportación nativa de datos RDF
<a name="neptune-native-export"></a>

La API de exportación de Neptune le permite exportar datos de su base de datos de Neptune a Amazon S3. Puede exportar los datos RDF en N-Triples formato o. N-Quads 

## Cómo funciona la exportación nativa
<a name="neptune-native-export-how-it-works"></a>

La exportación nativa se ejecuta en la instancia de escritura de su clúster de Neptune y escribe los datos exportados en Amazon S3 mediante cargas multiparte. Dado que la exportación utiliza los recursos informáticos de la instancia de escritura, recomendamos encarecidamente ejecutar las exportaciones en un clúster clonado para evitar que afecten a las cargas de trabajo de producción. Consulta [ las recomendaciones ](#neptune-native-export-recommendations) para obtener más información.

### Rendimiento de exportación
<a name="neptune-native-export-throughput"></a>

El rendimiento de exportación se escala de forma aproximadamente lineal con un tamaño de instancia de hasta`r7i.16xlarge`. Como estimación de planificación conservadora, espere aproximadamente ** 50 000 declaraciones por segundo por CPU virtual**.

Utilice esta fórmula para estimar la duración de la exportación:

```
export_seconds = total_statements / (vCPUs × 50,000)
```

El rendimiento real depende de las características del conjunto de datos, incluida la cardinalidad de los predicados, la complejidad de las declaraciones y el tamaño del clúster.

## Requisitos previos
<a name="neptune-native-export-prerequisites"></a>

Antes de usar la API de exportación, debes:
+ Disponer de un clúster de bases de datos de Neptune que ejecute la versión 1.4.6.0 o posterior (la versión 1.4.8.0 o posterior es compatible) `exportFilter`
+ [Cree un rol de IAM con permisos para acceder a su bucket de S3 ](#neptune-native-export-iam-s3)
+ [Asocie la función de IAM a su clúster de Neptune ](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-IAM-add-role-cluster.html)
+ [Configure un punto final de VPC de S3 en la VPC de su clúster de Neptune ](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-vpc.html)

## Recomendaciones
<a name="neptune-native-export-recommendations"></a>

[Recomendamos encarecidamente ejecutar la operación de exportación en un clúster clonado sin read/write cargas de trabajo para evitar que esto afecte al rendimiento de la producción. ](https://docs.aws.amazon.com/neptune/latest/userguide/manage-console-cloning.html)

Para obtener una relación precio-rendimiento óptima, recomendamos utilizar ** instancias de ** 16 veces más grandes para las operaciones de exportación. Este tipo de instancia proporciona:
+ Memoria suficiente para gestionar grandes conjuntos de datos sin reducir el rendimiento
+ Recursos de CPU óptimos para el procesamiento simultáneo de exportaciones
+ La mejor rentabilidad para las cargas de trabajo de exportación

## Permisos de IAM
<a name="neptune-native-export-iam"></a>

La función de exportación implica dos funciones de IAM independientes:
+ **Función de IAM de la persona que llama**: la persona principal de IAM (usuario o función) que envía las solicitudes al punto final de la API de exportación. Este rol necesita los permisos de acceso a los datos de Neptune.
+ **Función de IAM de acceso a S3**: función que Neptune asume para escribir los datos exportados a Amazon S3. El ARN de este rol se transfiere al `iamRoleArn` parámetro de la solicitud de exportación y debe estar asociado a su clúster de Neptune.

### Permisos de llamadas (acciones de acceso a los datos de Neptune)
<a name="neptune-native-export-iam-data-access"></a>

El director de IAM que llama a la API de exportación debe incluir las siguientes acciones de acceso a los datos de Neptune en su política de IAM:

```
{
  "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}}/*"
    }
  ]
}
```

Para obtener más información, consulte [ Uso de las declaraciones de política de acceso a los datos de IAM. ](iam-dp-actions.md)

### Permisos de rol de acceso a S3
<a name="neptune-native-export-iam-s3"></a>

La función de IAM transferida en el parámetro de `iamRoleArn` solicitud debe estar asociada a su clúster de Neptune y debe conceder a Neptune permiso para escribir en el bucket de S3 de destino. Para ver los pasos para crear un rol de IAM y asociarlo a su clúster, consulte [ Crear un rol de IAM para permitir que Neptune acceda a Amazon S3. ](https://docs.aws.amazon.com/neptune/latest/userguide/bulk-load-tutorial-IAM-CreateRole.html)

**nota**  
La API de exportación requiere * permisos de * escritura en S3, a diferencia del cargador masivo, que solo requiere acceso de lectura. Utilice la siguiente política de permisos en lugar de la política `AmazonS3ReadOnlyAccess` administrada que se describe en esa página.

Adjunte la siguiente política de permisos a la función de acceso de 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/*"
      ]
    }
  ]
}
```

### Permisos de KMS opcionales
<a name="neptune-native-export-iam-kms"></a>

Si especificas un `kmsKeyIdentifier` en la solicitud de exportación, agrega los siguientes permisos al rol de acceso a 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}}"
    }
  ]
}
```

## Punto final de exportación
<a name="neptune-native-export-endpoint"></a>

Para exportar datos, debe enviar solicitudes HTTP al `https://your-neptune-endpoint:port/export` punto final.

## Sintaxis de la solicitud de exportación
<a name="neptune-native-export-request"></a>

```
POST https://your-neptune-endpoint:port/export
```

### Encabezados de solicitudes
<a name="neptune-native-export-request-headers"></a>
+ `Content-Type: application/json`

### Cuerpo de la solicitud
<a name="neptune-native-export-request-body"></a>

```
{
  "destination": "string",
  "format": "string",
  "iamRoleArn": "string",
  "region": "string",
  "compression": "string",
  "kmsKeyIdentifier": "string",
  "exportFilter": {
    "namedGraphUris": ["string"]
  }
}
```

### Parámetros de solicitud
<a name="neptune-native-export-request-params"></a>

**destino ** (cadena)  
Obligatorio. El URI de S3 donde se almacenarán los datos exportados. Tiene que tener el formato `s3://bucket-name/optional-prefix/`.

**formato ** (cadena)  
Obligatorio. El formato de los datos exportados. Valores válidos:  
+ `ntriples`— Exportar datos en N-Triples formato
+ `nquads`— Exportar datos en N-Quads formato

**iam RoleArn ** (cadena)  
Obligatorio. El nombre de recurso de Amazon (ARN) de la función de IAM que Neptune asume para acceder al bucket de S3.

**región ** (cadena)  
Obligatorio. El Región de AWS del bucket S3. Debe estar en la misma región que el cúmulo de Neptuno.

**compresión ** (cadena)  
Opcional. Formato de compresión para los archivos exportados. Valores válidos:  
+ `gz`- Comprime archivos en formato.gz

**kms KeyIdentifier ** (cadena)  
Opcional. El ARN de la AWS KMS clave que se utilizará para cifrar los datos exportados.

**Filtro de exportación ** (objeto)  
Opcional. Filtros para exportar selectivamente un subconjunto de datos RDF. Disponible en la versión 1.4.8.0 del motor y posteriores.    
**nombrado GraphUris ** (matriz de cadenas)  
URI de gráficos con nombre para exportar (máximo 100). Solo se exportan los datos de los gráficos especificados. Si un gráfico especificado está vacío, la exportación se realiza correctamente con un resultado vacío. Los URI no válidos fallan con. `InvalidParameterException`

### Sintaxis de la respuesta
<a name="neptune-native-export-response"></a>

```
{
  "status": "string",
  "payload": {
    "exportId": "string"
  }
}
```

**estado ** (cadena)  
El estado HTTP de la solicitud.

**ID de exportación (cadena) **  
Un identificador único para la tarea de exportación.

## Punto final de estado de exportación
<a name="neptune-native-export-status"></a>

Para comprobar el estado de una tarea de exportación, debe enviar una solicitud HTTP GET al punto final de exportación con el ID de exportación.

```
GET https://your-neptune-endpoint:port/export?exportId=export-id
```

### Parámetros de solicitud
<a name="neptune-native-export-status-params"></a>

**ID de exportación (cadena) **  
Obligatorio. El identificador único de la tarea de exportación.

### Sintaxis de la respuesta
<a name="neptune-native-export-status-response"></a>

```
{
  "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 de exportación (cadena) **  
El identificador único de la tarea de exportación.

**destino ** (cadena)  
El URI de S3 al que se exportan los datos.

**estado ** (cadena)  
El estado actual de la tarea de exportación. Valores válidos:  
+ `EXPORT_NOT_STARTED`— La exportación se ha puesto en cola pero no se ha iniciado
+ `EXPORT_IN_PROGRESS`— La exportación se está ejecutando actualmente
+ `EXPORT_COMPLETED`— La exportación se completó correctamente
+ `EXPORT_CANCELLING`— Se está cancelando la exportación
+ `EXPORT_CANCELLED_BY_USER`— El usuario canceló la exportación
+ `EXPORT_S3_ERROR`— La exportación falló debido a un error de acceso a S3
+ `EXPORT_FAILED`— Falló la exportación debido a otro error

**StatusReason ** (cadena)  
Información adicional sobre el estado de la exportación.

**formato ** (cadena)  
El formato de los datos exportados.

**iam RoleArn ** (cadena)  
El ARN del rol de IAM utilizado para el acceso a S3.

**kms KeyIdentifier ** (cadena)  
El ARN de la clave de KMS utilizada para el cifrado, si se especifica.

**Filtro de exportación ** (objeto)  
El filtro de exportación que se aplicó, si se especificó uno en la solicitud.  
+ **denominado GraphUris ** (matriz de cadenas): los URI del gráfico con nombre asignado se utilizan para filtrar la exportación.

**exportar TaskDetails ** (objeto)  
Detalles sobre el progreso de la tarea de exportación:  
+ **tiempo ElapsedSeconds ** (número): tiempo transcurrido desde que se inició la exportación
+ **StartTime ** (número): época en la que se inició la exportación
+ **num RecordsWritten ** (número): número de registros escritos en S3
+ **ProgresPercentage ** (número): porcentaje de exportación completada

## Punto final de exportación de la lista
<a name="neptune-native-export-list"></a>

Para enumerar todas las tareas de exportación, envía una solicitud HTTP GET al punto final de exportación.

```
GET https://your-neptune-endpoint:port/export
```

### Sintaxis de la respuesta
<a name="neptune-native-export-list-response"></a>

```
{
  "status": "string",
  "payload": [
    "string"
  ]
}
```

**carga útil ** (matriz)  
Un conjunto de identificadores de exportación para todas las tareas de exportación.

## Cancela el punto final de exportación
<a name="neptune-native-export-cancel"></a>

Para cancelar una tarea de exportación, envía una solicitud HTTP DELETE al punto final de exportación con el ID de exportación.

```
DELETE https://your-neptune-endpoint:port/export?exportId=export-id
```

### Parámetros de solicitud
<a name="neptune-native-export-cancel-params"></a>

**ID de exportación (cadena) **  
Obligatorio. El identificador único de la tarea de exportación que se va a cancelar.

### Sintaxis de la respuesta
<a name="neptune-native-export-cancel-response"></a>

```
{
  "status": "string",
  "payload": {
    "message": "string"
  }
}
```

## Formato de salida de exportación
<a name="neptune-native-export-output"></a>

### Estructura de directorios de S3
<a name="neptune-native-export-output-structure"></a>

Los datos exportados se organizan en su bucket de S3 de la siguiente manera:

```
s3://your-bucket/export-id/
├── data/
│   ├── part-00000.nt
│   ├── part-00001.nt
│   └── ...
└── export_status.json
```

**datos/ directorio **  
Contiene los archivos de datos gráficos exportados en el formato especificado.

**Archivo export\_status.json **  
Contiene metadatos sobre la operación de exportación.

## Respuestas de error
<a name="neptune-native-export-errors"></a>

### Códigos de error comunes
<a name="neptune-native-export-errors-codes"></a>

**BadRequestException**  
La solicitud contiene parámetros no válidos o ya hay una exportación en curso.

**AccessDeniedException**  
La función de IAM carece de los permisos necesarios para acceder a S3 o KMS.

### Ejemplo de respuesta de error
<a name="neptune-native-export-errors-example"></a>

```
{
  "code": "BadRequestException",
  "requestId": "request-id", 
  "message": "Export already in progress with ID 'existing-id'. Please wait or cancel it first.",
  "detailedMessage": "Detailed error description"
}
```

## Ejemplos
<a name="neptune-native-export-examples"></a>

### Iniciar una exportación
<a name="neptune-native-export-examples-start"></a>

```
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"
  }'
```

### Iniciar una exportación filtrada (gráficos con nombre)
<a name="neptune-native-export-examples-filtered"></a>

```
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"
      ]
    }
  }'
```

### Compruebe el estado de la exportación
<a name="neptune-native-export-examples-status"></a>

```
curl -X GET "https://your-cluster-endpoint:8182/export?exportId=<id>"
```

### Cancelar una exportación
<a name="neptune-native-export-examples-cancel"></a>

```
curl -X DELETE "https://your-cluster-endpoint:8182/export?exportId=<id>"
```

## Limitaciones
<a name="neptune-native-export-limitations"></a>

La exportación nativa tiene las siguientes limitaciones:
+ **Compatibilidad con instancias**: la exportación nativa no se admite en las instancias sin servidor de Neptune ni en las réplicas de lectura. La exportación siempre se ejecuta en la instancia de escritura de un clúster aprovisionado.
+ **Una exportación por clúster**: solo puede haber una exportación activa en un clúster a la vez. Si envías una nueva solicitud de exportación mientras hay otra exportación en curso, la solicitud fallará.
+ **Sin reanudación automática**: si el motor se reinicia durante una exportación, se produce un error en la exportación y se debe reiniciar desde el principio. El progreso de la exportación no se conserva cuando se reinicia el motor.
+ **Disponibilidad del estado después de los eventos del motor**: si el motor falla, no puedes recuperar el estado de la exportación a través de la API de estado.
+ **Coherencia durante las escrituras**: si tu clúster gestiona el tráfico de escritura durante una exportación, los datos exportados pueden reflejar una vista parcial o incoherente del gráfico. Para garantizar una exportación coherente, ejecuta la exportación en un clúster clonado.