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:

OData URL Format
http://<host>:8052/odata/v4/<table_name>

For example, to access a table called sensors running locally:

Example URL
http://localhost:8052/odata/v4/sensors

The OData service document (listing all available tables) is at:

Service Document
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 Header
Authorization: Bearer st_od_abc123...

Generate an OData token through the API or the web UI:

Generate OData Token
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

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

  1. Open Power BI Desktop
  2. Click Get DataOData Feed
  3. Enter the URL: http://your-host:8052/odata/v4/sensors
  4. Under Authentication, select Organizational account or Basic
  5. Enter your OData token as the password (leave username blank or enter token)
  6. 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

  1. Open Excel and go to Data tab
  2. Click Get DataFrom Other SourcesFrom OData Feed
  3. Enter the OData URL and authenticate with your token
  4. Select the table and click Load

Connecting Tableau

  1. Open Tableau and select OData under ConnectTo a Server
  2. Enter the server URL: http://your-host:8052/odata/v4/
  3. Select Username and Password authentication
  4. Enter token as the username and your OData token as the password
  5. Select the desired tables from the data source

Performance Considerations

  • Query folding: The OData engine pushes $filter, $select, $top, and $orderby down to the Data Island query engine for optimal performance.
  • Pagination: Large result sets are automatically paginated. Clients follow @odata.nextLink to 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.

Next Steps