Lineage and graph APIs
Use SQLINK_BASE_URL=https://<host>/sqlink for lineage and GRAPH_BASE_URL=https://<host>/graph for cross-object graphs. Lineage explains origins, transformations, and dependencies. A graph can also contain standards or asset associations; not every edge represents computational lineage.
SQLink queries
| Method and complete path | Inputs | Result |
|---|---|---|
POST /sqlink/item/searchItems | Body itemName, folderId, String modelId, String typeId, currentPage, pageSize | content, totalItems |
POST /sqlink/lineageGraph/query | Body String id, queryType, direction, depth, hasTemp | nodes, relationships |
POST /sqlink/lineageGraph/getTransform | Query Boolean isGraph, default true; graph conditions body | startIds, endId, transforms, lineageId, etc. |
POST /sqlink/lineageGraph/getImpact | Body id, direction, depth, resourceTypes | Impact objects with identity, type, namespace, direction |
Map source system, source, schema, table/field, and SQLink node ID explicitly. Numeric metadata IDs do not substitute for node IDs.
Assess a field change before release
- Locate the corresponding SQLink node and confirm recent harvesting and parsing.
- Query downstream with
FORWARD, explicit depth, and type constraints. - Read transformations and verify expressions and connecting nodes.
- Generate an impact list for business owner review.
- Reharvest, parse, and verify key paths after the change.
Example impact body with a placeholder ID:
{
"id": "example-sqlink-node-id",
"queryType": "COLUMN",
"direction": "FORWARD",
"depth": 3,
"resourceTypes": ["TABLE", "COLUMN", "REPORT"],
"hasTemp": false
}Common direction values are FORWARD, BACKWARD, and ALL; types can include SCHEMA, TABLE, COLUMN, REPORT, REPORT_COLUMN, and FILE. Actual enums may be narrower. Confirm the deployed contract, especially differences from the legacy SQLink reference.
Missing downstream results may reflect incomplete harvesting, parsing, depth, filters, or permissions rather than no impact.
Optional graph and unified asset access
Confirm these deployment-dependent capabilities. Path v1/v2 labels are API names, not product release claims. If unavailable, use the appropriate business service without assuming automatic fallback.
| Method and complete path | Inputs | Result |
|---|---|---|
POST /graph/graph/v2/nodes/search | keyword, typeId, page, size | content, total; confirm page origin |
POST /graph/graph/v2/relations/query | typeId, String objectId, sourceSystem, layers, scope | nodes, relations, lastUpdateTime, truncated |
POST /graph/asset-access/v1/discovery/search | query, typeIds, limit, cursor, scope | items, nextCursor, hasMore |
POST /graph/asset-access/v1/context/resolve | Array assetKeys, profile | results; inspect each item |
Pass the complete returned assetKey unchanged:
{
"assetKeys": [{
"sourceSystem": "<sourceSystem from search result>",
"typeId": 123,
"objectId": "<objectId from search result>"
}]
}Replace all placeholders, including type ID. Valid profile, scope, and scope types are not fully enumerated; obtain confirmed values. truncated=true means an incomplete relationship set. Follow nextCursor rather than constructing tokens. Retain available sourceVersion and sourceUpdatedAt for freshness.
DIG boundaries
Reading graphs is separate from publishing a DIG space MCP. Use context publishing to expose a governed, accepted business scope. Direct graph queries do not grant space documents, approvals, or knowledge access. The source guide checked definitions without parsing, modifying graphs, rebuilding projections, or publishing; validate business output with known deployment samples.
Parser plugin call chain
New job formats use SQLink Parser SPI plugins rather than ordinary REST controllers. REST handles upload, parsing, and queries; the plugin produces LineageContainer, steps, and relationships.
| Method and complete path | Purpose |
|---|---|
POST /sqlink/lineage/getLineageParseEngines | Installed typeName, descriptions, plugin information |
POST /sqlink/lineage/uploadLineageFile | Form lineageEngine, objectType, file, folderId, defaultSchema, parse |
POST /sqlink/lineage/parseLineage | lineageIds, status, onlyFailed, incrementalParsing |
POST /sqlink/task/getTaskParseDetail | Progress, errors, missing tables |
POST /sqlink/lineage/getLineageTableByPage | Parsed tables and state |
POST /sqlink/lineage/getLineage | File and parsing details |
POST /sqlink/lineageGraph/getTransform | Transformation logic |
POST /sqlink/lineageGraph/getImpact | Impact |
| Plugin | Manifest | Input |
|---|---|---|
| WhaleTunnel | type=WHALETUNNEL, loadClass=com.datablau.sqlink.plugin.seatunnel.WhaleTunnelLineageParser, build=1.0.0, .json | whaletunnel.job_config, exportData source/transform/sink; datasource_name, source_table_name, result_table_name |
| Apache SeaTunnel | type=SEATUNNEL, loadClass=com.datablau.sqlink.plugin.seatunnel.SeatunnelLineageParser, build=1.0.0, .json | seatunnel.job_config, plugin_name, input/output, table_path, SQL, CTEs, aliases, transformations |
Depend on SPI and standard output objects rather than copying JAR implementation. Report unsupported tasks clearly instead of creating misleading partial lineage. Supply default schema explicitly or use the supported DEFAULT_SCHEMA.
Query a complete table path
POST /sqlink/llm/getLineageOfTables requires namespace, schema, and table:
{
"namespace": "<catalog-or-source>",
"schema": "sales",
"table": "customer",
"direction": "ALL"
}Use supported FORWARD, BACKWARD, or ALL. Retain full paths, node types, and source systems. A table name alone is ambiguous across sources and schemas.
