From 403206f5c7e48792b2b70759c92f8198925f55d3 Mon Sep 17 00:00:00 2001 From: gsvic Date: Thu, 16 Jul 2020 16:15:47 +0300 Subject: [PATCH] Update examples --- .../java/api/DenseReadOrderedSubarray.java | 12 ++-- .../tiledb/java/api/DenseWriteUnordered.java | 10 +-- .../io/tiledb/java/api/SparseCreate.java | 10 +-- .../io/tiledb/java/api/SparseReadGlobal.java | 19 +++--- .../java/api/SparseReadOrderedSubarray.java | 19 +++--- .../tiledb/java/api/SparseWriteGlobal1.java | 24 +++---- .../tiledb/java/api/SparseWriteGlobal2.java | 21 ++++--- .../java/api/SparseWriteUnordered1.java | 23 +++---- .../java/api/SparseWriteUnordered1Again.java | 19 +++--- .../java/api/SparseWriteUnordered2.java | 33 +++++----- src/main/java/io/tiledb/java/api/Array.java | 16 +++-- src/main/java/io/tiledb/java/api/Query.java | 62 ++++++++++++++++++- .../java/io/tiledb/java/api/AsyncTest.java | 7 +-- .../tiledb/java/api/QuickstartSparseTest.java | 7 +-- .../tiledb/java/api/WriteBigSparseArray.java | 13 ++-- 15 files changed, 183 insertions(+), 112 deletions(-) diff --git a/src/main/java/examples/io/tiledb/java/api/DenseReadOrderedSubarray.java b/src/main/java/examples/io/tiledb/java/api/DenseReadOrderedSubarray.java index f55442f9..f136f74c 100644 --- a/src/main/java/examples/io/tiledb/java/api/DenseReadOrderedSubarray.java +++ b/src/main/java/examples/io/tiledb/java/api/DenseReadOrderedSubarray.java @@ -39,20 +39,18 @@ public static void main(String[] args) throws Exception { // Compute maximum buffer elements for the query results per attribute Array my_dense_array = new Array(ctx, "my_dense_array"); NativeArray subarray = new NativeArray(ctx, new long[] {3l, 4l, 2l, 4l}, Long.class); - HashMap> max_sizes = my_dense_array.maxBufferElements(subarray); // Create query Query query = new Query(my_dense_array, TILEDB_READ); query.setLayout(TILEDB_ROW_MAJOR); query.setSubarray(subarray); - query.setBuffer( - "a1", new NativeArray(ctx, max_sizes.get("a1").getSecond().intValue(), Integer.class)); + int bufferSize = 1024; + query.setBuffer("a1", new NativeArray(ctx, bufferSize, Integer.class)); query.setBuffer( "a2", - new NativeArray(ctx, max_sizes.get("a2").getFirst().intValue(), Long.class), - new NativeArray(ctx, max_sizes.get("a2").getSecond().intValue(), String.class)); - query.setBuffer( - "a3", new NativeArray(ctx, max_sizes.get("a3").getSecond().intValue(), Float.class)); + new NativeArray(ctx, bufferSize, Datatype.TILEDB_UINT64), + new NativeArray(ctx, bufferSize, String.class)); + query.setBuffer("a3", new NativeArray(ctx, bufferSize, Float.class)); // Submit query System.out.println("Query submitted: " + query.submit()); diff --git a/src/main/java/examples/io/tiledb/java/api/DenseWriteUnordered.java b/src/main/java/examples/io/tiledb/java/api/DenseWriteUnordered.java index a74417e4..1dba52ff 100644 --- a/src/main/java/examples/io/tiledb/java/api/DenseWriteUnordered.java +++ b/src/main/java/examples/io/tiledb/java/api/DenseWriteUnordered.java @@ -37,24 +37,26 @@ public static void main(String[] args) throws Exception { // Prepare cell buffers NativeArray a1_data = new NativeArray(ctx, new int[] {211, 213, 212, 208}, Integer.class); - NativeArray a2_offsets = new NativeArray(ctx, new long[] {0, 4, 6, 7}, Long.class); + NativeArray a2_offsets = new NativeArray(ctx, new long[] {0, 4, 6, 7}, Datatype.TILEDB_UINT64); NativeArray buffer_var_a2 = new NativeArray(ctx, "wwwwyyxu", String.class); NativeArray buffer_a3 = new NativeArray( ctx, new float[] {211.1f, 211.2f, 213.1f, 213.2f, 212.1f, 212.2f, 208.1f, 208.2f}, Float.class); - NativeArray coords = new NativeArray(ctx, new long[] {4, 2, 3, 4, 3, 3, 3, 1}, Long.class); + + NativeArray d1 = new NativeArray(ctx, new long[] {4, 3, 3, 3}, Long.class); + NativeArray d2 = new NativeArray(ctx, new long[] {2, 4, 3, 1}, Long.class); // Create query Array my_dense_array = new Array(ctx, "my_dense_array", TILEDB_WRITE); Query query = new Query(my_dense_array); query.setLayout(TILEDB_UNORDERED); - query.setSubarray(new NativeArray(ctx, new long[] {3, 4, 3, 4}, Long.class)); + query.setBuffer("d1", d1); + query.setBuffer("d2", d2); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords); // Submit query query.submit(); diff --git a/src/main/java/examples/io/tiledb/java/api/SparseCreate.java b/src/main/java/examples/io/tiledb/java/api/SparseCreate.java index 40660a9c..6c55f14e 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseCreate.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseCreate.java @@ -41,19 +41,19 @@ public static void main(String[] args) throws Exception { Context ctx = new Context(); // Create getDimensions Dimension d1 = - new Dimension(ctx, "d1", Long.class, new Pair(1l, 4l), 2l); + new Dimension(ctx, "d1", Datatype.TILEDB_INT64, new Pair(1l, 4l), 2l); Dimension d2 = - new Dimension(ctx, "d2", Long.class, new Pair(1l, 4l), 2l); + new Dimension(ctx, "d2", Datatype.TILEDB_INT64, new Pair(1l, 4l), 2l); // Create getDomain Domain domain = new Domain(ctx); domain.addDimension(d1); domain.addDimension(d2); // Create and add getAttributes - Attribute a1 = new Attribute(ctx, "a1", Integer.class); - Attribute a2 = new Attribute(ctx, "a2", String.class); + Attribute a1 = new Attribute(ctx, "a1", Datatype.TILEDB_INT32); + Attribute a2 = new Attribute(ctx, "a2", Datatype.TILEDB_CHAR); a2.setCellValNum(TILEDB_VAR_NUM); - Attribute a3 = new Attribute(ctx, "a3", Float.class); + Attribute a3 = new Attribute(ctx, "a3", Datatype.TILEDB_FLOAT32); a3.setCellValNum(2); a1.setFilterList(new FilterList(ctx).addFilter(new LZ4Filter(ctx))); a2.setFilterList(new FilterList(ctx).addFilter(new GzipFilter(ctx))); diff --git a/src/main/java/examples/io/tiledb/java/api/SparseReadGlobal.java b/src/main/java/examples/io/tiledb/java/api/SparseReadGlobal.java index 960b794b..d743a9cd 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseReadGlobal.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseReadGlobal.java @@ -35,7 +35,6 @@ package examples.io.tiledb.java.api; -import static io.tiledb.java.api.Constants.TILEDB_COORDS; import static io.tiledb.java.api.Layout.TILEDB_GLOBAL_ORDER; import static io.tiledb.java.api.QueryType.TILEDB_READ; @@ -73,12 +72,16 @@ public static void main(String[] args) throws Exception { "a1", new NativeArray(ctx, max_sizes.get("a1").getSecond().intValue(), Integer.class)); query.setBuffer( "a2", - new NativeArray(ctx, max_sizes.get("a2").getFirst().intValue(), Long.class), + new NativeArray(ctx, max_sizes.get("a2").getFirst().intValue(), Datatype.TILEDB_UINT64), new NativeArray(ctx, max_sizes.get("a2").getSecond().intValue(), String.class)); query.setBuffer( "a3", new NativeArray(ctx, max_sizes.get("a3").getSecond().intValue(), Float.class)); - query.setCoordinates( - new NativeArray(ctx, max_sizes.get(TILEDB_COORDS).getSecond().intValue(), Long.class)); + + query.setBuffer( + "d1", new NativeArray(ctx, max_sizes.get("d1").getSecond().intValue(), Long.class)); + + query.setBuffer( + "d2", new NativeArray(ctx, max_sizes.get("d2").getSecond().intValue(), Long.class)); // Submit query System.out.println("Query submitted: " + query.submit()); @@ -89,11 +92,13 @@ public static void main(String[] args) throws Exception { long[] a2_offsets = (long[]) query.getVarBuffer("a2"); byte[] a2_data = (byte[]) query.getBuffer("a2"); float[] a3_buff = (float[]) query.getBuffer("a3"); - long[] coords = (long[]) query.getBuffer(TILEDB_COORDS); + long[] d1_buff = (long[]) query.getBuffer("d1"); + long[] d2_buff = (long[]) query.getBuffer("d2"); System.out.println("Result num: " + a1_buff.length); System.out.println( - String.format("%8s", TILEDB_COORDS) + "d1" + + String.format("%9s", "d2") + String.format("%9s", "a1") + String.format("%11s", "a2") + String.format("%11s", "a3[0]") @@ -102,7 +107,7 @@ public static void main(String[] args) throws Exception { for (int i = 0; i < a1_buff.length; i++) { int end = (i == a1_buff.length - 1) ? a2_data.length : (int) a2_offsets[i + 1]; System.out.println( - String.format("%8s", "(" + coords[2 * i] + ", " + coords[2 * i + 1] + ")") + String.format("%8s", "(" + d1_buff[2 * i] + ", " + d2_buff[2 * i] + ")") + String.format("%9s", a1_buff[i]) + String.format( "%11s", new String(Arrays.copyOfRange(a2_data, (int) a2_offsets[i], end))) diff --git a/src/main/java/examples/io/tiledb/java/api/SparseReadOrderedSubarray.java b/src/main/java/examples/io/tiledb/java/api/SparseReadOrderedSubarray.java index ca7a8a43..0469324e 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseReadOrderedSubarray.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseReadOrderedSubarray.java @@ -51,23 +51,22 @@ public static void main(String[] args) throws Exception { // Calculate maximum buffer elements for the query results per attribute Array my_sparse_array = new Array(ctx, "my_sparse_array"); - NativeArray subarray = new NativeArray(ctx, new long[] {3l, 4l, 2l, 4l}, Long.class); - HashMap> max_sizes = my_sparse_array.maxBufferElements(subarray); + NativeArray subarray = new NativeArray(ctx, new long[] {3l, 4l, 2l, 4l}, Datatype.TILEDB_INT64); + + long bufferSize = 1024; // Create query Query query = new Query(my_sparse_array, TILEDB_READ); query.setLayout(TILEDB_ROW_MAJOR); query.setSubarray(subarray); - query.setBuffer( - "a1", new NativeArray(ctx, max_sizes.get("a1").getSecond().intValue(), Integer.class)); + query.setBuffer("d1", new NativeArray(ctx, bufferSize, Datatype.TILEDB_INT64)); + query.setBuffer("d2", new NativeArray(ctx, bufferSize, Datatype.TILEDB_INT64)); + query.setBuffer("a1", new NativeArray(ctx, bufferSize, Datatype.TILEDB_INT32)); query.setBuffer( "a2", - new NativeArray(ctx, max_sizes.get("a2").getFirst().intValue(), Long.class), - new NativeArray(ctx, max_sizes.get("a2").getSecond().intValue(), String.class)); - query.setBuffer( - "a3", new NativeArray(ctx, max_sizes.get("a3").getSecond().intValue(), Float.class)); - query.setCoordinates( - new NativeArray(ctx, max_sizes.get(TILEDB_COORDS).getSecond().intValue(), Long.class)); + new NativeArray(ctx, bufferSize, Datatype.TILEDB_INT64), + new NativeArray(ctx, bufferSize, Datatype.TILEDB_CHAR)); + query.setBuffer("a3", new NativeArray(ctx, bufferSize, Datatype.TILEDB_FLOAT32)); // Submit query System.out.println("Query submitted: " + query.submit()); diff --git a/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal1.java b/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal1.java index 9d506dfe..ef7b98b5 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal1.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal1.java @@ -38,10 +38,7 @@ import static io.tiledb.java.api.Layout.TILEDB_GLOBAL_ORDER; import static io.tiledb.java.api.QueryType.TILEDB_WRITE; -import io.tiledb.java.api.Array; -import io.tiledb.java.api.Context; -import io.tiledb.java.api.NativeArray; -import io.tiledb.java.api.Query; +import io.tiledb.java.api.*; public class SparseWriteGlobal1 { public static void main(String[] args) throws Exception { @@ -49,10 +46,12 @@ public static void main(String[] args) throws Exception { Context ctx = ctx = new Context(); // Prepare cell buffers - NativeArray a1_data = new NativeArray(ctx, new int[] {0, 1, 2, 3, 4, 5, 6, 7}, Integer.class); + NativeArray a1_data = + new NativeArray(ctx, new int[] {0, 1, 2, 3, 4, 5, 6, 7}, Datatype.TILEDB_INT32); NativeArray a2_offsets = - new NativeArray(ctx, new long[] {0, 1, 3, 6, 10, 11, 13, 16}, Long.class); - NativeArray buffer_var_a2 = new NativeArray(ctx, "abbcccdddd" + "effggghhhh", String.class); + new NativeArray(ctx, new long[] {0, 1, 3, 6, 10, 11, 13, 16}, Datatype.TILEDB_UINT64); + NativeArray buffer_var_a2 = + new NativeArray(ctx, "abbcccdddd" + "effggghhhh", Datatype.TILEDB_CHAR); NativeArray buffer_a3 = new NativeArray( @@ -63,18 +62,21 @@ public static void main(String[] args) throws Exception { }, Float.class); - NativeArray coords_buff = - new NativeArray( - ctx, new long[] {1, 1, 1, 2, 1, 4, 2, 3, 3, 1, 4, 2, 3, 3, 3, 4}, Long.class); + NativeArray d1_buff = + new NativeArray(ctx, new long[] {1, 1, 1, 2, 3, 4, 3, 3}, Datatype.TILEDB_INT64); + + NativeArray d2_buff = + new NativeArray(ctx, new long[] {1, 2, 4, 3, 1, 2, 3, 4}, Datatype.TILEDB_INT64); // Create query Array my_sparse_array = new Array(ctx, "my_sparse_array", TILEDB_WRITE); Query query = new Query(my_sparse_array); query.setLayout(TILEDB_GLOBAL_ORDER); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords_buff); // Submit query query.submit(); diff --git a/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal2.java b/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal2.java index 055e117f..ca2453bd 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal2.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseWriteGlobal2.java @@ -38,10 +38,7 @@ import static io.tiledb.java.api.Layout.TILEDB_GLOBAL_ORDER; import static io.tiledb.java.api.QueryType.TILEDB_WRITE; -import io.tiledb.java.api.Array; -import io.tiledb.java.api.Context; -import io.tiledb.java.api.NativeArray; -import io.tiledb.java.api.Query; +import io.tiledb.java.api.*; public class SparseWriteGlobal2 { public static void main(String[] args) throws Exception { @@ -52,7 +49,7 @@ public static void main(String[] args) throws Exception { // Prepare cell buffers - #1 NativeArray a1_data = new NativeArray(ctx, new int[] {0, 1, 2}, Integer.class); NativeArray a2_offsets = - new NativeArray(ctx, new long[] {0, 1, 3, 6, 10, 11, 13, 16}, Long.class); + new NativeArray(ctx, new long[] {0, 1, 3, 6, 10, 11, 13, 16}, Datatype.TILEDB_UINT64); NativeArray buffer_var_a2 = new NativeArray(ctx, "abbcccddddeffggghhhh", String.class); NativeArray buffer_a3 = @@ -64,16 +61,18 @@ public static void main(String[] args) throws Exception { }, Float.class); - NativeArray coords_buff = new NativeArray(ctx, new long[] {1, 1, 1, 2}, Long.class); + NativeArray d1_buff = new NativeArray(ctx, new long[] {1, 1}, Long.class); + NativeArray d2_buff = new NativeArray(ctx, new long[] {1, 2}, Long.class); // Create query Array my_sparse_array = new Array(ctx, "my_sparse_array", TILEDB_WRITE); Query query = new Query(my_sparse_array); query.setLayout(TILEDB_GLOBAL_ORDER); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords_buff); // Submit query query.submit(); @@ -81,18 +80,20 @@ public static void main(String[] args) throws Exception { // Prepare cell buffers - #2 a1_data = new NativeArray(ctx, new int[] {3, 4, 5, 6, 7}, Integer.class); - a2_offsets = new NativeArray(ctx, new long[] {}, Long.class); + a2_offsets = new NativeArray(ctx, new long[] {}, Datatype.TILEDB_UINT64); buffer_var_a2 = new NativeArray(ctx, "", String.class); buffer_a3 = new NativeArray(ctx, new float[] {}, Float.class); - coords_buff = new NativeArray(ctx, new long[] {1, 4, 2, 3, 3, 1, 4, 2, 3, 3, 3, 4}, Long.class); + d1_buff = new NativeArray(ctx, new long[] {1, 2, 3, 4, 3, 3}, Long.class); + d2_buff = new NativeArray(ctx, new long[] {4, 3, 1, 2, 3, 4}, Long.class); // Reset buffers query.resetBuffers(); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords_buff); // Submit query - #2 query.submit(); diff --git a/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1.java b/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1.java index ac4a0d3a..c2eb7bdb 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1.java @@ -36,10 +36,7 @@ import static io.tiledb.java.api.Layout.TILEDB_UNORDERED; import static io.tiledb.java.api.QueryType.TILEDB_WRITE; -import io.tiledb.java.api.Array; -import io.tiledb.java.api.Context; -import io.tiledb.java.api.NativeArray; -import io.tiledb.java.api.Query; +import io.tiledb.java.api.*; public class SparseWriteUnordered1 { public static void main(String[] args) throws Exception { @@ -47,12 +44,13 @@ public static void main(String[] args) throws Exception { Context ctx = ctx = new Context(); // Prepare cell buffers - NativeArray a1_data = new NativeArray(ctx, new int[] {7, 5, 0, 6, 4, 3, 1, 2}, Integer.class); + NativeArray a1_data = + new NativeArray(ctx, new int[] {7, 5, 0, 6, 4, 3, 1, 2}, Datatype.TILEDB_INT32); NativeArray a2_offsets = - new NativeArray(ctx, new long[] {0, 4, 6, 7, 10, 11, 15, 17}, Long.class); + new NativeArray(ctx, new long[] {0, 4, 6, 7, 10, 11, 15, 17}, Datatype.TILEDB_UINT64); NativeArray buffer_var_a2 = new NativeArray( - ctx, "hhhh" + "ff" + "a" + "ggg" + "e" + "dddd" + "bb" + "ccc", String.class); + ctx, "hhhh" + "ff" + "a" + "ggg" + "e" + "dddd" + "bb" + "ccc", Datatype.TILEDB_CHAR); NativeArray buffer_a3 = new NativeArray( @@ -63,18 +61,21 @@ public static void main(String[] args) throws Exception { }, Float.class); - NativeArray coords_buff = - new NativeArray( - ctx, new long[] {3, 4, 4, 2, 1, 1, 3, 3, 3, 1, 2, 3, 1, 2, 1, 4}, Long.class); + NativeArray d1_buff = + new NativeArray(ctx, new long[] {3, 4, 1, 3, 3, 2, 1, 1}, Datatype.TILEDB_INT64); + + NativeArray d2_buff = + new NativeArray(ctx, new long[] {4, 2, 1, 3, 1, 3, 2, 4}, Datatype.TILEDB_INT64); // Create query Array my_sparse_array = new Array(ctx, "my_sparse_array", TILEDB_WRITE); Query query = new Query(my_sparse_array); query.setLayout(TILEDB_UNORDERED); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords_buff); // Submit query query.submit(); diff --git a/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1Again.java b/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1Again.java index cabf525b..c76ab266 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1Again.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered1Again.java @@ -37,10 +37,7 @@ import static io.tiledb.java.api.Layout.TILEDB_UNORDERED; import static io.tiledb.java.api.QueryType.TILEDB_WRITE; -import io.tiledb.java.api.Array; -import io.tiledb.java.api.Context; -import io.tiledb.java.api.NativeArray; -import io.tiledb.java.api.Query; +import io.tiledb.java.api.*; public class SparseWriteUnordered1Again { public static void main(String[] args) throws Exception { @@ -48,9 +45,11 @@ public static void main(String[] args) throws Exception { Context ctx = ctx = new Context(); // Prepare cell buffers - NativeArray a1_data = new NativeArray(ctx, new int[] {107, 104, 106, 105}, Integer.class); - NativeArray a2_offsets = new NativeArray(ctx, new long[] {0, 3, 4, 5}, Long.class); - NativeArray buffer_var_a2 = new NativeArray(ctx, "yyy" + "u" + "w" + "vvvv", String.class); + NativeArray a1_data = + new NativeArray(ctx, new int[] {107, 104, 106, 105}, Datatype.TILEDB_INT32); + NativeArray a2_offsets = new NativeArray(ctx, new long[] {0, 3, 4, 5}, Datatype.TILEDB_UINT64); + NativeArray buffer_var_a2 = + new NativeArray(ctx, "yyy" + "u" + "w" + "vvvv", Datatype.TILEDB_CHAR); NativeArray buffer_a3 = new NativeArray( @@ -58,16 +57,18 @@ public static void main(String[] args) throws Exception { new float[] {107.1f, 107.2f, 104.1f, 104.2f, 106.1f, 106.2f, 105.1f, 105.2f}, Float.class); - NativeArray coords_buff = new NativeArray(ctx, new long[] {3, 4, 3, 2, 3, 3, 4, 1}, Long.class); + NativeArray d1_buff = new NativeArray(ctx, new long[] {3, 3, 3, 4}, Datatype.TILEDB_INT64); + NativeArray d2_buff = new NativeArray(ctx, new long[] {4, 2, 3, 1}, Datatype.TILEDB_INT64); // Create query Array my_sparse_array = new Array(ctx, "my_sparse_array", TILEDB_WRITE); Query query = new Query(my_sparse_array); query.setLayout(TILEDB_UNORDERED); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords_buff); // Submit query query.submit(); diff --git a/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered2.java b/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered2.java index 80013c1b..48391deb 100644 --- a/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered2.java +++ b/src/main/java/examples/io/tiledb/java/api/SparseWriteUnordered2.java @@ -37,10 +37,7 @@ import static io.tiledb.java.api.Layout.TILEDB_UNORDERED; import static io.tiledb.java.api.QueryType.TILEDB_WRITE; -import io.tiledb.java.api.Array; -import io.tiledb.java.api.Context; -import io.tiledb.java.api.NativeArray; -import io.tiledb.java.api.Query; +import io.tiledb.java.api.*; public class SparseWriteUnordered2 { public static void main(String[] args) throws Exception { @@ -49,31 +46,36 @@ public static void main(String[] args) throws Exception { Context ctx = new Context(); // Prepare cell buffers - #1 - NativeArray a1_data = new NativeArray(ctx, new int[] {7, 5, 0}, Integer.class); - NativeArray a2_offsets = new NativeArray(ctx, new long[] {0, 4, 6}, Long.class); - NativeArray buffer_var_a2 = new NativeArray(ctx, "hhhh" + "ff" + "a", String.class); + NativeArray a1_data = new NativeArray(ctx, new int[] {7, 5, 0}, Datatype.TILEDB_INT32); + NativeArray a2_offsets = new NativeArray(ctx, new long[] {0, 4, 6}, Datatype.TILEDB_UINT64); + NativeArray buffer_var_a2 = new NativeArray(ctx, "hhhh" + "ff" + "a", Datatype.TILEDB_CHAR); NativeArray buffer_a3 = - new NativeArray(ctx, new float[] {7.1f, 7.2f, 5.1f, 5.2f, 0.1f, 0.2f}, Float.class); + new NativeArray( + ctx, new float[] {7.1f, 7.2f, 5.1f, 5.2f, 0.1f, 0.2f}, Datatype.TILEDB_FLOAT32); - NativeArray coords_buff = new NativeArray(ctx, new long[] {3, 4, 4, 2, 1, 1}, Long.class); + NativeArray coords_buff = + new NativeArray(ctx, new long[] {3, 4, 4, 2, 1, 1}, Datatype.TILEDB_INT64); + NativeArray d1_buff = new NativeArray(ctx, new long[] {3, 4, 1}, Datatype.TILEDB_INT64); + NativeArray d2_buff = new NativeArray(ctx, new long[] {4, 2, 1}, Datatype.TILEDB_INT64); // Create query Array my_sparse_array = new Array(ctx, "my_sparse_array", TILEDB_WRITE); Query query = new Query(my_sparse_array); query.setLayout(TILEDB_UNORDERED); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords_buff); // Submit query query.submit(); // Prepare cell buffers - #2 - a1_data = new NativeArray(ctx, new int[] {6, 4, 3, 1, 2}, Integer.class); - a2_offsets = new NativeArray(ctx, new long[] {0, 3, 4, 8, 10}, Long.class); + a1_data = new NativeArray(ctx, new int[] {6, 4, 3, 1, 2}, Datatype.TILEDB_INT32); + a2_offsets = new NativeArray(ctx, new long[] {0, 3, 4, 8, 10}, Datatype.TILEDB_UINT64); buffer_var_a2 = new NativeArray(ctx, "ggg" + "e" + "dddd" + "bb" + "ccc", String.class); buffer_a3 = @@ -81,14 +83,17 @@ public static void main(String[] args) throws Exception { ctx, new float[] {6.1f, 6.2f, 4.1f, 4.2f, 3.1f, 3.2f, 1.1f, 1.2f, 2.1f, 2.2f}, Float.class); - coords_buff = new NativeArray(ctx, new long[] {3, 3, 3, 1, 2, 3, 1, 2, 1, 4}, Long.class); + + d1_buff = new NativeArray(ctx, new long[] {3, 3, 2, 1, 1}, Datatype.TILEDB_INT64); + d2_buff = new NativeArray(ctx, new long[] {3, 1, 3, 2, 4}, Datatype.TILEDB_INT64); // Reset buffers query.resetBuffers(); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); query.setBuffer("a2", a2_offsets, buffer_var_a2); query.setBuffer("a3", buffer_a3); - query.setCoordinates(coords_buff); // Submit query - #2 query.submit(); diff --git a/src/main/java/io/tiledb/java/api/Array.java b/src/main/java/io/tiledb/java/api/Array.java index 46c11d1d..ef972ee7 100644 --- a/src/main/java/io/tiledb/java/api/Array.java +++ b/src/main/java/io/tiledb/java/api/Array.java @@ -700,6 +700,7 @@ public Pair getNonEmptyDomainVarFromName(String name) throws Til * buffer. * @throws TileDBError A TileDB exception */ + @Deprecated public HashMap> maxBufferElements(NativeArray subarray) throws TileDBError { checkIsOpen(); @@ -751,12 +752,15 @@ public HashMap> maxBufferElements(NativeArray subarray) tiledb.tiledb_coords(), subarray.toVoidPointer(), val_nbytes.cast())); - ret.put( - tiledb.tiledb_coords(), - new Pair( - 0l, - val_nbytes.getitem(0).longValue() - / tiledb.tiledb_datatype_size(domain.getType().toSwigEnum()).longValue())); + + for (Dimension dim : domain.getDimensions()) { + ret.put( + dim.getName(), + new Pair( + 0l, + val_nbytes.getitem(0).longValue() + / tiledb.tiledb_datatype_size(dim.getType().toSwigEnum()).longValue())); + } } finally { off_nbytes.delete(); val_nbytes.delete(); diff --git a/src/main/java/io/tiledb/java/api/Query.java b/src/main/java/io/tiledb/java/api/Query.java index ed9ff23d..88cb28e9 100644 --- a/src/main/java/io/tiledb/java/api/Query.java +++ b/src/main/java/io/tiledb/java/api/Query.java @@ -30,9 +30,7 @@ import java.math.BigInteger; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * Construct and execute read/write queries on a TileDB Array. @@ -329,6 +327,28 @@ public synchronized Pair getRangeVar(int dimIdx, BigInteger rang } } + public synchronized int getEstResultSize(Context ctx, String attribute) throws TileDBError { + SWIGTYPE_p_unsigned_long_long size = tiledb.new_ullp(); + + ctx.handleError( + tiledb.tiledb_query_get_est_result_size(ctx.getCtxp(), queryp, attribute, size)); + + return tiledb.ullp_value(size).intValue(); + } + + public synchronized Pair getEstResultSizeVar(Context ctx, String attribute) + throws TileDBError { + SWIGTYPE_p_unsigned_long_long offsetsSize = tiledb.new_ullp(); + SWIGTYPE_p_unsigned_long_long dataSize = tiledb.new_ullp(); + + ctx.handleError( + tiledb.tiledb_query_get_est_result_size_var( + ctx.getCtxp(), queryp, attribute, offsetsSize, dataSize)); + + return new Pair( + tiledb.ullp_value(offsetsSize).intValue(), tiledb.ullp_value(dataSize).intValue()); + } + /** * Retrieves the number of ranges of the query subarray along a given dimension. * @@ -904,6 +924,7 @@ public synchronized Query setBufferElements( * @param buffer A NativeArray to be used for the coordinates. * @exception TileDBError A TileDB exception */ + @Deprecated public Query setCoordinates(NativeArray buffer) throws TileDBError { setBuffer(tiledb.tiledb_coords(), buffer); return this; @@ -1089,6 +1110,41 @@ public long[] getVarBuffer(String attr) throws TileDBError { return (long[]) buffer.toJavaArray(nelements); } + /** + * Returns the result size estimate for each attribute/dimension + * + * @return A HashMap with Pairs, where the first value of the pair is the estimated size of the + * offsets (in case of variable-sized attributes) and the second value represents the data + * size estimate. + * @throws TileDBError + */ + public HashMap> getResultEstimations() throws TileDBError { + HashMap> estimations = new HashMap<>(); + String name; + try (ArraySchema schema = this.array.getSchema(); + Domain domain = schema.getDomain(); ) { + for (Dimension dimension : domain.getDimensions()) { + name = dimension.getName(); + if (dimension.isVar()) { + estimations.put(name, this.getEstResultSizeVar(ctx, name)); + } else { + estimations.put(name, new Pair<>(null, this.getEstResultSize(ctx, name))); + } + } + + for (Attribute attribute : schema.getAttributes().values()) { + name = attribute.getName(); + if (attribute.isVar()) { + estimations.put(name, this.getEstResultSizeVar(ctx, name)); + } else { + estimations.put(name, new Pair<>(null, this.getEstResultSize(ctx, name))); + } + } + } + + return estimations; + } + /** * Flushes all internal state of a query object and finalizes the query. This is applicable only * to global layout writes. It has no effect for any other query type. diff --git a/src/test/java/io/tiledb/java/api/AsyncTest.java b/src/test/java/io/tiledb/java/api/AsyncTest.java index 09bee2eb..108af771 100644 --- a/src/test/java/io/tiledb/java/api/AsyncTest.java +++ b/src/test/java/io/tiledb/java/api/AsyncTest.java @@ -1,7 +1,6 @@ package io.tiledb.java.api; import static io.tiledb.java.api.ArrayType.TILEDB_SPARSE; -import static io.tiledb.java.api.Constants.TILEDB_COORDS; import static io.tiledb.java.api.Layout.*; import static io.tiledb.java.api.QueryType.*; @@ -102,11 +101,9 @@ private void arrayRead() throws Exception { Query query = new Query(array, TILEDB_READ); query.setLayout(TILEDB_ROW_MAJOR); query.setBuffer( - "rows", - new NativeArray(ctx, max_sizes.get(TILEDB_COORDS).getSecond().intValue(), Integer.class)); + "rows", new NativeArray(ctx, max_sizes.get("rows").getSecond().intValue(), Integer.class)); query.setBuffer( - "cols", - new NativeArray(ctx, max_sizes.get(TILEDB_COORDS).getSecond().intValue(), Integer.class)); + "cols", new NativeArray(ctx, max_sizes.get("cols").getSecond().intValue(), Integer.class)); query.setBuffer( "a", new NativeArray(ctx, max_sizes.get("a").getSecond().intValue(), Integer.class)); diff --git a/src/test/java/io/tiledb/java/api/QuickstartSparseTest.java b/src/test/java/io/tiledb/java/api/QuickstartSparseTest.java index 5c2107e8..9e67d8cd 100644 --- a/src/test/java/io/tiledb/java/api/QuickstartSparseTest.java +++ b/src/test/java/io/tiledb/java/api/QuickstartSparseTest.java @@ -25,7 +25,6 @@ package io.tiledb.java.api; import static io.tiledb.java.api.ArrayType.TILEDB_SPARSE; -import static io.tiledb.java.api.Constants.TILEDB_COORDS; import static io.tiledb.java.api.Constants.TILEDB_VAR_NUM; import static io.tiledb.java.api.Layout.TILEDB_GLOBAL_ORDER; import static io.tiledb.java.api.Layout.TILEDB_ROW_MAJOR; @@ -168,12 +167,10 @@ private void arrayRead() throws Exception { query.setSubarray(subarray); query.setBuffer( - "d1", - new NativeArray(ctx, max_sizes.get(TILEDB_COORDS).getSecond().intValue(), Long.class)); + "d1", new NativeArray(ctx, max_sizes.get("d1").getSecond().intValue(), Long.class)); query.setBuffer( - "d2", - new NativeArray(ctx, max_sizes.get(TILEDB_COORDS).getSecond().intValue(), Long.class)); + "d2", new NativeArray(ctx, max_sizes.get("d1").getSecond().intValue(), Long.class)); query.setBuffer( "a1", new NativeArray(ctx, max_sizes.get("a1").getSecond().intValue(), Integer.class)); query.setBuffer( diff --git a/src/test/java/io/tiledb/java/api/WriteBigSparseArray.java b/src/test/java/io/tiledb/java/api/WriteBigSparseArray.java index 03471690..ad3afaef 100644 --- a/src/test/java/io/tiledb/java/api/WriteBigSparseArray.java +++ b/src/test/java/io/tiledb/java/api/WriteBigSparseArray.java @@ -89,23 +89,26 @@ public static void write(int index, HashSet set) throws Exception { int size = 1000; // Prepare cell buffers int[] d = new int[size]; - long[] coords = new long[size * 2]; + long[] d1 = new long[size]; + long[] d2 = new long[size]; Random random = new Random(); for (int i = 0; i < size; i++) { d[i] = i; Pair p = nextUnique(random, set, 10000l); - coords[2 * i] = p.getFirst(); - coords[2 * i + 1] = p.getSecond(); + d1[2 * i] = p.getFirst(); + d2[2 * i] = p.getSecond(); } NativeArray a1_data = new NativeArray(ctx, d, Integer.class); - NativeArray coords_buff = new NativeArray(ctx, coords, Long.class); + NativeArray d1_buff = new NativeArray(ctx, d1, Long.class); + NativeArray d2_buff = new NativeArray(ctx, d2, Long.class); // Create query Query query = new Query(array, TILEDB_WRITE); query.setLayout(TILEDB_UNORDERED); + query.setBuffer("d1", d1_buff); + query.setBuffer("d2", d2_buff); query.setBuffer("a1", a1_data); - query.setCoordinates(coords_buff); // Submit query query.submit();