Code Samples
Using Polybase database
To use the Polybase database you can either use the default one that the data programs team has created or you can choose to read from a different one. To use the default database you will need the following import.
import {DB} from "@dataprograms/repdao-polybase";
To read from a different database you will have to add the below where NAME_SPACE
is the name of the space you want to use.
import { Polybase } from "@polybase/client"
const db = new Polybase({ defaultNamespace: "NAME_SPACE" });
The following examples will use the default Polybase database provided. It should also be noted that results are paginated and the developer is responsible for paging through the results if 100 rows is not enough.
Code Samples
Filtering by single column value in single collection
Example is getting one row where the provider is f01889512
in the filfox
collection. Currently filtering and sorting on multiple columns is not supported because you have to create an index on the columns to support multiple where statements. see doc.
import {DB, filfox} from "@dataprograms/repdao-polybase";
const provider = 'f01889512'
const doc = (await DB.collection('filfox')
.where('provider', '==', provider)
.limit(1).get())
.data[0].data as filfox
console.log(`Filfox record for ${provider}: total rewards: ${doc.totalRewards}`)
You can however have multiple where statements on the same column name.
import {DB, filfox} from "@dataprograms/repdao-polybase";
const doc = (await DB.collection('filfox')
.where('provider', '>', 'f01889512')
.where('provider', '<=', 'f01889612')
.limit(1).get())
.data[0].data as filfox
console.log(doc)
console.log(`Filfox record has total rewards: ${doc.totalRewards}`)
Iterating over all the provided collections
import {PolybaseError } from "@polybase/client"
import {DB, CollectionNames} from "@dataprograms/repdao-polybase";
for (const collectionName of CollectionNames) {
let response
try {
response = await DB.collection(collectionName).limit(1).get()
console.log(`Data for polybase collection ${collectionName}`)
console.log(response.data[0].data)
} catch (e: any) {
if (e instanceof PolybaseError) {
console.error(`Polybase error: ${e.code} ${e.message} when retrieving ${collectionName}.`)
continue
}
throw e
}
}
Sorting column to find max or min
This example finds the max epoch
that is less than 2849899
in the filfox
collection.
import {DB, filfox} from "@dataprograms/repdao-polybase";
const doc = (await DB.collection('filfox')
.where('epoch', '<', 2849899)
.sort('epoch', 'desc')
.limit(1).get())
.data[0].data as filfox
console.log(doc)
console.log(`Filfox record: ${doc.provider}`)
Using sort and limit to find the top n
This example finds the 2 largest epoch
values that are less than 2849899
in the filfox
collection.
import {DB, filfox} from "@dataprograms/repdao-polybase";
const doc = (await DB.collection('filfox')
.where('epoch', '<', 2849899)
.sort('epoch', 'desc')
.limit(2).get()) // 2 is n
doc.data.forEach(e => {
console.log(e.data as filfox )
})
Finding rows X days ago
Each collection has a column called date_stamp
that can be used to search for rows before, after or between given dates.
// This example won't work with the current private key
// in the repo because date stamp was added after
import {PolybaseError } from "@polybase/client"
import { DB, CollectionNames} from "@dataprograms/repdao-polybase";
for (const collectionName of CollectionNames) {
let response
try {
let daysToLookBack = 2 //X
response = await DB.collection(collectionName)
.where("date_stamp", ">=",
(new Date(new Date().getTime() - (daysToLookBack * 24 * 60 * 60 * 1000)))
.toISOString().substring(0,10)).sort("date_stamp", "asc").limit(2).get();
console.log(`Data for polybase collection ${collectionName}`)
response.data.forEach(element => {
console.log(element.data)
});
} catch (e: any) {
if (e instanceof PolybaseError) {
console.error(`Polybase error: ${e.code} ${e.message} when retrieving ${collectionName}.`)
continue
}
throw e
}
}
Last updated