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| Setting | Why |
|---|---|
No dlh_ref, no dlh_storage | Puts 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: parquet | Files 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: false | Keep every run's files so you can compare them. Set to true once you understand the layout. |
produce_audit_trail: true | Writes 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: auto | Uses CT or CDC where the source has it and full extracts otherwise, so the evaluation exercises the same modes production would. |
masks on Person.Person | Demonstrates 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.exeThe 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 : DISABLEDTables 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.logInspecting 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
- Contact us for a Trial or Customer account. You receive an organization, a project, a connection and an API key.
- Add the
dlh_refblock 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>'- Optionally switch to
output_format: deltawithdirect_cloud_write: trueas in Change Tracking to Delta Lake on Azure and Snowflake. - Set
historical_load: truefor one run so every table is reloaded in full without the cap, then set it back tofalse. Tables that were capped during the evaluation are incomplete in the target until this reload happens. - Run once interactively. The banner now shows
TRIALorCUSTOMERand 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(oriceberg) and keepdirect_cloud_write: false. Tables are written underC:/dlh/output/delta/(oriceberg/) and DuckDB can read them with thedeltaoricebergextension. 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.