How do you check vendor CSV, Excel, and Parquet files before they break your reports?

Check vendor files where they land, before the load. Profile each delivery, compare its columns and row count with the last one, and test required fields, codes, and ranges. Since October 14, 2026, DataOps TestGen reads CSV, Parquet, and JSON files directly from a local path, Amazon S3, or Azure Blob Storage. Excel files must be saved as CSV first.

Key points

  • DataOps TestGen 5.134.0, released October 14, 2026 in open source and Enterprise, profiles, tests, and monitors CSV, Parquet, and JSON files on a local path, in Amazon S3, or in Azure Blob Storage, with no database or load step.
  • Excel is not a supported format in TestGen; a workbook has to be saved as CSV before TestGen can read it.
  • CSV and JSON declare no types, so TestGen infers them, and a column of all-digit ZIP codes comes back as a number; Parquet carries its own types and is the better choice when types matter.
  • A file pattern such as sales/*.csv becomes one table spanning every matching file, with the union of their columns, so a field a vendor adds or renames shows up in the next profile.
  • TestGen embeds DuckDB 1.5.5 and reads files read-only inside its own process, using that machine's memory and disk, one file run at a time by default.

Vendor files break reports in a predictable way. The file arrives, a loader accepts it, three transforms carry it forward, and the problem surfaces in a report a week later. By then the vendor has sent four more files.

So check the file before the load, at the place it lands.

What TestGen reads, and what it doesn’t

DataOps TestGen 5.134.0, released October 14, 2026 in both the open-source and Enterprise editions, profiles, tests, and monitors files with no database in front of them. An embedded DuckDB 1.5.5 engine reads them inside TestGen.

FormatSupported directlyNotes
CSVYesColumn types inferred from values
ParquetYesTypes come from the file
JSONYesColumn types inferred from values
DuckDB database fileYesOpened read-only
Excel (.xlsx)NoSave as CSV first
Avro, ORCNot as filesTestable since October 2025 when Redshift Spectrum or Snowflake external tables expose them

Files can sit on a local path, in Amazon S3, or in Azure Blob Storage. Before 5.134.0, a file had to sit behind a database, loaded into it or exposed as an external table. The NYC taxi test started from one 48 MB Parquet file that went into Postgres before TestGen saw a row.

A worked setup for daily vendor drops

Say a vendor drops claims_YYYYMMDD.csv into an S3 prefix every morning.

  1. Create an Amazon S3 connection with a base URI and read-only access (s3:ListBucket and s3:GetObject).
  2. Declare the table as a pattern. claims/*.csv makes every delivery rows of one table. TestGen reads the union of their columns, so a field the vendor adds next Tuesday appears in the next profile, at the file.
  3. Preview before profiling, and confirm the inferred types. A text column of all-digit ZIP codes comes back as a number, and a JSON file declared as CSV gives you nonsense columns, not an error.
  4. Profile and generate tests. You get the same profile, hygiene issues, generated tests, and volume and schema monitors a warehouse table gets.
  5. Add tests for the vendor’s promises: required fields present, codes on the agreed list, dates in range, row count near the usual delivery. Those are the terms of a data contract, and a failing test is the evidence you send back.

Limits worth knowing before you start

File runs use the memory and disk of the machine running TestGen, sized to the largest table you read. Only one runs at a time by default; raise TG_MAX_CONCURRENT_IN_PROCESS_RUNS once you’ve given TestGen the memory. Most installs run in Docker, and a local path is resolved inside the container, so mount the folder read-only first and enter the path the container sees.

Excel is the gap. If your vendor sends workbooks, you need a step that saves each sheet as CSV before TestGen sees it, and that step is one more thing to test. Ask for CSV or Parquet in the contract. Parquet keeps the types.

And keep the credentials read-only. TestGen never writes to your files, but a custom test runs SQL you write, and TestGen can’t stop that SQL from writing if the credentials allow it.

Frequently asked questions

Short answers to the follow-up questions people ask next.

Can TestGen test a CSV file without loading it into a database?

Yes. Since TestGen 5.134.0, released October 14, 2026, a Local Files connection reads CSV, Parquet, and JSON files from a directory, and Amazon S3 and Azure Blob Storage connections read them from object storage. TestGen runs profiling, hygiene detection, generated tests, and monitors on them in both the open-source and Enterprise editions, with no load step.

Can TestGen read Excel files?

No. Excel is not on TestGen's list of file formats, which are CSV, Parquet, and JSON. Save the workbook as CSV first, one sheet per file, and point TestGen at the CSV. Expect the CSV to lose cell types, because TestGen infers column types from the values in a CSV rather than reading them from the file.

Why does TestGen read my ZIP code column as a number?

Because CSV and JSON files carry no declared types, so TestGen infers each column's type from its values, and a text column of ZIP codes that happen to be all digits looks numeric. When exact types matter, ask the vendor for Parquet, which stores its own column types, or check the inferred types in the preview before profiling.

How do I test a folder of daily vendor files?

Declare one table as a pattern, such as drops/*.csv, or drops/**/*.csv to include subfolders. TestGen treats every matching file as rows of one table and reads the union of their columns, so a column present in only some deliveries is still there, empty for rows from files that lack it. To test each delivery on its own, declare one table per file.

Does TestGen change or copy my vendor files?

No. TestGen opens files read-only through an embedded DuckDB 1.5.5 engine and stores only what it computes, such as statistics, test results, and monitor history, in its own database. A large run can spill a temporary copy to TestGen's disk, which is removed when the run ends. Grant read-only access anyway, because a custom SQL test runs whatever SQL you write.

Try it on your own data

DataOps TestGen is free and open source. Profile a table and generate its tests this afternoon.