Cloud ETL
AWS Glue
For visual jobs there is no file. The DAG is service state, read through GetJob.
A Glue job built in the visual editor has no file anywhere. The graph — sources,
transforms and targets — is stored by the Glue service in the job's
CodeGenConfigurationNodes, created through a console UI. There is nothing in your
repository to parse, and nothing was omitted; the repository was never involved.
Script jobs are different but not much better: the code lives in S3 at
Command.ScriptLocation, which may or may not have been deployed from source
control, and may have been edited in the console since.
What Decim reads from AWS Glue
Every item below is read-only, and each is a specific view, endpoint or file rather than a category of access. If something here is unacceptable in your environment, it can be removed from the query catalogue — see the agent for how that works.
| What | From | Why it matters |
|---|---|---|
| Visual job graph | GetJob → CodeGenConfigurationNodes | The actual DAG for visual jobs — nodes and their connections |
| Script location | GetJob → Command.ScriptLocation | The S3 path holding the executed code |
| Job parameters | GetJob → DefaultArguments | Bookmarks, connections and job-level settings |
| Run history | GetJobRuns | State, duration, DPU seconds and error message per run |
| Table structure | Glue Data Catalog | Schemas and partitions for catalog-backed tables |
| Bookmarks | GetJobBookmark | How far a job believes it has processed |
| Triggers | GetTriggers | What starts a job — schedules and conditional chains |
Permissions required
Written out in full, because "read-only access" is not a specification. Nothing below grants the ability to write, and row access is requested only on the specific tables you name.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GlueRead",
"Effect": "Allow",
"Action": [
"glue:GetJob", "glue:GetJobs", "glue:GetJobRun", "glue:GetJobRuns",
"glue:GetJobBookmark", "glue:GetTrigger", "glue:GetTriggers",
"glue:GetDatabase", "glue:GetTables", "glue:GetTable",
"glue:GetPartitions"
],
"Resource": "*"
},
{
"Sid": "ScriptRead",
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::aws-glue-scripts-*/*"
}
]
} What it builds
What this source contributes to the pipeline topology and to the evidence available during an investigation:
- Complete visual job topology that exists in no file
- Trigger chains — the control edges between jobs
- Run outcomes, durations and DPU consumption for anomaly detection
- Bookmark position, which explains a job that processed nothing
Nodes learned from a definition are marked declared; nodes observed running are marked observed; nodes both declared and observed are verified. Where two sources disagree, the disagreement is recorded as a drift note rather than resolved silently.
Failure modes it surfaces
What this source is uniquely good at proving — and, just as usefully, at disproving. An investigation that can refute a hypothesis cheaply is worth as much as one that confirms it.
| Failure mode | The signal |
|---|---|
| Job processed nothing | Bookmark already past the data, so the run is a no-op |
| Job edited in the console | Job definition differing from the deployed script |
| Trigger disabled | A chain that stops with no failure anywhere |
| Partition not registered | Data in S3 that the catalog does not know about |
Limits
What this integration cannot tell you. Stated because an investigation that overstates its sources produces confident wrong answers, which is worse than an honest blocked.
- Script jobs put the real logic in S3, so the script must be readable to reason about transforms
GetJobRunsretains roughly 90 days of history- Continuous logging to CloudWatch is opt-in; without it, a failed run's detail may be limited to its error message
Related integrations
- Azure Data Factory — Pipeline JSON lives in the factory unless git integration is enabled — and live mode is the default.
- Databricks — Jobs API for run history and task graphs; system tables for lineage and query history.
- Amazon Redshift — STL_LOAD_ERRORS is the reject table you already have and probably never query.
See all integrations, or how the sources are combined into one graph.
Get started
Investigating a AWS Glue pipeline?
Bring an incident you already know the answer to. If Decim gets it wrong, that is a more useful demo than one where it doesn't.