DLH.io Documentation logoDLH.io Documentation
AgentsSQL Server AgentScenarios

Community mode, local only

Evaluate the SQL Server Agent without a DLH.io account: local Parquet or Delta output, what the 10,000-row cap means, how to inspect the results with DuckDB, and the path to a trial or customer tier.

Community mode is the agent running with no API key and no storage credentials. It extracts to the local disk only, with a row cap per table, and is the quickest way to confirm connectivity, Change Tracking behaviour, type mapping and output layout against your own SQL Server before anyone signs anything.

When to use it

  • A proof of concept on a developer workstation or a lab VM.
  • Validating that the agent can reach a specific instance and that CT or CDC is set up correctly, before a production install.
  • Producing local sample files for a data modelling team.

Not for production: cloud output is disabled and tables are truncated at 10,000 rows.

Configuration

The dlh_ref and dlh_storage blocks are omitted entirely. Everything else is the same configuration you would use in production, so the file can be promoted later by adding those two blocks.

agent_version: 1.9.4
state_db_path: C:/dlh/state/dlh_agent_state.duckdb

connection_information:
  connection_type: sql_server
  server_name_or_ip: localhost
  server_port: 1433
  database_names: [AdventureWorks2019]

data_retrieval:
  historical_load: false
  output_format: parquet
  output_path: C:/dlh/output
  clean_up_output_folder: false
  table_name_casing: default
  table_name_structure: default
  parquet_compression: zstd
  produce_audit_trail: true
  databases:
    - name: AdventureWorks2019
      sync_mode: auto
      schema_refresh_mode: always
      tables:
        - name: Sales.*
          all_columns: true
          sync_mode: auto
          no_pk_strategy: full
        - name: Person.Person
          all_columns: false
          columns: [BusinessEntityID, FirstName, LastName, ModifiedDate]
          masks:
            - column: LastName
              algorithm: partial
              param: 1
      views:
        - name: Sales.vSalesPerson
          all_columns: true
SettingWhy
No dlh_ref, no dlh_storagePuts the agent in Community mode. If you later add dlh_ref.api_key for a Trial or Customer account the same file works with cloud storage.
output_format: parquetFiles you can open with DuckDB, pandas, Power BI or any Parquet reader. delta and iceberg also work locally; see the variation below.
clean_up_output_folder: falseKeep every run's files so you can compare them. Set to true once you understand the layout.
produce_audit_trail: trueWrites a dlh_agent_audit_*.csv per run listing every table, row count and file, which is handy for reviewing the proof of concept.
sync_mode: autoUses CT or CDC where the source has it and full extracts otherwise, so the evaluation exercises the same modes production would.
masks on Person.PersonDemonstrates masking on a sample file that may be shared outside the DBA team.

Windows credentials for SQL Server are entered on the first run and stored encrypted next to the configuration; see Security.

First run

cd C:\dlh\agent
.\dlh_agent_sql_server.exe --config-check
.\dlh_agent_sql_server.exe --diagnose
.\dlh_agent_sql_server.exe

The startup banner reports the tier and its consequences:

  Tier          : LOCAL COMMUNITY MODE (no API key configured)
  Row cap       : 10,000 rows per table/view
  Cloud uploads : DISABLED

Tables larger than the cap are extracted up to 10,000 rows and the log prints Community edition: reached the 10000-row cap for <table>; stopping fetch. Smaller tables are complete. On the next run, CT-enabled tables only deliver changes (still capped per run), and full-mode tables are re-extracted.

Output appears under dated folders:

C:\dlh\output\
  2026\09\04\1788202802\
    AdventureWorks2019.Sales.Customer.zstd.parquet
    AdventureWorks2019.Sales.SalesOrderHeader.zstd.parquet
    AdventureWorks2019.Person.Person.zstd.parquet
    AdventureWorks2019.Sales.vSalesPerson.zstd.parquet
  dlh_agent_audit_20260904_1788202802.csv
logs\
  dlh_agent_20260904_1788202802.log

Inspecting the results

DuckDB reads the Parquet files directly, no server needed:

INSTALL parquet; LOAD parquet;

SELECT count(*) FROM 'C:/dlh/output/2026/09/04/1788202802/AdventureWorks2019.Sales.Customer.zstd.parquet';

DESCRIBE SELECT * FROM 'C:/dlh/output/2026/09/04/1788202802/AdventureWorks2019.Person.Person.zstd.parquet';

Compare the DESCRIBE output with the SQL Server column types to review the type mapping (decimals keep their declared precision and scale, datetime2 becomes a microsecond timestamp, bit becomes boolean). The audit CSV lists the row count the agent extracted for every table so you can see at a glance which ones hit the cap.

What is and is not exercised

Community mode runs the same extraction, CT/CDC tracking, type mapping, masking and schema drift code as a paid tier; only the row cap and the absence of cloud delivery differ. Log shipping, run reports to the platform and platform-issued storage credentials are only available with an API key.

Moving to a trial or customer tier

  1. Contact us for a Trial or Customer account. You receive an organization, a project, a connection and an API key.
  2. Add the dlh_ref block to the same configuration file:
dlh_ref:
  org_guid: '<YOUR_ORG_GUID>'
  prj_guid: '<YOUR_PROJECT_GUID>'
  connection_guid: '<YOUR_CONNECTION_GUID>'
  target_schema_prefix: Site003
  api_key: '<YOUR_DLH_API_KEY>'
  1. Optionally switch to output_format: delta with direct_cloud_write: true as in Change Tracking to Delta Lake on Azure and Snowflake.
  2. Set historical_load: true for one run so every table is reloaded in full without the cap, then set it back to false. Tables that were capped during the evaluation are incomplete in the target until this reload happens.
  3. Run once interactively. The banner now shows TRIAL or CUSTOMER and the row cap line disappears.

A Trial shows its remaining days in the banner and sends a warning notification (if notifications are configured) when the expiry is within dlh_ref.trial_expiry_warning_days (default 7). After expiry the agent drops back to Community behaviour rather than stopping, so nothing breaks, but the row cap returns until the account is upgraded.

Variations

  • Local Delta or Iceberg: set output_format: delta (or iceberg) and keep direct_cloud_write: false. Tables are written under C:/dlh/output/delta/ (or iceberg/) and DuckDB can read them with the delta or iceberg extension. This is the closest local rehearsal of the production layout.
  • CSV for spreadsheets: output_format: csv. Same folder layout, one CSV per table.
  • Static storage credentials without an API key are ignored in Community mode; the cap and the local-only behaviour still apply.