From oracle-ai-data-platform-workbench-engineer-agent
Federates across multiple data sources (Oracle ADB/ExaCS, Fusion, Snowflake, S3, lakehouse tables) in one AIDP Spark session, enabling cross-source joins and analysis. Composes the spark-connectors plugin for source reads.
How this skill is triggered — by the user, by Claude, or both
Slash command
/oracle-ai-data-platform-workbench-engineer-agent:aidp-federateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Blend multiple sources by reading each into one Spark session and joining them — a signature differentiator
aidp-federate — cross-source federation in one Spark sessionBlend multiple sources by reading each into one Spark session and joining them — a signature differentiator
(competitor agents degrade on foreign tables or need an external orchestrator + manual key-joins). Execution
is via the bundled scripts/aidp_sql.py helper (no MCP, no AIDP_SESSION required).
aidp-<source> skill (step 1) — this
skill just adds the join. Never hand-roll the source connection. (Check the spark-connectors plugin is
installed via claude plugin list; run its aidp-connectors-bootstrap skill once to push the
oracle_ai_data_platform_connectors helper package to /Workspace/Shared — via the AIDP MCP, or manually
if the MCP can't reach the instance.)oracle-ai-data-platform-workbench-spark-connectors (e.g. aidp-alh/aidp-oracle-db/aidp-exacs,
aidp-fusion-bicc/aidp-fusion-rest, aidp-snowflake, aidp-aws-s3, aidp-object-storage, …) to get
the spark.read.format(...).option(...).load() recipe for each source. This skill does not re-implement
connectors.spark.sql(...) the join — all in the same Spark session created by the helper. Use
join keys from .aidp/semantic.md / .aidp/catalog.md (don't guess). The helper mints a UPST from the
api_key DEFAULT profile and auto-creates a scratch notebook on the target cluster:
python "$PLUGIN_DIR/scripts/aidp_sql.py" \
--region <region> --datalake <DATALAKE_OCID> --workspace <ws> --cluster <cluster-key> \
--code "
df_lake = spark.table('default.default.customer')
df_ext = spark.read.format('...').option('...', '...').load() # recipe from the connector skill
df_lake.createOrReplaceTempView('lake')
df_ext.createOrReplaceTempView('ext')
spark.sql('''SELECT ... FROM lake l JOIN ext e ON l.key = e.key ...''').show(50, truncate=False)
"
Returns JSON {status, execution_count, outputs, spark_job_ids, error}. Read the SQL/Spark error from the
error field and fix grounded in the catalog — don't guess repeatedly. Smoke-test connectivity first with
--code "spark.sql('SELECT 1').show()".aidp-ingest-file-to-table /
manage-tables) or save the join via aidp-verified-queries.aidp_sql.py invocation. Do not claim single-query pushdown federation across heterogeneous sources
unless verified live on the target environment — that capability is an open question, so don't overstate it.aidp_sql.py call is a fresh
session and the earlier temp views are gone.aidp-cluster-ops).aidp-analyzing-datanpx claudepluginhub anthropics/claude-plugins-official --plugin oracle-ai-data-platform-workbench-engineer-agent2plugins reuse this skill
First indexed Jun 12, 2026
Reads or writes Snowflake warehouses from AIDP notebooks using the Snowflake Spark connector. Useful for cross-warehouse joins or migrations off Snowflake.
Analyze lakehouse data interactively via Fabric Lakehouse Livy API sessions using PySpark/Spark SQL for DataFrames, cross-lakehouse joins, Delta time-travel, and unstructured/JSON data.
Answers business questions over the AIDP lakehouse by translating natural language to Spark SQL, grounded in a catalog and semantic model.