Prepstellar

DP-750 · Compute and Catalog Foundations

21 cards

Unity Catalog Naming Conventions

Swipe, scroll or use ← →
  1. Names are stored in lowercase

    Unity Catalog addresses every data asset with a three-part pattern: catalog.schema.object. Those three levels are the natural place to encode meaning, and they also impose rules you cannot negotiate with.

    Object names are limited to 255 characters and are stored in lowercase, whatever case you typed when creating them. Matching is case-insensitive too, so SalesData, salesdata, and SALESDATA all resolve to the same object. Nothing is preserved as a separate capitalized twin, nothing is rejected for being lowercase, and no letter is rewritten into anything else.

    The practical consequence is that letter case can never distinguish two objects. Two teams that believe they created different tables because one used capitals have created one table and are overwriting each other.

    Column names are the exception: Unity Catalog preserves the casing you declare for them, although queries still match them case-insensitively.

    1 / 21
  2. Quick check

    A table is created as `SalesData` and another statement refers to `salesdata`. How does Unity Catalog treat them?

    1. AIt keeps both as separate objects, because Unity Catalog object names are case-sensitive

      Case cannot separate two objects here, because names are not stored the way they were typed.

    2. BIt stores the name in lowercase and resolves both references to the same object

      Right. Names are stored in lowercase and matched case-insensitively, so both references reach one object.

    3. CIt accepts the capitalized form and rejects the lowercase one

      Neither form is rejected: both are simply normalized to the same stored name.

    2 / 21

  3. Characters the namespace forbids

    Some characters cannot appear in a Unity Catalog object name at all: periods, spaces, forward slashes, and control characters. The period is the most instructive of them, because it is the separator between the three levels of the namespace: sales.data is not a name, it is a reference to data inside sales.

    Written as Verdict
    sales_data Valid, and readable
    sales.data Invalid: the period separates namespace levels
    sales/data Invalid: forward slashes are prohibited
    Sales Data Invalid: spaces are prohibited
    `sales-data` Valid, because the hyphen is enclosed in backticks

    A hyphen or another supported special character is allowed only when the identifier is enclosed in backticks. That is an escape hatch, not a convention: a name that needs quoting to survive is a name that will be mistyped.

    3 / 21
  4. Quick check

    Which identifier is valid for a Unity Catalog catalog that should carry both a domain and an environment?

    1. Asales/prod, with a slash between the two parts

      Forward slashes are prohibited in object names.

    2. BSales Prod, written with a space

      Spaces are prohibited, so this identifier cannot be created as written.

    3. Csales_prod

      Right. The underscore is a legal separator and keeps both the domain and the environment visible in one name.

    4 / 21

  5. A readable pattern: lowercase with underscores

    The convention that fits those rules is lowercase words separated by underscores: customer_data, sales_summary, product_inventory. It reads cleanly and matches what the platform stores anyway.

    Avoid camelCase and PascalCase for that same reason. Since every name is lowercased on storage, capitalization creates a gap between what you wrote and what exists, and the difference shows up later as confusion rather than as an error message.

    Keep names descriptive but concise. sales_summary_gold communicates the domain and the data's maturity in three words. sales_final_report_v1_updated communicates a history: version details belong in metadata or object properties, not in an identifier that queries and pipelines must repeat forever.

    5 / 21
  6. A readable pattern: lowercase with underscores

    Consistent prefixes make an object's purpose visible while browsing, before anyone opens it.

    Prefix Marks
    vw_ Views and materialized views, for example vw_customer_stats
    tmp_ Temporary staging tables, for example tmp_import_staging

    A prefix says what kind of object this is; it says nothing about who may read it. That distinction runs through this whole topic: names inform people, permissions decide what actually happens.

    6 / 21
  7. Quick check

    Which style is recommended for readable Unity Catalog object names?

    1. ALowercase words separated by underscores

      Right. It is readable, it matches the lowercase form the platform stores, and it uses a legal separator.

    2. BPascalCase words separated by periods

      Periods separate namespace levels and cannot appear inside a name, and the capitalization would be lowercased anyway.

    3. CUppercase words separated by forward slashes

      Forward slashes are prohibited, and uppercase letters are not preserved in object names.

    7 / 21

  8. Keep your progress in the app

    That’s 3 of 9 quick checks. In the app they stay answered, and every lesson remembers where you left off.

  9. Catalogs by domain, by environment, or by both

    A catalog name is the widest label you have, so it should carry the dimension that matters most for ownership and risk.

    Strategy Examples What it makes obvious
    Domain sales_data, marketing_data, finance_data Functional boundaries that align with who owns the data
    Environment dev, test, prod Lifecycle stage, reducing the risk of touching production by accident
    Both, as {domain}_{environment} sales_dev, sales_prod, marketing_prod Ownership and lifecycle at once
    8 / 21
  10. Catalogs by domain, by environment, or by both

    The combined pattern scales across business domains while keeping environments apart, and its cost is arithmetic: every domain multiplies by every environment, so the number of catalogs grows and needs managing.

    Consider a company with sales and finance domains, each in development and production, that wants permissions granted for every domain-environment pair. The pattern produces exactly four catalogs — sales_dev, sales_prod, finance_dev, finance_prod — and each of them is a permission boundary.

    The alternatives fall short in visible ways:

    • One company_data catalog holding everything leaves no boundary to grant permissions on.
    • Four unrelated catalogs named dev, prod, sales, and finance lose one dimension whichever way you read them.
    • Anything built with periods is not a name at all, since the period is a namespace separator.
    9 / 21
  11. Quick check

    A company has sales and finance domains, each in development and production, and wants catalog-level permissions for every pair with both dimensions visible in the name. Which pattern fits?

    1. AA single `company_data` catalog containing all four groups of objects

      One catalog offers a single boundary, so the four pairs cannot be granted separately.

    2. B`sales_dev`, `sales_prod`, `finance_dev` and `finance_prod`

      Right. The combined domain and environment pattern creates one catalog per pair, which is exactly where the permissions are needed.

    3. CFour unrelated catalogs named `dev`, `prod`, `sales` and `finance`

      Splitting the dimensions into separate catalogs means no catalog represents a domain-environment pair.

    10 / 21

  12. Separate catalogs for environment isolation

    When development must not reach production data, put the boundary at the catalog level. Catalogs such as sales_dev, sales_test, and sales_prod separate the environments at the highest level of the namespace, and permissions can then be granted exactly there: developers work in the development catalog, production queries reference the production catalog, and cross-contamination has no path.

    Weaker arrangements only look similar:

    Arrangement Why it is weaker
    One catalog, table names ending in _dev and _prod A suffix is a label, not a boundary; the same grant covers both
    One schema mixing development and production objects Nothing separates the two, in names or in permissions
    One shared catalog whose comments say which is which Comments describe; they never restrict anything
    11 / 21
  13. Separate catalogs for environment isolation

    That is also the answer to the two-sided requirement: auditors want the environment obvious while browsing, and developers must never modify production data.

    Names satisfy the first half. Permissions satisfy the second. Separate dev and prod catalogs make the lifecycle boundary visible in every reference, and catalog permissions granted by role make it real.

    Naming is a communication control, never an access-control substitute. A name can mislead, be copied, or be ignored; only a grant decides who reads or writes. And since letter case is not preserved, a scheme that tries to distinguish Dev from DEV does not even produce two catalogs.

    12 / 21
  14. Quick check

    Developers must never modify production data, and auditors want the environment obvious while browsing. Which design satisfies both requirements?

    1. ADocument which objects are production in the comments and keep permissions identical

      Comments make the environment visible but leave every developer able to change production data.

    2. BAdd a `_prod` suffix to table names while developers keep access to the shared catalog

      A suffix communicates the boundary without enforcing it, since the shared catalog grant still allows the change.

    3. CUse separate `dev` and `prod` catalogs and grant catalog permissions by role

      Right. The separate catalogs make the boundary visible, and the role-based grants at that level enforce it.

    13 / 21

  15. Layers inside an environment

    Within an environment catalog, schemas are the natural place to express how far the data has been processed. The medallion pattern names three layers:

    Schema Holds
    bronze Raw ingested data, as it arrived
    silver Cleaned and validated data
    gold Aggregated, business-level data

    Read a full path and the pipeline stage is immediately legible: sales_data.bronze.raw_orders is raw order data, while sales_data.gold.monthly_revenue is a refined business metric.

    Keep the dimensions apart. Layer names describe processing maturity, not lifecycle environment, not who may see the data, and certainly not the hardware underneath. Environment separation and sharing intent are named elsewhere and enforced by permissions.

    14 / 21
  16. Quick check

    In a medallion layout, what do the schema names bronze, silver and gold communicate?

    1. AThe development, testing and production environments used across the workspace

      Lifecycle stages are expressed by catalog names such as dev, test and prod, not by layer schemas.

    2. BRaw data, cleaned and validated data, and aggregated business-level data

      Right. The three layers describe how far the data has been processed inside one environment.

    3. CPublic, internal and externally shared access levels

      Sharing and access levels are a matter of permissions and of catalog naming, not of processing layers.

    15 / 21

  17. Names that communicate sharing intent

    When an external partner browses a catalog, its name is often the first thing they read about your organization. A good name states the business purpose and the sharing status without exposing internal structure.

    • customer_analytics_shared says what the data is about and that it is meant to be shared.
    • internal_sales_raw_data says the opposite just as clearly: this asset is not intended for an external audience.

    Internal codes do not belong in a shared name. A catalog called d47_customer_analytics_external leaks a department code that means nothing to the partner and something to anyone probing your organization. And a name written as Customer Analytics Shared is not usable at all, because spaces are prohibited.

    Once more, the boundary is enforced elsewhere: a name ending in _shared announces intent, while permissions decide who actually reads the data.

    16 / 21
  18. Quick check

    An external partner will browse a shared analytics catalog. The name must convey purpose and sharing status without exposing the internal department code `d47`. Which name is best?

    1. A`d47_customer_analytics_external`

      It states the purpose but leaks the internal code the name was supposed to hide.

    2. B`internal_customer_raw_data`

      This announces an asset that is not meant for external eyes, which contradicts the purpose of the catalog.

    3. C`customer_analytics_shared`

      Right. It is a valid identifier, it reads as a business purpose, and it makes the sharing intent explicit without revealing internal structure.

    17 / 21

  19. Make the convention stick

    A convention that lives in one person's memory is not a convention. Four mechanisms turn it into something the organization actually follows.

    1. Document the patterns centrally, with the reasoning and with examples of both valid and invalid names. "Use {domain}_{layer} for schema names" plus a wrong example removes far more ambiguity than a rule alone.
    2. Validate names when deployments run. Automated deployment can check identifiers against the standard and reject the ones that violate it before the objects are created, which is the only moment a naming error is still cheap to fix.
    3. Restrict who can create objects. Permissions cannot enforce a pattern, but granting object creation only to the team responsible for a catalog keeps assets from appearing in the wrong place.
    4. Review what already exists. Query the information schema regularly to find identifiers that diverge from the standard, then rename them or record them as documented exceptions.

    Note what does not work: renaming everything to PascalCase (the platform lowercases it anyway), granting broad read access (an access decision, not a naming check), or adding version history to identifiers (metadata, misplaced).

    18 / 21
  20. Quick check

    Which mechanism catches an invalid identifier before automated deployment creates the object?

    1. AValidating names in the deployment pipeline against the documented standard

      Right. A check that runs during deployment can reject a non-conforming name while nothing has been created yet.

    2. BGranting SELECT on every catalog so reviewers can inspect the objects

      A read grant lets people look at objects that already exist; it validates nothing.

    3. CAdding version history to each object name so changes are traceable

      Version details belong in metadata, and putting them in a name neither checks nor fixes conformance.

    19 / 21

  21. Key takeaways

    • Unity Catalog names are limited to 255 characters, stored in lowercase, and matched case-insensitively; periods, spaces, forward slashes, and control characters are prohibited, and a hyphen requires backticks.
    • Use lowercase with underscores, keep names descriptive but concise, leave version details to metadata, and use prefixes such as vw_ and tmp_ to signal object purpose.
    • Use catalog names to express domain, environment, or both, with {domain}_{environment} when both dimensions matter and the extra catalogs can be managed.
    • Use separate catalogs when development and production need real isolation, and let schema layers such as bronze, silver, and gold describe processing maturity within an environment.
    • Make sharing intent visible without exposing internal structure, and remember that names communicate while permissions enforce.
    20 / 21
  22. Quick check

    Which statement reflects how naming and access work together in Unity Catalog?

    1. AA `_shared` suffix grants external access, while catalog permissions only describe intent

      The suffix announces intent and grants nothing; the grant is what opens access.

    2. BNames make purpose and boundaries visible, while permissions enforce who can read or change the data

      Right. Names are a communication control and permissions are the enforcement, which is why an isolation requirement needs both.

    3. CNames are case-sensitive, so environments can be separated by capitalizing their identifiers

      Object names are stored in lowercase, so capitalization cannot separate anything.

    21 / 21

  23. 9 quick checks · then the test

    In the app, finishing the quick checks opens this lesson’s 10-question test, and the ones you miss come back exactly when you’re about to forget them.

The whole course, on your phone

Lessons you can read, audio you can listen to on the way to work, and practice that remembers what you got wrong.