OData Integration
Data Island exposes an OData 4.0 compliant endpoint that lets you connect Power BI, Excel, Tableau, and any other BI tool that supports OData directly to your tables. No ETL, no data movement, no copy.
What is OData?
OData (Open Data Protocol) version 4.0 is an ISO/IEC approved OASIS standard that defines a set of best practices for building and consuming RESTful APIs. BI tools use it as a universal connector to read data from external sources.
Why OData: It is the most widely supported data feed protocol across enterprise BI tools. One endpoint serves Power BI, Excel, Tableau, Qlik, SSAS, and more.
Endpoint URL
Each table is exposed as a separate OData entity set. The URL pattern is:
http://<host>:8052/odata/v4/<table_name>
For example, to access a table called sensors running locally:
http://localhost:8052/odata/v4/sensors
The OData service document (listing all available tables) is at:
http://localhost:8052/odata/v4/
Authentication
OData endpoints use bearer token authentication. OData tokens are prefixed with st_od_ to distinguish them from regular API tokens.
Authorization: Bearer st_od_abc123...
Generate an OData token through the API or the web UI:
curl -X POST http://localhost:8050/api/rbac/odata-tokens \
-H "Authorization: Bearer st_tok_..." \
-H "Content-Type: application/json" \
-d '{"name": "power-bi-reader", "tables": ["sensors", "events"]}'
Security: OData tokens are scoped to specific tables. Always use the principle of least privilege and grant access only to the tables the BI tool needs.
Supported Query Options
The OData endpoint supports the following query parameters for server-side filtering and pagination.
| Option | Example | Description |
|---|---|---|
$filter |
$filter=temperature gt 25 |
Filter rows using OData filter expressions |
$select |
$select=sensor_id,temperature |
Select specific columns (projection) |
$orderby |
$orderby=timestamp desc |
Sort results by one or more columns |
$top |
$top=100 |
Limit the number of returned rows |
$skip |
$skip=200 |
Skip a number of rows (for pagination) |
$count |
$count=true |
Include total row count in the response |
Filter Examples
# Numeric comparison
$filter=temperature gt 25 and humidity lt 60
# String matching
$filter=contains(sensor_id, 's-001')
# Date filtering
$filter=timestamp gt 2026-01-01T00:00:00Z
# Combined with select and ordering
?$filter=temperature gt 20&$select=sensor_id,temperature&$orderby=temperature desc&$top=50
Connecting Power BI
- Open Power BI Desktop
- Click Get Data → OData Feed
- Enter the URL:
http://your-host:8052/odata/v4/sensors - Under Authentication, select Organizational account or Basic
- Enter your OData token as the password (leave username blank or enter
token) - Click Connect and load the data
Tip: Power BI will generate $filter and $select parameters automatically based on your report filters and selected columns, enabling server-side query folding.
Connecting Excel
- Open Excel and go to Data tab
- Click Get Data → From Other Sources → From OData Feed
- Enter the OData URL and authenticate with your token
- Select the table and click Load
Connecting Tableau
- Open Tableau and select OData under Connect → To a Server
- Enter the server URL:
http://your-host:8052/odata/v4/ - Select Username and Password authentication
- Enter
tokenas the username and your OData token as the password - Select the desired tables from the data source
Performance Considerations
- Query folding: The OData engine pushes
$filter,$select,$top, and$orderbydown to the Data Island query engine for optimal performance. - Pagination: Large result sets are automatically paginated. Clients follow
@odata.nextLinkto retrieve additional pages. - Concurrency: Multiple BI tools can connect simultaneously. Each connection is rate-limited independently.
- Caching: Frequently accessed queries are cached at the OData gateway layer. Cache TTL is configurable per table.