콘텐츠로 이동
Graph 문서0.5

bluetape4k-graph-io-csv

최신 안정판 Graph 0.5.1 릴리스 기준

실행 방식: release test fixture 연계형이다. sourceOpstargetOpsCsvRoundTripTest가 따로 만든 operations다. 이 테스트가 정점·간선 임시 path를 만들고 두 그래프를 모두 닫는다.

CSV는 정점 파일과 간선 파일을 한 쌍으로 다룬다. 표 형태 교환, 사람이 직접 확인하는 자료, 고정 column schema에 알맞다. 한 파일로 원자적으로 전달해야 하거나 중첩 property를 그대로 보존해야 하면 다른 형식을 고른다. 구현은 CsvGraphBulkImporter.kt다.

dependencies {
implementation(platform("io.github.bluetape4k:bluetape4k-dependencies:<ecosystem-version>"))
implementation("io.github.bluetape4k:bluetape4k-graph-io-csv")
}
val sink = CsvGraphExportSink(
GraphExportSink.PathSink(Path.of("vertices.csv")),
GraphExportSink.PathSink(Path.of("edges.csv")),
)
val out = CsvGraphBulkExporter().use {
it.exportGraph(sink, sourceOps, GraphExportOptions(setOf("Person"), setOf("KNOWS")))
}
val source = CsvGraphImportSource(
GraphImportSource.PathSource(Path.of("vertices.csv")),
GraphImportSource.PathSource(Path.of("edges.csv")),
)
val input = CsvGraphBulkImporter().use {
it.importGraph(source, targetOps, GraphImportOptions())
}
check(out.verticesWritten == input.verticesCreated)
check(out.edgesWritten == input.edgesCreated)

예상 결과는 두 파일을 함께 읽어 같은 정점·간선 수를 만드는 것이다.

정점 행의 외부 ID를 간선 행이 참조한다. 두 파일은 함께 공개하고 보관해야 한다. column 이름, delimiter, charset, quoting, property mode는 CsvGraphIoOptions.kt의 계약이다. path 파일은 library가 열고 닫는다. 정점 import 뒤 간선 파일이 실패하면 정점은 남을 수 있다.

  • report 수와 실제 그래프 수를 비교한다.
  • 파일 형식, batch 크기, 정책, 실패 단계를 기록한다.
  • 입력 크기와 buffer 상한을 둔다.
  • 문서에 정한 경계에서 library 소유 path와 호출자 소유 stream을 닫는다.

증상: 정점은 들어갔지만 간선이 실패한다. 두 파일을 함께 보존하고 처음 누락된 끝점이나 잘못된 행을 찾은 뒤, 일부 기록된 대상을 비우고 파일 쌍을 고쳐 다시 실행한다.

Terminal window
./gradlew :bluetape4k-graph-io-csv:test --tests '*CsvRoundTripTest' --tests '*CsvEdgeCaseTest' --tests '*CsvImportErrorTest'

예상 결과는 왕복 검증이 통과하고 잘못된 header·quoting·끝점이 설정한 정책대로 처리되는 것이다. 두 파일 누락, 중복 ID, charset, delimiter 충돌, report phase를 순서대로 확인한다. 한 파일만 암호화하지 않는다.

고정된 CsvRoundTripTest가 모든 fixture 변수를 정의한 완전한 실행 예제다. 다음 명령으로 확인한다.

Terminal window
./gradlew :bluetape4k-graph-io-csv:test --tests '*CsvRoundTripTest'

예상 결과는 왕복 또는 실패 경로 검증이 통과하고 fixture 소유 자원이 모두 닫히는 것이다.

파일 형식과 외부 ID, 실행 방식, OkIO 보안을 참고한다. CSV는 두 파일 공개를 원자적으로 만들거나 임의의 중첩 값을 자동 보존하지 않는다.