dataowl
dataowl reports facts about a table in Databricks (Unity Catalog / Delta Lake): size, files, rows, schema and table properties. It is meant for data engineers who build a dbt staging model and want the facts without writing exploratory SQL. It reports what exists and never gives recommendations.
Requirements
- Unity Catalog.
- Databricks Runtime 14.3 LTS or above, or serverless compute. Verified on serverless (Spark Connect).
- PySpark is provided by Databricks. dataowl has no other runtime dependencies.
Installation
In a Databricks notebook:
%pip install dataowl==0.1.0
Usage
import dataowl
dataowl.inspect("catalog.schema.table").show()
As a JSON-serializable dict, where every fact has a value, a source and a reason when it is unavailable:
overview = dataowl.inspect("catalog.schema.table")
overview.to_dict()
Row counts are skipped for views, materialized views and foreign tables unless you ask for them:
dataowl.inspect("catalog.schema.some_view", count_views=True).show()
Names with characters other than letters, digits and underscore are quoted with backticks:
dataowl.inspect("`my-catalog`.schema.table").
Example output
Output for Databricks' public sample data (samples.nyctaxi.trips):
samples.nyctaxi.trips (MANAGED, DELTA)
Size: 354.2 KB
Files: 1 (avg 354.2 KB)
Rows: 21 932
Columns: 6 (6 incl. nested)
Partitioned by: –
Clustered by: –
Change Data Feed: true
Log retention: not set (default)
Deleted file retention: not set (default)
Created: 2025-09-30 11:28
Last modified: 2026-09-14 15:07
Owner: System user
Comment: –
SCHEMA
# name type nullable comment
1 tpep_pickup_datetime timestamp yes
2 tpep_dropoff_datetime timestamp yes
3 trip_distance double yes
4 fare_amount double yes
5 pickup_zip int yes
6 dropoff_zip int yes
Principles
- Read-only. Only
SELECT,DESCRIBEandSHOW. Nothing is written, optimized or analyzed. - Facts only. No recommendations or assessments.
- No row values leave Spark. Only aggregates and metadata are collected.
- Unavailable facts are reported with a reason. Missing permissions or an unsupported
object type make the affected facts
n/a (<reason>); the rest of the report is still produced. Only a table that does not exist or is not accessible raisesTableNotFoundError.
Facts per object type
| Facts | Source | MANAGED, EXTERNAL | STREAMING_TABLE, MATERIALIZED_VIEW | FOREIGN | VIEW | UNKNOWN or n/a type |
|---|---|---|---|---|---|---|
| Object type, format, owner, comment, created | information_schema.tables |
yes | yes | yes | yes | yes (n/a if the query fails) |
| Size, files, avg file size, last modified, partitioning, clustering | DESCRIBE DETAIL |
yes | attempted¹ | attempted¹ | no | attempted¹ |
| Columns and schema | information_schema.columns |
yes | yes | yes | yes | yes |
| Field count incl. nested | Spark schema | yes | yes | yes | yes | yes |
| Change Data Feed, log and deleted file retention | SHOW TBLPROPERTIES |
yes | attempted¹ | attempted¹ | no | attempted¹ |
| Rows | COUNT(*) |
yes | MATERIALIZED_VIEW: with count_views=True; STREAMING_TABLE: yes |
with count_views=True |
with count_views=True |
UNKNOWN: yes; n/a type: with count_views=True |
¹ The query runs. If Databricks does not support it for the object, the facts are shown as
n/a (<reason>).
"UNKNOWN" is a table_type dataowl does not recognize, such as MANAGED_SHALLOW_CLONE. The
original value is shown in the header. "n/a type" means the object type could not be read.
Fields
- Last modified is the last data change, from
DESCRIBE DETAIL. Created is frominformation_schema.tables. - Rows is an exact
COUNT(*). On large tables this costs compute. - Files (avg ...) is the size divided by the number of files.
- Columns (... incl. nested) counts every field, including fields inside structs, array elements and map keys and values.
- not set (default) means the table property is not set, so Databricks uses its default. dataowl does not report what the default is.
- # in the schema table is a running number from 1 in column order.
Known deviations
information_schema.columns.ordinal_positionis documented as numbered from 1, but has been observed 0-based in Databricks (serverless, October 2026). dataowl keeps the raw value inColumnInfo.positionand shows a running number in the#column.
License
MIT. Copyright (c) 2026 Alexandro Dronnen. See LICENSE.
Metadata
Release files for dataowl 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dataowl-0.1.0.tar.gz | 35.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dataowl-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 56.9 kB
Release files / dataowl-0.1.0.tar.gz
| Download URL | dataowl-0.1.0.tar.gz |
|---|---|
| Size | 35.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6086f3095be694bf2877a7c5a95e3b5c71fc33e8be0eea7f5c65e1aa32f2fb2
|
|
BLAKE2b-256 checksum How to use checksums |
6da89b3927ea61ce3e045a4bba971f897210012fa2746cf28f53f28682bfca2e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency logRelease files / dataowl-0.1.0-py3-none-any.whl
| Download URL | dataowl-0.1.0-py3-none-any.whl |
|---|---|
| Size | 21.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
40b8c515e7d17375e8dcb3e0d618aa7feba24d452077e3d662faae8c7dd8991f
|
|
BLAKE2b-256 checksum How to use checksums |
965b082110c95f9fc3ca60311a992fe629cde0df462e0700803abe306fe81b33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency log