Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .github/workflows/github_actions.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,46 @@
name: TileDB-Cloud-Java

on:
workflow_dispatch:
push:
tags:
- '*'
branches:
- master
- test-*
pull_request:

jobs:
Examples:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v3

- run: |
unset SYSTEM
./gradlew assemble;
shell: bash
name: assemble

- name: Run examples
env:
API_TOKEN: ${{ secrets.API_TOKEN }}
run: |
cd build/libs
rm *javadoc* *sources* *default*
p=$(readlink -f *.jar)
cd ../../src/main/java/examples
javac -cp $p *.java
for x in $(ls -1 *.java | sed 's/.java//');
do
echo $x;
class_name=examples.$x;
java -cp $p $class_name;
done
Release:
if: startsWith(github.ref, 'refs/tags/')
needs: [Examples]
name: Create-Release
runs-on: ubuntu-latest
steps:
Expand Down
4 changes: 1 addition & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ apply plugin: 'java'
apply plugin: 'com.diffplug.spotless'

group 'io.tiledb'
version = '0.1.1-SNAPSHOT'
version = '0.2.1-SNAPSHOT'

repositories {
mavenCentral()
Expand Down Expand Up @@ -158,12 +158,10 @@ dependencies {
implementation group: 'org.apache.arrow', name: 'arrow-vector', version: '9.0.0'
implementation group: 'org.apache.arrow', name: 'arrow-compression', version: '9.0.0'
implementation group: 'org.apache.arrow', name: 'arrow-memory-unsafe', version: '9.0.0'
implementation 'io.tiledb:tiledb-java:0.17.2'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testImplementation 'org.mockito:mockito-core:3.12.4'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
testImplementation 'junit:junit:4.13.1'

}

import org.gradle.plugins.signing.Sign
Expand Down
123 changes: 73 additions & 50 deletions src/main/java/examples/Examples.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
package examples;

// Import classes:
import io.tiledb.cloud.TileDBClient;
import io.tiledb.cloud.TileDBUDF;
import io.tiledb.cloud.rest_api.ApiClient;
import io.tiledb.cloud.*;
import io.tiledb.cloud.rest_api.ApiException;
import io.tiledb.cloud.TileDBLogin;
import io.tiledb.cloud.rest_api.api.GroupsApi;
import io.tiledb.cloud.rest_api.api.ArrayApi;
import io.tiledb.cloud.rest_api.model.*;
import jdk.swing.interop.SwingInterOpUtils;
import org.apache.arrow.vector.ValueVector;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import static io.tiledb.cloud.TileDBUtils.serializeArgs;

public class Examples
{
public static void main(String[] args) {
Expand All @@ -24,7 +25,7 @@ public static void main(String[] args) {
TileDBClient tileDBClient = new TileDBClient(
new TileDBLogin(null,
null,
"<TILEDB_API_TOKEN>",
System.getenv("API_TOKEN"),
true,
true,
true));
Expand All @@ -33,19 +34,35 @@ public static void main(String[] args) {
// to pass any credentials from now on. Just create the client as follows:
// TileDBClient tileDBClient = new TileDBClient();

ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());

// Uncomment to run whichever example you want
// runGenericUDF(tileDBClient);
// runArrayUDF(tileDBClient);
// runMultiArrayUDF(tileDBClient);
// getArraySchema(apiInstance);
// createArray(apiInstance);
// registerArray(apiInstance);
// listArrays(apiInstance);
// listGroups(defaultClient);
// deleteArray(apiInstance);
// deregisterArray(apiInstance);
runGenericUDF(tileDBClient);
runArrayUDF(tileDBClient);
runMultiArrayUDF(tileDBClient);
getArraySchema(tileDBClient);
// createArray(tileDBClient);
// registerArray(tileDBClient);
listArrays(tileDBClient);
listGroups(tileDBClient);
// deleteArray(tileDBClient);
// deregisterArray(tileDBClient);
runSQL(tileDBClient);
runSQLArrow(tileDBClient);

}

private static void runSQL(TileDBClient tileDBClient) {
SQLParameters sqlParameters = new SQLParameters();
sqlParameters.setQuery("SELECT * FROM `tiledb://TileDB-Inc/quickstart_sparse`");
TileDBSQL tileDBSQL = new TileDBSQL(tileDBClient, "TileDB-Inc", sqlParameters);
System.out.println(tileDBSQL.exec());
}

private static void runSQLArrow(TileDBClient tileDBClient) {
SQLParameters sqlParameters = new SQLParameters();
sqlParameters.setQuery("SELECT * FROM `tiledb://TileDB-Inc/quickstart_sparse`");
TileDBSQL tileDBSQL = new TileDBSQL(tileDBClient, "TileDB-Inc", sqlParameters);
Pair<ArrayList<ValueVector>, Integer> a = tileDBSQL.execArrow();
}

/**
Expand All @@ -59,11 +76,12 @@ private static void runGenericUDF(TileDBClient tileDBClient){
HashMap<String,Object> arguments = new HashMap<>();
arguments.put("arg1", "a1");
arguments.put("arg2", "a2");
System.out.println(tileDBUDF.executeGeneric(genericUDF, arguments)); //could be JSON or Arrow
genericUDF.setArgument(serializeArgs(arguments));
System.out.println(tileDBUDF.executeGeneric(genericUDF)); //could be JSON or Arrow
}

/**
* Runs an array UDF on a TileDB Arrray
* Runs an array UDF on a TileDB Array
* @param tileDBClient
*/
public static void runArrayUDF(TileDBClient tileDBClient){
Expand All @@ -80,15 +98,18 @@ public static void runArrayUDF(TileDBClient tileDBClient){
queryRanges.addRangesItem(range1);
queryRanges.addRangesItem(range2);


HashMap<String,Object> argumentsForArrayUDF = new HashMap<>();
argumentsForArrayUDF.put("attr", "rows");
argumentsForArrayUDF.put("scale", 9);

MultiArrayUDF multiArrayUDF = new MultiArrayUDF();
multiArrayUDF.setUdfInfoName("TileDB-Inc/array-udf");
multiArrayUDF.setRanges(queryRanges);
System.out.println(tileDBUDF.executeSingleArray(multiArrayUDF, argumentsForArrayUDF, "tiledb://TileDB-Inc/quickstart_sparse", "TileDB-Inc"));
GenericUDF genericUDF = new GenericUDF();
genericUDF.setUdfInfoName("TileDB-Inc/array-udf");
genericUDF.setArgument(serializeArgs(argumentsForArrayUDF));

UDFArrayDetails array = new UDFArrayDetails();
array.setUri("tiledb://TileDB-Inc/quickstart_sparse");

System.out.println(tileDBUDF.executeSingleArray(genericUDF, array, queryRanges, "TileDB-Inc"));
}

/**
Expand Down Expand Up @@ -117,7 +138,7 @@ public static void runMultiArrayUDF(TileDBClient tileDBClient){

//array1
UDFArrayDetails array1 = new UDFArrayDetails();
array1.setUri("tiledb://TileDB-Inc/dense-array");
array1.setUri("tiledb://shaunreed/dense-array");
array1.setRanges(queryRanges);
array1.setBuffers(Arrays.asList("rows", "cols", "a1"));
arrays.add(array1);
Expand All @@ -135,17 +156,19 @@ public static void runMultiArrayUDF(TileDBClient tileDBClient){
arguments.put("attr1", "a1");
arguments.put("attr2", "a");

System.out.println(tileDBUDF.executeMultiArray(multiArrayUDF, arguments));
multiArrayUDF.setArgument(serializeArgs(arguments));

System.out.println(tileDBUDF.executeMultiArray(multiArrayUDF));
}

/**
* Deregister an array
* @param apiInstance
*/
private static void deregisterArray(ArrayApi apiInstance)
private static void deregisterArray(TileDBClient tileDBClient)
{
String namespace = "<TILEDB_NAMESPACE>"; // String | namespace array is in (an organization name or user's username)
String array = "<ARRAY_NAME>"; // String | name/uri of array that is url-encoded
ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());
try {
apiInstance.deregisterArray(namespace, array);
} catch (ApiException e) {
Expand All @@ -159,13 +182,13 @@ private static void deregisterArray(ArrayApi apiInstance)

/**
* Delete an array
* @param apiInstance
*/
private static void deleteArray(ArrayApi apiInstance)
private static void deleteArray(TileDBClient tileDBClient)
{
String namespace = "<TILEDB_NAMESPACE>"; // String | namespace array is in (an organization name or user's username)
String array = "<ARRAY_NAME>"; // String | name/uri of array that is url-encoded
String contentType = "application/json"; // String | Content Type of input and return mime
ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());
try {
apiInstance.deleteArray(namespace, array, contentType);
} catch (ApiException e) {
Expand All @@ -177,17 +200,13 @@ private static void deleteArray(ArrayApi apiInstance)
}
}

/**
* List groups
* @param defaultClient
*/
private static void listGroups(ApiClient defaultClient)
private static void listGroups(TileDBClient tileDBClient)
{
GroupsApi apiInstance = new GroupsApi(defaultClient);
GroupsApi apiInstance = new GroupsApi(tileDBClient.getApiClient());
Integer page = null; // Integer | pagination offset
Integer perPage = null; // Integer | pagination limit
String search = null; // String | search string that will look at name, namespace or description fields
String namespace = "<TILEDB_NAMESPACE>"; // String | namespace
String namespace = "TileDB-Inc"; // String | namespace
String orderby = null; // String | sort by which field valid values include last_accessed, size, name
String permissions = null; // String | permissions valid values include read, read_write, write, admin
List<String> tag = null; // List<String> | tag to search for, more than one can be included
Expand All @@ -208,13 +227,11 @@ private static void listGroups(ApiClient defaultClient)

}

/**
* List arrays
* @param apiInstance
*/
private static void listArrays(ArrayApi apiInstance)
private static void listArrays(TileDBClient tileDBClient)
{
String namespace = "<TILEDB_NAMESPACE>"; // String | namespace array is in (an organization name or user's username)
String namespace = "dstara"; // String | namespace array is in (an organization name or user's username)
ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());

try {
List<ArrayInfo> result = apiInstance.getArraysInNamespace(namespace);
System.out.println(result);
Expand All @@ -228,12 +245,14 @@ private static void listArrays(ArrayApi apiInstance)
}


private static void getArraySchema(ArrayApi arrayApi){
String namespace = "<TILEDB_NAMESPACE>"; // String | namespace array is in (an organization name or user's username)
String array = "<ARRAY_URI>"; // String | name/uri of array that is url-encoded
private static void getArraySchema(TileDBClient tileDBClient){
String namespace = "TileDB-Inc"; // String | namespace array is in (an organization name or user's username)
String array = "quickstart_sparse"; // String | name/uri of array that is url-encoded
String contentType = "application/json"; // String | Content Type of input and return mime
ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());

try {
ArraySchema result = arrayApi.getArray(namespace, array, contentType);
ArraySchema result = apiInstance.getArray(namespace, array, contentType);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ArrayApi#getArray");
Expand All @@ -244,7 +263,7 @@ private static void getArraySchema(ArrayApi arrayApi){
}
}

private static void createArray(ArrayApi arrayApi){
private static void createArray(TileDBClient tileDBClient){
String namespace = "<TILEDB_NAMESPACE>"; // String | namespace array is in (an organization name or user's username)
String arrayName = "s3://<BUCKET-NAME>/my_array"; // String | name/uri of array that is url-encoded //
String contentType = "application/json"; // String | Content Type of input and return mime
Expand Down Expand Up @@ -294,8 +313,10 @@ private static void createArray(ArrayApi arrayApi){
schema.setCellOrder(Layout.ROW_MAJOR);
System.out.println(schema);

ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());

try {
arrayApi.createArray(namespace, arrayName, contentType, schema, null);
apiInstance.createArray(namespace, arrayName, contentType, schema, null);
} catch (ApiException e) {
System.err.println("Exception when calling ArrayApi#createArray");
System.err.println("Status code: " + e.getCode());
Expand All @@ -305,14 +326,16 @@ private static void createArray(ArrayApi arrayApi){
}
}

public static void registerArray(ArrayApi arrayApi){
public static void registerArray(TileDBClient tileDBClient){
String namespace = "<TILEDB_NAMESPACE>"; // String | namespace array is in (an organization name or user's username)
String array = "s3://<BUCKET-NAME>/<ARRAY-URI>/"; // String | name/uri of array that is url-encoded
ArrayInfoUpdate arrayMetadata = new ArrayInfoUpdate(); // ArrayInfoUpdate | metadata associated with array
arrayMetadata.setUri("s3://<BUCKET-NAME>/<ARRAY-URI>/");
arrayMetadata.setName("<ARRAY-NAME>");
ArrayApi apiInstance = new ArrayApi(tileDBClient.getApiClient());

try {
ArrayInfo result = arrayApi.registerArray(namespace, array, arrayMetadata);
ArrayInfo result = apiInstance.registerArray(namespace, array, arrayMetadata);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling ArrayApi#registerArray");
Expand Down
39 changes: 39 additions & 0 deletions src/main/java/io/tiledb/cloud/Pair.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.tiledb.cloud;

public class Pair<F, S> implements java.io.Serializable {
private F first;
private S second;

private Pair() {}

public Pair(F first, S second) {
this.first = first;
this.second = second;
}

public F getFirst() {
return first;
}

public void setFirst(F first) {
this.first = first;
}

public S getSecond() {
return second;
}

public void setSecond(S second) {
this.second = second;
}

/**
* Returns an empty Pair
*
* @return The Pair
*/
public static Pair empty() {
return new Pair();
}
}

2 changes: 0 additions & 2 deletions src/main/java/io/tiledb/cloud/TileDBLogin.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package io.tiledb.cloud;

import java.util.Objects;

public class TileDBLogin {
/** The client password */
private String password;
Expand Down
Loading