NetSuite (SuiteAnalytics Connect)
Run heavy analytical SQL against NetSuite via SuiteAnalytics Connect over JDBC — read-only, with full server-side pushdown including window functions, CTEs, lateral joins, HAVING, set operations, and regex and JSON functions.
NetSuite (SuiteAnalytics Connect) is the high-fidelity analytical path into NetSuite (bundle version 2.0.8, sharing the NetSuite bundle with the REST adapter). It connects over JDBC to Oracle's SuiteAnalytics Connect service and exposes a rich SQL surface that far exceeds the REST SuiteQL endpoint. Use it when you need window functions, CTEs, HAVING, complex joins, or analytical aggregations — and you do not need to write back to NetSuite.
This page is for data and platform engineers configuring a Nexus bridge to NetSuite for reporting and analytics. It covers when to choose Connect over REST, authentication, the exact pushdown surface, the JDBC sidecar requirement, and the limits you should plan around. For the general shape of JDBC connectivity in Nexus, see Generic JDBC — SuiteAnalytics Connect is a NetSuite-specific, credential-derived instance of that same JDBC substrate.
When to use this adapter
| Scenario | Adapter to use |
|---|---|
Heavy analytical SQL: windows, CTEs, lateral joins, HAVING, set ops |
SuiteAnalytics Connect (this adapter) |
| Mixed reads and writes, or simple structured queries | NetSuite (REST / SuiteQL) |
| Creating, updating, deleting, or merging NetSuite records | NetSuite (REST / SuiteQL) |
SuiteAnalytics Connect is read-only. If your workflow requires writing back to NetSuite, pair this adapter with the NetSuite REST adapter: Connect for reporting, REST for record operations. Because both use the same credentials, this is a routing decision, not a second integration.
Authentication
The adapter authenticates with OAuth 1.0a Token-Based Authentication (TBA). You supply five credential values when configuring the bridge; all five are stored in your tenant's Azure Key Vault.
| Secret field | Description |
|---|---|
account_id |
Your NetSuite account identifier |
consumer_key |
Integration record consumer key |
consumer_secret |
Integration record consumer secret |
token_id |
Access token ID |
token_secret |
Access token secret |
The adapter derives a TBA-signed JDBC password from these values at query time. The signed credential is computed per connection and is never logged or persisted outside the request lifecycle — Nexus stores only the five source secrets, not the derived password. See Secrets for how credential material is held and rotated.
SQL pushdown capabilities
SuiteAnalytics Connect supports a substantially richer SQL feature set than the SuiteQL REST surface, and the adapter pushes the full query down to NetSuite rather than fetching rows and filtering in the engine. Because Connect declares full pushdown across these dimensions and its operators are pushable, the Nexus engine does not re-apply your WHERE or re-aggregate in memory — the work runs on the Connect server.
| Feature | Supported |
|---|---|
WHERE filters ($eq, $gt, $lt, $like, $in, $between, and more) |
Yes |
GROUP BY, ORDER BY, HAVING, DISTINCT |
Yes |
Aggregations: SUM, COUNT, AVG, MIN, MAX, STDDEV, VARIANCE, MEDIAN, PERCENTILE_CONT, LISTAGG |
Yes |
Window functions (ROW_NUMBER, RANK, FIRST_VALUE, LAST_VALUE, …) |
Yes |
Common table expressions (CTEs / WITH) |
Yes |
| Lateral joins | Yes |
| Subqueries | Yes |
CASE expressions |
Yes |
| Regex functions | Yes |
| JSON functions | Yes |
Set operations: UNION, UNION ALL, INTERSECT, MINUS |
Yes |
| Writes (insert / update / delete / merge) | No |
Supported filter operators
$eq $ne $gt $gte $lt $lte $like $in $not_in $between $empty $contains $starts_with $ends_with $expr
$expr passes a raw SQL fragment directly into the WHERE clause and is intended for expressions the structured operator set cannot represent. It is a trusted-author surface — treat report and pipeline authorship accordingly, and bound it with execution roles.
Example: ranking customers by open balance
This query uses a window function to rank customers by outstanding balance within each currency bucket — not expressible via the SuiteQL REST endpoint.
async def run(ctx):
rows = await ctx.adapters["netsuite-connect"].read(
container="CONNECT",
collection="transaction",
select_expressions=[
"entity",
"currency",
"SUM(foreignamount) AS total_open",
"RANK() OVER (PARTITION BY currency ORDER BY SUM(foreignamount) DESC) AS balance_rank",
],
where={"type": {"$eq": "Invoice"}, "status": {"$eq": "open"}},
group_by=["entity", "currency"],
)
return ctx.result(rows=rows)
The equivalent as a raw CTE-based query in a saved report, passed through $expr:
WITH open_invoices AS (
SELECT entity, currency, SUM(foreignamount) AS total_open
FROM transaction
WHERE type = 'Invoice' AND status = 'open'
GROUP BY entity, currency
)
SELECT entity, currency, total_open,
RANK() OVER (PARTITION BY currency ORDER BY total_open DESC) AS balance_rank
FROM open_invoices
ORDER BY currency, balance_rank
Because Connect is read-only, a full read-plus-write workflow lands the Connect result in the built-in workspace or writes back through the REST adapter — Connect itself never mutates NetSuite.
Infrastructure requirement: the JDBC sidecar
SuiteAnalytics Connect communicates over JDBC. Nexus routes JDBC traffic through a driver sidecar — a co-deployed process that handles the driver protocol on localhost. The sidecar is an opt-in component that is not started by default:
- If the sidecar is not running, Nexus will not load this adapter (fail-closed), and the bridge is simply unavailable.
- The NetSuite REST adapter (HTTPS, no sidecar) remains available regardless, so a deployment without the sidecar still has a working NetSuite path for reads and writes.
- Enabling the sidecar is a deployment-configuration change made by your operator. See Generic JDBC for the shared sidecar and driver model.
Schema discovery
Discovery for SuiteAnalytics Connect returns the CONNECT container. Field-level metadata is provided by the companion NetSuite REST adapter, which has access to the same account and produces a unified schema view. In practice you can reference any table the Connect SQL surface exposes — the standard NetSuite record types plus any custom record types your account exposes.
Limits & behavior notes
- Read-only, always. There is no write path on this adapter. Writability is not a per-collection gate here — the entire surface is read-only by design.
- Sidecar is a hard dependency. No sidecar means no adapter. Plan deployments that rely on Connect to enable it explicitly.
- Governance is NetSuite's. SuiteAnalytics Connect concurrency limits and per-account seat/session governance are enforced by NetSuite/Oracle, not Nexus. Very large extractions are still subject to those service limits.
- Long queries are bounded by the run timeout. An analytical query inside a pipeline is bounded by the per-run wall-clock timeout; size heavy jobs accordingly or stage intermediate results in the workspace.
- Credentials are shared with REST. The same five TBA secrets drive both adapters. Rotating them rotates both surfaces at once.
Choosing between Connect and REST SuiteQL
The REST SuiteQL adapter is the right default for most read/write workflows. Choose SuiteAnalytics Connect when:
- You need window functions, CTEs, lateral joins,
HAVING, or analytical aggregations. - You are building a reporting or analytics pipeline that does not write back to NetSuite.
- Query performance matters and you want the full SQL optimizer available on the Connect surface.
Both adapters use the same TBA credentials and can be active on the same bridge simultaneously, so route read-heavy analytical queries to Connect and record operations to REST without duplicating your credential setup.
See also
- NetSuite (REST / SuiteQL) — the read/write REST surface
- Generic JDBC — the shared JDBC driver/sidecar substrate
- Built-in workspace — stage Connect results for downstream joins
- Connectors overview · Operators & pushdown reference
- Secrets · Execution roles