General Statements
All the general OpenDataDSL statement commands
api-key
Command to manage your user API Keys
Syntax
apikey: api-key (create (start="string")? (expires="string")? |delete) "name";
Description
An API Key is used as a password to authenticate you in OpenDataDSL from an external application that cannot use OAUTH2 or Azure Active Directory.
Explanation of the syntax
- The name is a string that is used to identify what you are going to use the key for
- The create directive creates a key
- You can add an optional start date for the key
- You can add an optional expires date for the key
- The delete directive deletes (revokes) the named key
After running the create command, the key is output into the debug console, make sure you copy the key as this is the only time you will see it.
Examples
Create a key that starts now and never expires
api-key create "mykey"
Create a key that starts and a date and expires
api-key create start="2024-05-01" expires="2024-12-31T23:59:59" "mykey"
Revoke a key
api-key delete "mykey"
List all your keys
print ${user:"me"}.keys
import
Imports functions from a script into the current script
Syntax
import ${script:"name"}
Description
The import command gets the named script from the script service and makes all the user defined functions in that script available in your current script.
Example
If we have a script with a function, e.g. this functions.odsl script saved in the server:
// functions.odsl
function agricultural(input)
// Agricultural curve forward filled and extended to end of 3 years
filled = forwardFillCurve(input)
extended = extendCurve(filled, 3)
agricultural = shape(extended)
end
We can import that script and call the agricultural function, e.g.
// Import the functions we defined in functions.odsl
import ${script:"functions"}
inputcurve = ${data:"inputcurve"}
curve = agricultural(inputcurve)
log
Outputs a message to the console and to a process execution log
Syntax
log LEVEL message
Description
If the script is running in a process, the message is output into the process execution log. The message is also output to the console.
The LEVEL option allows you to specify the log level of the message from one of:
- debug
- info
- warn
- fatal
Examples
log debug "This is a debug message"
log info "This is an info message"
log warn "This is a warning message"
log fatal "This is a fatal message"
a = 12.2
log debug "The value is " + a
logout
Used to log out the current user
Syntax
logout
Description
This command is used in a script to log out the current user
onerror
Determines how errors are handled
Syntax
on error (exit|ignore)
Description
The on error statement instructs OpenDataDSL on how you want to handle errors. You have 2 options:
- exit - this is the default action which stops the currently running script and outputs the error message
- ignore - this option doesn’t stop the script running, but it places the error message into a scalar variable called error
Examples
Using on error exit:
on error exit
// Create a date variable
d = Date()
// Call an unknown method that will force throwing an error
print d.unknown()
Using on error ignore:
on error ignore
// Create a date variable
d = Date()
// Call an unknown method that will force throwing an error
print d.unknown()
// Script continues and we can see the error message in the variable called error
print error
pause
Pauses execution of a script for a certain amount of time
Syntax
pause number ('second'|'seconds'|'minute'|'minutes'|'hour'|'hours')
Description
Pauses execution of a script
Examples
pause 10 seconds
pause 1 minute
print
Prints a message to the console
Syntax
print message
Description
The print command prints a message to the console. The message can be a string, variable or expression.
Examples
a = "example"
print a
example
print "This is an " + a
This is an example
return
Terminates the currently running script and returns a variable
Syntax
return expression
Description
The return statement terminates running of a script and returns a variable to the calling application
Examples
return "Finished"
run
Runs a process remotely
Syntax
run processname (with input)? (log reason)? (in delay TIMEUNIT)?
Description
The run command remotely triggers a manual run of a process. You can optionally provide a variable with input run parameters, a reason log message that will be added to the audit log and a delay for when to run the process.
Options
With input
You can optionally provide a variable with some input information which will override or provide specific context to the process, e.g.
// Run a curve
ondate = Object()
ondate.date = "2021-04-26"
run CURVE_TEST with ondate
Log reason
You can optionally give a reason for manually triggering a process, this will be logged in the audit log
In delay
You can optionally delay the starting of the process, e.g.
run MY_PROCESS in 1 hour
The timeunit parameter can be one of:
- second
- seconds
- minute
- minutes
- hour
- hours
send
Send a batch of objects to a message queue
Syntax
send variable (to queue)? (size INT)? (-noevent)?
Description
The send command sends a batch variable to a message queue in order to be processed by either the data loader or an external application.
If no queue name is specified, the batch is sent to your default queue.
Options
TO queue
You can optional specify the name of the queue to send the batch to.
SIZE INT
You can override the default number of items sent per message using the size command
-noevent
Add this option if you don’t want to trigger downstream processes, exports etc. from the sending of this message. This would be usually done if you are back-filling some historic data and only require that the data is added.
Examples
// Create a batch
batch=PROCESS.createBatch()
// Add some objects to the batch
...
// Send to the default queue
send batch
// Send the batch to the queue named 'myqueue'
send batch to myqueue
// Send the batch to the queue in batches of 10 objects at a time
send batch size 10
// Send the batch to update but not trigger downstream events
send batch -noevent
set
Used to set a session option
Syntax
set (precision INT|
rounding ROUNDING_METHOD|
missing (ignore|number)?|
crs (earth|planar)|
observed (default|beginning|end|averaged|summed|high|low|delta)|
distribution (none|constant|linear|cubic)|
autoscale (on|off)|
credentials for source as user password|
auto_follow_references (true|false)|
while_limit number
)
Description
The set command is used to set an option within the current script session. The following options are supported:
- decimal precision
- rounding method
- missing value treatment
- coordinate reference system
- timeseries scaling methods
- credentials for interacting with external systems
- options for following referenced data
- while loop iteration limit
Setting decimal precision
The decimal precision determines the number of decimal places to use with real numbers, e.g.
set precision 2
Sets the decimal places to 2 for all numbers
Setting the rounding method
The rounding method determines how numbers are rounded when shortening to meet the decimal precision value, you can select from one of the following methods:
- ceiling
- down
- up
- floor
- half_down
- half_up
Setting missing value treatment
Missing values can affect the way calculations are performed and therefore you can set the way that you want missing values to be treated. You can instruct ODSL to ignore missing values using the statement:
set missing ignore
Or you can tell ODSL to use a specific value to replace missing values, e.g. if you are summing up a list of values, you can set missing as 0 so that it would not take them into account.
Setting the coordinate reference system (CRS)
You can set the CRS to either:
- earth
- planar
This affects the way geospatial data is handled
Timeseries scaling methods
There are 3 set commands which allow you to define how timeseries are scaled:
- autoscale on|off
By default, all timeseries are autoscaled once they reach a certain threshold in terms of number of observations. You can turn this off using the following command:
set autoscale off
See this page for more information on autoscaling.
observed (default|beginning|end|averaged|summed|high|low|delta)
This defines how numbers are aggregated when a timeseries is scaled from high frequency e.g. hourly to a lower frequency e.g. daily
See this page for more information on the observed setting.
distribution (none|constant|linear|cubic)
This defines how numbers are distributed when a timeseries is scaled from low frequency e.g. daily to a higher frequency e.g. hourly
See this page for more information on the distribution setting.
Credentials
If you need to define personal credentials to an external system that the OpenDataDSL platform interacts with you use the set credentials command. This securely stores the credentials in an Azure Vault and only uses them when needed to interact with the external system.
Automatically follow references
This command enables or disables automatically retrieving the underlying data from a referenced entity.
For example, if we take the master data record #ABN_FX.EURAED
, it has a SPOT reference to the SPOT timeseries data.
In the following example (the default), the information output is the actual timeseries data.
set auto_follow_references true
o = ${object:"#ABN_FX.EURAED"}
print o.SPOT
In this example, the information output is the information about the reference link
set auto_follow_references false
o = ${object:"#ABN_FX.EURAED"}
print o.SPOT
While loop iteration limit
While loops can iterate infinitely causing performance issues, so we have an artificial limit on while loops of 1000
iterations.
If this limit is reached, a 6036 While loop iteration
exception is thrown.
You can override the 1000 iterations limit using the set while_limit command, e.g.
set while_limit 100
trigger
Used to manually trigger a subscription
Syntax
trigger name for date
Description
The trigger command is used to manually trigger a subscription. Subscriptions are usually triggered by an a new data event, but you can also manually trigger a subscription for a specific date using this command.
Example
// Trigger the subscription called test for the 11th June 2021
trigger test for 2021-06-11
use
Instructs OpenDataDSL to use a specific named environment
Syntax
use environmentname
Description
You can create multiple environments such as dev and test which are separate from your production environment, this command instructs OpenDataDSL that from this point it should use that named environment for the rest of the running script.
NOTE: For more information on environments - see here
Example
If you have created an environment called test, you can use it with the following command:
use test