SPARQL UPDATE LOAD를 사용하여 데이터를 Neptune으로 가져오기 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

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   –   (필수) 그래프에 로드할 데이터가 들어 있는 원격 데이터 파일을 지정합니다.

    원격 파일의 확장자는 다음 중 하나여야 합니다.

    • NTriples에 대해 .nt

    • NQuads에 대해 .nq

    • Trig에 대해 .trig

    • RDF/XML에 대해 .rdf

    • Turtle에 대해 .ttl

    • N3에 대해 .n3

    • JSON-LD에 대해 .jsonld

  • INTO GRAPH(데이터를 로드할 명명된 그래프)  –   (선택 사항) 데이터를 로드해야 하는 그래프를 지정합니다.

    Neptune은 트리플마다 이름이 있는 그래프를 연결합니다. 다음과 같이 폴백 명명된 그래프 URI(http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph)를 사용하여 기본 명명된 그래프를 지정할 수 있습니다.

    INTO GRAPH <http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph>
참고

많은 데이터를 로드해야 하는 경우 UPDATE LOAD 대신 Neptune 대량 로더를 사용하는 것이 좋습니다. 대량 로더에 대한 자세한 내용은 Amazon Neptune 대량 로더를 사용하여 데이터 수집 섹션을 참조하세요.

SPARQL UPDATE LOAD를 사용하여 Amazon S3에서 직접 데이터를 로드하거나 자체 호스팅한 웹 서버에서 가져온 파일에서 데이터를 로드할 수 있습니다. 로드할 리소스는 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를 사용할 때 Amazon S3에 IAM 역할을 전달할 수 없으므로, 문제의 Amazon S3 버킷을 공개하거나 LOAD 쿼리에서 미리 서명된 Amazon S3 URL을 사용해야 합니다.

Amazon S3 파일의 사전 서명된 URL을 생성하려면 다음과 같은 AWS CLI 명령을 사용할 수 있습니다.

aws s3 presign --expires-in (number of seconds) s3://(bucket name)/(path to file of data to load)

그러면 생성된 사전 서명된 URL을 LOAD 명령에 사용할 수 있습니다.

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. -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
  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을 사용하여 액세스하는 버킷에 대해서만 작동합니다.

아래와 같이 프라이빗 Amazon S3 버킷에서 로드하도록 웹 프록시 서버를 설정할 수도 있습니다.

웹 서버에서 SPARQL UPDATE LOAD를 사용하여 파일을 Neptune에 로드
  1. Neptune 및 로드할 파일을 호스팅하는 VPC 내에서 실행하는 시스템에 웹 서버를 설치합니다. 예를 들어 Amazon Linux를 사용하는 경우 다음과 같이 Apache를 설치할 수 있습니다.

    sudo yum install httpd mod_ssl sudo /usr/sbin/apachectl start
  2. 로드할 RDF 파일 콘텐츠의 MIME 유형을 정의합니다. SPARQL은 웹 서버에서 보낸 Content-type 헤더를 사용하여 콘텐츠의 입력 형식을 결정하므로 웹 서버에 적합한 MIME 유형을 정의해야 합니다.

    예를 들어 다음 파일 확장명을 사용하여 파일 형식을 식별한다고 가정하겠습니다.

    • NTriples에 대해 .nt

    • NQuads에 대해 .nq

    • Trig에 대해 .trig

    • RDF/XML에 대해 .rdf

    • Turtle에 대해 .ttl

    • N3에 대해 .n3

    • JSON-LD에 대해 .jsonld

    Apache 2를 웹 서버로 사용하는 경우 /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 유형의 매핑이 작동하는지 확인합니다. 웹 서버가 작동하고 실행 중이며 RDF 파일을 선택한 형식으로 호스팅하면 로컬 호스트에서 웹 서버로 요청을 보내 구성을 테스트할 수 있습니다.

    예를 들어 다음과 같이 요청을 보낼 수 있습니다.

    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>"
참고

SPARQL UPDATE LOAD를 사용하면 로드 중인 소스 파일이 클 때 웹 서버에서 시간 초과를 트리거할 수 있습니다. Neptune은 스트리밍되는 파일 데이터를 처리하고 서버에 구성된 제한 시간보다 오래 걸릴 수 있는 큰 파일을 처리합니다. 이로 인해 서버가 연결을 종료하여 Neptune의 스트림에서 예기치 않은 EOF가 발생하면 다음과 같은 오류 메시지가 나타날 수 있습니다.

{ "detailedMessage":"Invalid syntax in the specified file", "code":"InvalidParameterException" }

이 메시지가 나타나는데 소스 파일에 잘못된 구문이 포함되어 있지 않은 경우 웹 서버의 시간 초과 설정을 늘려 보십시오. 서버에서 디버그 로그를 활성화하고 시간 초과를 찾아 문제를 진단할 수도 있습니다.