Skip to content

Commit 3ab0496

Browse files
add UDF examples
1 parent 613f1df commit 3ab0496

File tree

1 file changed

+100
-15
lines changed

1 file changed

+100
-15
lines changed

src/main/java/examples/Examples.java

Lines changed: 100 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,18 @@
22

33
// Import classes:
44
import io.tiledb.cloud.TileDBClient;
5+
import io.tiledb.cloud.TileDBUDF;
56
import io.tiledb.cloud.rest_api.ApiClient;
67
import io.tiledb.cloud.rest_api.ApiException;
78
import io.tiledb.cloud.TileDBLogin;
89
import io.tiledb.cloud.rest_api.api.GroupsApi;
910
import io.tiledb.cloud.rest_api.api.ArrayApi;
10-
import io.tiledb.cloud.rest_api.model.ArrayInfo;
11-
import io.tiledb.cloud.rest_api.model.ArrayInfoUpdate;
12-
import io.tiledb.cloud.rest_api.model.ArraySchema;
13-
import io.tiledb.cloud.rest_api.model.ArrayType;
14-
import io.tiledb.cloud.rest_api.model.Attribute;
15-
import io.tiledb.cloud.rest_api.model.Datatype;
16-
import io.tiledb.cloud.rest_api.model.Dimension;
17-
import io.tiledb.cloud.rest_api.model.DimensionTileExtent;
18-
import io.tiledb.cloud.rest_api.model.Domain;
19-
import io.tiledb.cloud.rest_api.model.DomainArray;
20-
import io.tiledb.cloud.rest_api.model.Filter;
21-
import io.tiledb.cloud.rest_api.model.FilterPipeline;
22-
import io.tiledb.cloud.rest_api.model.FilterType;
23-
import io.tiledb.cloud.rest_api.model.GroupBrowserData;
24-
import io.tiledb.cloud.rest_api.model.Layout;
11+
import io.tiledb.cloud.rest_api.model.*;
2512

13+
import java.math.BigDecimal;
14+
import java.util.ArrayList;
15+
import java.util.Arrays;
16+
import java.util.HashMap;
2617
import java.util.List;
2718

2819
public class Examples
@@ -45,6 +36,9 @@ public static void main(String[] args) {
4536
ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());
4637

4738
// Uncomment to run whichever example you want
39+
// runGenericUDF(tileDBClient);
40+
// runArrayUDF(tileDBClient);
41+
// runMultiArrayUDF(tileDBClient);
4842
// getArraySchema(apiInstance);
4943
// createArray(apiInstance);
5044
// registerArray(apiInstance);
@@ -54,6 +48,96 @@ public static void main(String[] args) {
5448
// deregisterArray(apiInstance);
5549
}
5650

51+
/**
52+
* Runs a generic UDF
53+
* @param tileDBClient
54+
*/
55+
private static void runGenericUDF(TileDBClient tileDBClient){
56+
TileDBUDF tileDBUDF = new TileDBUDF(tileDBClient, "TileDB-Inc");
57+
GenericUDF genericUDF = new GenericUDF();
58+
genericUDF.setUdfInfoName("TileDB-Inc/args-udf");
59+
HashMap<String,Object> arguments = new HashMap<>();
60+
arguments.put("arg1", "a1");
61+
arguments.put("arg2", "a2");
62+
System.out.println(tileDBUDF.executeGeneric(genericUDF, arguments)); //could be JSON or Arrow
63+
}
64+
65+
/**
66+
* Runs an array UDF on a TileDB Arrray
67+
* @param tileDBClient
68+
*/
69+
public static void runArrayUDF(TileDBClient tileDBClient){
70+
TileDBUDF tileDBUDF = new TileDBUDF(tileDBClient, "TileDB-Inc");
71+
ArrayList<BigDecimal> range1 = new ArrayList<>();
72+
range1.add(BigDecimal.valueOf(1));
73+
range1.add(BigDecimal.valueOf(4));
74+
75+
ArrayList<BigDecimal> range2 = new ArrayList<>();
76+
range2.add(BigDecimal.valueOf(1));
77+
range2.add(BigDecimal.valueOf(4));
78+
79+
QueryRanges queryRanges = new QueryRanges();
80+
queryRanges.addRangesItem(range1);
81+
queryRanges.addRangesItem(range2);
82+
83+
84+
HashMap<String,Object> argumentsForArrayUDF = new HashMap<>();
85+
argumentsForArrayUDF.put("attr", "rows");
86+
argumentsForArrayUDF.put("scale", 9);
87+
88+
MultiArrayUDF multiArrayUDF = new MultiArrayUDF();
89+
multiArrayUDF.setUdfInfoName("TileDB-Inc/array-udf");
90+
multiArrayUDF.setRanges(queryRanges);
91+
System.out.println(tileDBUDF.executeSingleArray(multiArrayUDF, argumentsForArrayUDF, "tiledb://TileDB-Inc/quickstart_sparse", "TileDB-Inc"));
92+
}
93+
94+
/**
95+
* Runs a multi-array UDF on multiple TileDB arrays
96+
* @param tileDBClient
97+
*/
98+
public static void runMultiArrayUDF(TileDBClient tileDBClient){
99+
TileDBUDF tileDBUDF = new TileDBUDF(tileDBClient, "TileDB-Inc");
100+
101+
ArrayList<BigDecimal> range1 = new ArrayList<>();
102+
range1.add(BigDecimal.valueOf(1));
103+
range1.add(BigDecimal.valueOf(4));
104+
105+
ArrayList<BigDecimal> range2 = new ArrayList<>();
106+
range2.add(BigDecimal.valueOf(1));
107+
range2.add(BigDecimal.valueOf(4));
108+
109+
QueryRanges queryRanges = new QueryRanges();
110+
queryRanges.addRangesItem(range1);
111+
queryRanges.addRangesItem(range2);
112+
113+
MultiArrayUDF multiArrayUDF = new MultiArrayUDF();
114+
multiArrayUDF.setUdfInfoName("TileDB-Inc/multi-array-udf");
115+
116+
List<UDFArrayDetails> arrays = new ArrayList<>();
117+
118+
//array1
119+
UDFArrayDetails array1 = new UDFArrayDetails();
120+
array1.setUri("tiledb://TileDB-Inc/dense-array");
121+
array1.setRanges(queryRanges);
122+
array1.setBuffers(Arrays.asList("rows", "cols", "a1"));
123+
arrays.add(array1);
124+
125+
//array2
126+
UDFArrayDetails array2 = new UDFArrayDetails();
127+
array2.setUri("tiledb://TileDB-Inc/quickstart_dense");
128+
array2.setRanges(queryRanges);
129+
array2.setBuffers(Arrays.asList("rows", "cols", "a"));
130+
arrays.add(array2);
131+
132+
multiArrayUDF.setArrays(arrays);
133+
134+
HashMap<String,Object> arguments = new HashMap<>();
135+
arguments.put("attr1", "a1");
136+
arguments.put("attr2", "a");
137+
138+
System.out.println(tileDBUDF.executeMultiArray(multiArrayUDF, arguments));
139+
}
140+
57141
/**
58142
* Deregister an array
59143
* @param apiInstance
@@ -239,3 +323,4 @@ public static void registerArray(ArrayApi arrayApi){
239323
}
240324
}
241325
}
326+

0 commit comments

Comments
 (0)