Skip to main content

Publish Command

Publish transformed data assets to external destinations (Reverse ETL). Moves data from your warehouse to operational systems like Salesforce, HubSpot, or other databases.

Overview​

The msh publish command exports an asset's currently active production version to an external destination. It uses the Blue/Green deployment hash to identify the correct table version, ensuring you're always publishing the live production data.

Usage​

msh publish <asset_name> --to <destination>

Arguments:

  • asset_name: Name of the asset to publish (must be deployed)

Options:

  • --to <destination>: Required. Target destination (e.g., salesforce, hubspot, postgres)

How It Works​

  1. Finds Active Version: Queries the warehouse to find the currently active Blue/Green hash for the asset
  2. Constructs Table Name: Uses the pattern model_{asset_name}_{active_hash}
  3. Exports Data: Calls the export engine to transfer data to the target destination

Security: Credentials Configuration​

Important: All destination credentials are read from environment variables in your .env file.

Format:

DESTINATION__<TARGET>__CREDENTIALS="<connection_string_or_config>"

Examples:

# Salesforce
DESTINATION__SALESFORCE__CREDENTIALS='{"username": "user@example.com", "password": "pass", "security_token": "token"}'

# HubSpot
DESTINATION__HUBSPOT__CREDENTIALS='{"api_key": "your-api-key"}'

# Postgres
DESTINATION__POSTGRES__CREDENTIALS="postgresql://user:pass@host:5432/dbname"

Security Best Practices:

  • Never commit .env files to version control
  • Use secret management tools in production (AWS Secrets Manager, HashiCorp Vault, etc.)
  • Rotate credentials regularly

Examples​

Publish to Salesforce​

msh publish customers --to salesforce

Output:

Publishing customers to salesforce...
Found active table: model_customers_a1b2c3
[OK] Exported 1,245 rows to Salesforce Contact object

Publish to HubSpot​

msh publish leads --to hubspot

Output:

Publishing leads to hubspot...
Found active table: model_leads_d4e5f6
[OK] Exported 892 rows to HubSpot Contacts

Publish to Postgres​

msh publish revenue --to postgres

Output:

Publishing revenue to postgres...
Found active table: model_revenue_f7g8h9
[OK] Exported 15,234 rows to analytics.revenue table

Error Handling​

Asset Not Deployed​

If the asset hasn't been deployed yet:

Error: Could not find active hash for asset 'customers'. Is it deployed?

Solution: Run msh run customers first to deploy the asset.

Missing Credentials​

If destination credentials are not configured:

Failed to publish: Missing DESTINATION__SALESFORCE__CREDENTIALS in environment

Solution: Add the required credentials to your .env file.

Connection Errors​

If the destination is unreachable:

Failed to publish: Connection refused to salesforce.com

Solution: Check network connectivity and firewall rules.

Use Cases​

1. Sync Customer Data to CRM​

Keep your CRM up-to-date with the latest customer data:

# Run daily sync
msh run customers
msh publish customers --to salesforce

2. Export Analytics to Operational DB​

Push transformed analytics back to operational systems:

msh run revenue_report
msh publish revenue_report --to postgres

3. Update Marketing Platforms​

Sync lead data to marketing automation tools:

msh run qualified_leads
msh publish qualified_leads --to hubspot

Integration with CI/CD​

Publish commands can be integrated into deployment pipelines:

# Example GitHub Actions workflow
- name: Deploy and Publish
run: |
msh run customers
msh publish customers --to salesforce
  • msh run: Deploy assets before publishing
  • msh status: Check which version is currently active
  • msh versions: View deployment history

See Also​