Create custom OpenLineage extractors for Airflow operators. Use when the user needs lineage from unsupported or third-party operators, wants column-level lineage, or needs complex extraction logic beyond what inlets/outlets provide.
88
82%
Does it follow best practices?
Impact
97%
1.29xAverage score across 3 eval scenarios
Passed
No known issues
Custom extractor for third-party operator
Inherits BaseExtractor
100%
100%
get_operator_classnames implemented
100%
100%
_execute_extraction implemented
100%
100%
Local imports only
0%
50%
SFTP namespace format
100%
100%
S3 namespace format
100%
100%
self.operator property access
100%
100%
None handling
0%
100%
OperatorLineage return
100%
100%
airflow.cfg registration
100%
100%
Env var registration
33%
100%
OpenLineage methods on owned operator
No extractor class
100%
100%
get_openlineage_facets_on_start
100%
100%
get_openlineage_facets_on_complete
100%
100%
Output statistics facet
100%
100%
Local imports in methods
0%
100%
Postgres namespace format
100%
100%
OperatorLineage import path
100%
100%
Dataset import path
100%
100%
Source and target in on_start
100%
100%
Dynamic lineage and extractor unit tests
_execute_extraction present
0%
100%
extract_on_complete present
100%
100%
get_operator_classnames implemented
100%
100%
Source dataset in _execute_extraction
25%
100%
Dynamic outputs in extract_on_complete
100%
100%
None guard in _execute_extraction
25%
100%
Redshift namespace format
100%
100%
Tests use MagicMock for operator
100%
100%
Test pre-run extraction
25%
100%
Test post-run extraction
100%
100%
Test None case
25%
100%
Local imports in extractor
0%
0%
535a040
Table of Contents
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.