Skip to main content

Silver Fanout

Silver fanout is a topology where a single bronze table feeds multiple silver tables, each with its own transformation logic, filter conditions, and CDC configuration.

How it works​

  1. Run the first onboarding job to create the bronze table and the first silver table.
  2. Run a second onboarding job in append mode ("overwrite": "False") with a new onboarding file defining the additional silver table.
  3. The pipeline reads all silver entries for the group and materializes each silver table in the same update.

silver_append_flows configuration​

For a second silver table within the same onboarding entry, use silver_append_flows:

{
"silver_append_flows": [
{
"name": "customers_active_silver_flow",
"create_streaming_table": false,
"source_format": "delta",
"source_details": {
"source_database": "my_catalog.retail_bronze",
"source_table": "customers_bronze"
},
"reader_options": {},
"once": false
}
]
}

Pipeline topology​

Silver fanout workflow

Silver fanout in Declarative Pipeline

Full example: customers_bronze → two silver tables​

First onboarding file (run with "overwrite": "True"):

[
{
"data_flow_id": "1",
"data_flow_group": "customers_group",
"source_format": "cloudFiles",
"source_details": {
"source_schema_path": "/Volumes/my_catalog/my_schema/my_volume/schema/customers.ddl",
"source_path_dev": "s3://my-bucket/cdc/customers/"
},
"bronze_catalog_dev": "my_catalog",
"bronze_database_dev": "retail_bronze",
"bronze_table": "customers_bronze",
"silver_catalog_dev": "my_catalog",
"silver_database_dev": "retail_silver",
"silver_table": "customers_silver",
"silver_transformation_json_prod": "/Volumes/my_catalog/my_schema/my_volume/conf/silver_transformations.json"
}
]

Second onboarding file (run with "overwrite": "False"):

[
{
"data_flow_id": "2",
"data_flow_group": "customers_group",
"source_format": "delta",
"source_details": {
"source_database": "my_catalog.retail_bronze",
"source_table": "customers_bronze"
},
"silver_catalog_dev": "my_catalog",
"silver_database_dev": "retail_silver",
"silver_table": "customers_active_silver",
"silver_transformation_json_prod": "/Volumes/my_catalog/my_schema/my_volume/conf/silver_transformations_fanout.json"
}
]

The silver_transformations_fanout.json file applies a where_clause to restrict to active customers:

[
{
"target_table": "customers_active_silver",
"source_format": "delta",
"select_exp": ["customer_id", "name", "email", "region"],
"where_clause": "is_active = true"
}
]

Running the demo​

python demo/launch_silver_fanout_demo.py \
--cloud_provider_name=aws \
--dbr_version=15.3.x-scala2.12 \
--uc_catalog_name=<your_catalog>