Set is Empty
You expect the provided query didn't return any results.
Example
This expectation is simple and self-explanatory - you expect the provided query didn’t return anything.
For example, if you log errors into a table and you need an automated way to check no errors are being added:
Tests:
- Suite: Smoke Tests
Name: Table dbo.Errors is empty
Data Source: DWH
Query: SELECT * FROM dbo.[Errors]
Expectation: set is empty
Result
If no rows are returned, the test result will be Passed
.
After reading at least one row, CAT marks the test as Failed
.
If the underlying provider returns an exception, the result will be Error
.
Remarks
If the table or view you are testing might be huge (well, you don’t expect that, but if under some circumstances might be), consider some optimization techniques. The syntax depends on the underlying provider. If you are not experienced, try to search for e.g., “best way to check table is empty in ORACLE”.
Common Confusion
SELECT COUNT(*) FROM SomeTable
and expectation is set is empty
, the result will be always Failed
, because one row (with the number of records) is always returned - regardless whether the table has rows or not.More Rows in the Error Message
When Maximum Errors Logged
is set to 1 (default) or 0, CAT closes the connection to the underlying provider immediately after it receives first row. This is intentional, CAT is meant to be an “indicator” that points to problems, not a tool that returns all rows that do not satisfy a rule. You can raise Maximum Errors Logged
to a higher value. Maximum is 50 - it is enough to spot patterns in erroneous data and fix the problems.
Log Number of Errors
For each test with set is empty
expectation you can set Log Number of Errors
to true
or false
. Default is false
. If this setting is set to true
, CAT will not stop the evaluation immediatelly after it retrieves the first row. It will not even stop when it reaches the Maximum Errors Logged
(this only narrows the number of rows in the error message, you cannot have 2 billions of rows there). CAT will scan the entire set and enrich the error message with information about total erroneous rows. This feature is in preview! It can be significantly changed or even replaced in future versions. This feature is off by default.
You can instruct CAT to compute the toatal number of erroneous rows like this:
Tests:
- Name: There are no new errors in the error log
Data Source: DWH
Query: |
SELECT *
FROM Audit.ErrorLog
WHERE ThrownOn > DATEADD(DAY, -14, SYSUTCDATETIME())
Expectation: set is empty
Maximum Errors Logged: 5
Log Number of Errors: true # default is false
Let’s say the query returns 25 rows. With the settings above, CAT will output to the error message first 5 rows (example of errors), but will retrieve all the data and will enrich the error message with information No row was expected, but exactly 25 rows exist.
. The setting is also on the output, if you export test results into a database, just add Number of Errors
column and CAT will save the results there.