diff --git a/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/AdjacentListYaml.java b/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/AdjacentListYaml.java index cb6ee2a89..63e4f2e1e 100644 --- a/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/AdjacentListYaml.java +++ b/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/AdjacentListYaml.java @@ -44,10 +44,14 @@ public AdjacentListYaml(org.apache.graphar.info.AdjacentList adjacentList) { } public AdjacentList toAdjacentList() { + String adjPrefix = prefix; + if (adjPrefix == null || adjPrefix.isEmpty()) { + adjPrefix = AdjListType.fromOrderedAndAlignedBy(ordered, aligned_by) + "/"; + } return new AdjacentList( AdjListType.fromOrderedAndAlignedBy(ordered, aligned_by), FileType.fromString(file_type), - prefix); + adjPrefix); } public boolean isOrdered() { diff --git a/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/PropertyGroupYaml.java b/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/PropertyGroupYaml.java index 723932189..e9ee846d5 100644 --- a/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/PropertyGroupYaml.java +++ b/maven-projects/info/src/main/java/org/apache/graphar/info/yaml/PropertyGroupYaml.java @@ -46,10 +46,22 @@ public PropertyGroupYaml(PropertyGroup propertyGroup) { } public PropertyGroup toPropertyGroup() { + String pgPrefix = prefix; + if (pgPrefix == null || pgPrefix.isEmpty()) { + StringBuilder prefixBuilder = new StringBuilder(); + for (int i = 0; i < properties.size(); i++) { + if (i > 0) { + prefixBuilder.append("_"); + } + prefixBuilder.append(properties.get(i).getName()); + } + prefixBuilder.append("/"); + pgPrefix = prefixBuilder.toString(); + } return new PropertyGroup( properties.stream().map(PropertyYaml::toProperty).collect(Collectors.toList()), FileType.fromString(file_type), - prefix); + pgPrefix); } public List getProperties() { diff --git a/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoLoaderTest.java b/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoLoaderTest.java index 3e4633b23..94187c42e 100644 --- a/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoLoaderTest.java +++ b/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoLoaderTest.java @@ -42,7 +42,7 @@ public static void clean() {} @Test public void testStringLoader() throws IOException { - final URI GRAPH_PATH_URI = TestUtil.getLdbcSampleGraphURI(); + final URI GRAPH_PATH_URI = TestUtil.getCSVLdbcSampleGraphURI(); GraphInfoLoader loader = new LocalFileSystemStringGraphInfoLoader(); final GraphInfo graphInfo = loader.loadGraphInfo(GRAPH_PATH_URI); testGraphInfo(graphInfo); @@ -50,7 +50,7 @@ public void testStringLoader() throws IOException { @Test public void testStreamLoader() throws IOException { - final URI GRAPH_PATH_URI = TestUtil.getLdbcSampleGraphURI(); + final URI GRAPH_PATH_URI = TestUtil.getCSVLdbcSampleGraphURI(); GraphInfoLoader loader = new LocalFileSystemStreamGraphInfoLoader(); final GraphInfo graphInfo = loader.loadGraphInfo(GRAPH_PATH_URI); testGraphInfo(graphInfo); @@ -58,7 +58,7 @@ public void testStreamLoader() throws IOException { @Test public void testReaderLoader() throws IOException { - final URI GRAPH_PATH_URI = TestUtil.getLdbcSampleGraphURI(); + final URI GRAPH_PATH_URI = TestUtil.getCSVLdbcSampleGraphURI(); GraphInfoLoader loader = new LocalFileSystemReaderGraphInfoLoader(); final GraphInfo graphInfo = loader.loadGraphInfo(GRAPH_PATH_URI); testGraphInfo(graphInfo); diff --git a/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java b/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java index 607e98059..fc931b60d 100644 --- a/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java +++ b/maven-projects/info/src/test/java/org/apache/graphar/info/GraphInfoTest.java @@ -42,6 +42,7 @@ public class GraphInfoTest { private static VertexInfo personVertexInfo; private static EdgeInfo knowsEdgeInfo; private static URI GRAPH_PATH_URI; + private static URI PARUQET_GRAPH_PATH_URI; // test not exist property group private static final PropertyGroup notExistPg = new PropertyGroup( @@ -54,7 +55,8 @@ public static void setUp() { TestUtil.checkTestData(); // Always use real test data - fail if not available - GRAPH_PATH_URI = TestUtil.getLdbcSampleGraphURI(); + GRAPH_PATH_URI = TestUtil.getCSVLdbcSampleGraphURI(); + PARUQET_GRAPH_PATH_URI = TestUtil.getParquetLdbcSampleGraphURI(); GraphInfoLoader loader = new LocalFileSystemStreamGraphInfoLoader(); try { graphInfo = loader.loadGraphInfo(GRAPH_PATH_URI); @@ -510,4 +512,41 @@ public void testIsValidated() { graphInfo.getVersion().toString()); Assert.assertFalse(invalidEdgeGraphInfo.isValidated()); } + + @Test + public void testParquetGraphInfo() { + GraphInfoLoader loader = new LocalFileSystemStreamGraphInfoLoader(); + GraphInfo graphInfo; + try { + graphInfo = loader.loadGraphInfo(PARUQET_GRAPH_PATH_URI); + } catch (IOException e) { + throw new RuntimeException( + "Failed to load real test data from " + + PARUQET_GRAPH_PATH_URI + + ": " + + e.getMessage(), + e); + } + VertexInfo personVertexInfo = graphInfo.getVertexInfos().get(0); + EdgeInfo knowsEdgeInfo = graphInfo.getEdgeInfos().get(0); + // test vertex property + PropertyGroup firstName_lastName_gender = personVertexInfo.getPropertyGroups().get(1); + Assert.assertEquals("firstName_lastName_gender/", firstName_lastName_gender.getPrefix()); + Assert.assertEquals(FileType.PARQUET, firstName_lastName_gender.getFileType()); + Assert.assertEquals( + URI.create("vertex/person/vertex_count"), personVertexInfo.getVerticesNumFileUri()); + // test edge property + PropertyGroup creationDate = knowsEdgeInfo.getPropertyGroups().get(0); + Assert.assertEquals("creationDate/", creationDate.getPrefix()); + Assert.assertEquals(FileType.PARQUET, creationDate.getFileType()); + // test adjlist + AdjacentList adjOrderBySource = + knowsEdgeInfo.getAdjacentList(AdjListType.ordered_by_source); + Assert.assertEquals(FileType.PARQUET, adjOrderBySource.getFileType()); + Assert.assertEquals(AdjListType.ordered_by_source, adjOrderBySource.getType()); + Assert.assertEquals("ordered_by_source/", adjOrderBySource.getPrefix()); + Assert.assertEquals( + URI.create("edge/person_knows_person/ordered_by_source/adj_list/offset/"), + knowsEdgeInfo.getOffsetUri(AdjListType.ordered_by_source)); + } } diff --git a/maven-projects/info/src/test/java/org/apache/graphar/info/PropertyTest.java b/maven-projects/info/src/test/java/org/apache/graphar/info/PropertyTest.java index 78fa86d98..27f28bab4 100644 --- a/maven-projects/info/src/test/java/org/apache/graphar/info/PropertyTest.java +++ b/maven-projects/info/src/test/java/org/apache/graphar/info/PropertyTest.java @@ -19,6 +19,9 @@ package org.apache.graphar.info; +import java.io.IOException; +import java.net.URI; +import org.apache.graphar.info.loader.impl.LocalFileSystemStringGraphInfoLoader; import org.apache.graphar.info.type.DataType; import org.junit.Assert; import org.junit.Before; @@ -35,6 +38,7 @@ public void setUp() { idProperty = TestDataFactory.createIdProperty(); nameProperty = TestDataFactory.createProperty("name", DataType.STRING, false, true); optionalProperty = TestDataFactory.createProperty("optional", DataType.STRING, false, true); + TestUtil.checkTestData(); } @Test @@ -171,4 +175,19 @@ public void testPropertyImmutability() { TestVerificationUtils.verifyProperty(prop, "test", true, false); Assert.assertEquals(DataType.INT32, prop.getDataType()); } + + @Test + public void testLoadPropertyDateTypes() throws IOException { + String testDataRoot = TestUtil.getTestData(); + String timestampEdge = + testDataRoot + "/ldbc_sample/parquet/person_knows-timestamp_person.edge.yml"; + LocalFileSystemStringGraphInfoLoader localFileSystemStringGraphInfoLoader = + new LocalFileSystemStringGraphInfoLoader(); + EdgeInfo edgeInfo = + localFileSystemStringGraphInfoLoader.loadEdgeInfo(URI.create(timestampEdge)); + Assert.assertTrue(edgeInfo.dump().contains("data_type: timestamp")); + String dateEdge = testDataRoot + "/ldbc_sample/parquet/person_knows-date_person.edge.yml"; + edgeInfo = localFileSystemStringGraphInfoLoader.loadEdgeInfo(URI.create(dateEdge)); + Assert.assertTrue(edgeInfo.dump().contains("data_type: date")); + } } diff --git a/maven-projects/info/src/test/java/org/apache/graphar/info/TestUtil.java b/maven-projects/info/src/test/java/org/apache/graphar/info/TestUtil.java index 0b7033437..8a1aec6e6 100644 --- a/maven-projects/info/src/test/java/org/apache/graphar/info/TestUtil.java +++ b/maven-projects/info/src/test/java/org/apache/graphar/info/TestUtil.java @@ -37,7 +37,10 @@ public class TestUtil { static final String SAVE_DIR = System.getProperty("test.output.dir", "target/test-output") + "/"; - private static final String LDBC_SAMPLE_GRAPH_PATH = "/ldbc_sample/csv/ldbc_sample.graph.yml"; + private static final String CSV_LDBC_SAMPLE_GRAPH_PATH = + "/ldbc_sample/csv/ldbc_sample.graph.yml"; + private static final String PARQUET_LDBC_SAMPLE_GRAPH_PATH = + "/ldbc_sample/parquet/ldbc_sample.graph.yml"; private static final String LDBC_GRAPH_PATH = "/ldbc/parquet/ldbc.graph.yml"; public static String getTestData() { @@ -49,12 +52,20 @@ public static boolean hasTestData() { return GAR_TEST_DATA != null && new java.io.File(GAR_TEST_DATA).exists(); } - public static String getLdbcSampleGraphPath() { - return getTestData() + "/" + LDBC_SAMPLE_GRAPH_PATH; + public static String getCSVLdbcSampleGraphPath() { + return getTestData() + "/" + CSV_LDBC_SAMPLE_GRAPH_PATH; } - public static URI getLdbcSampleGraphURI() { - return URI.create(getLdbcSampleGraphPath()); + public static URI getCSVLdbcSampleGraphURI() { + return URI.create(getCSVLdbcSampleGraphPath()); + } + + public static String getParquetLdbcSampleGraphPath() { + return getTestData() + "/" + PARQUET_LDBC_SAMPLE_GRAPH_PATH; + } + + public static URI getParquetLdbcSampleGraphURI() { + return URI.create(getParquetLdbcSampleGraphPath()); } public static String getLdbcGraphPath() { @@ -127,7 +138,7 @@ public static GraphInfo getLdbcSampleDataSet() { try { GraphInfoLoader loader = new org.apache.graphar.info.loader.impl.LocalFileSystemStreamGraphInfoLoader(); - return loader.loadGraphInfo(getLdbcSampleGraphURI()); + return loader.loadGraphInfo(getCSVLdbcSampleGraphURI()); } catch (Exception e) { throw new RuntimeException( "Failed to load real LDBC sample data: " + e.getMessage(), e);