Collection checks

Setup: the imports every example on this page uses
import tempfile
from typing import Annotated

import dagster as dg
import dataframely as dy
import polars as pl

import dagster_dataframely as dd
from dagster_dataframely.data import OrdersSchema, ParquetIOManager, storefront_orders

A Dataframely Collection groups several tables. Its @dy.filter methods are its collection filters. They state the relations between the tables. A foreign key is one such relation. dd.build_collection_checks reports each collection filter as an asset check on assets you already declare.

The checks never change a table. A row that fails a collection filter stays in its table, and the collection filter’s check fails.

Declaring the checks

Declare one asset per member, each with the member’s own schema. Then pass the Collection and its member assets to dd.build_collection_checks:

class CustomersSchema(dy.Schema):
    email = dy.String(primary_key=True)


class Shop(dy.Collection):
    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        """Every order's customer exists."""
        return self.orders.join(self.customers, on="email", how="semi")


@dd.asset(CustomersSchema)
def customers() -> pl.DataFrame:
    return (
        storefront_orders
        .select("email")
        .unique()
        .filter(pl.col("email") != "jo@example.com")
    )


@dd.asset(OrdersSchema)
def orders() -> pl.DataFrame:
    return storefront_orders


shop_checks = dd.build_collection_checks(
    Shop, members={"orders": orders, "customers": customers}
)

[
    (spec.asset_key.to_user_string(), spec.name, spec.description)
    for spec in shop_checks.check_specs
]
[('orders',
  'dy_filter__order_references_customer',
  "Every order's customer exists.")]

members maps each member’s name to its asset: the dg.AssetsDefinition that dd.asset returns, or a dg.AssetSpec. dd.build_collection_checks returns one dg.AssetChecksDefinition, which goes in dg.Definitions(asset_checks=[...]). Dagster runs every check in it in one step, named after the Collection in snake case unless you pass name=.

Each collection filter has one check on each member without ignored_in_filters=True:

  • Its name is dy_filter__<name>. Naming lists the other names in the reserved dy_ namespace.
  • It depends on the other members in members, so the asset graph shows the check reading customers.
  • Its description is the collection filter’s docstring, or the collection filter’s name when it has none.

A foreign key needs ignored_in_filters=True on the table it references

Dataframely compares members only on their common primary key. Dataframely raises when you define a Collection that has a collection filter and whose members without ignored_in_filters=True have no primary-key column in common:

try:

    class NoSharedKey(dy.Collection):
        orders: dy.LazyFrame[OrdersSchema]
        customers: dy.LazyFrame[CustomersSchema]

        @dy.filter()
        def order_references_customer(self) -> pl.LazyFrame:
            return self.orders.join(self.customers, on="email", how="semi")

except dy.exc.ImplementationError as error:
    print(error)
Members of a collection must have an overlapping primary key if they use filters or failure-propagation, but did not find any.

So Shop sets ignored_in_filters=True on customers. The common primary key is then order_id and line_no, and the collection filter returns the order lines to keep. Only orders has a check.

Members that share a primary key each have a check

A child table’s primary key includes its parent’s, so neither member needs ignored_in_filters=True:

class InvoicesSchema(dy.Schema):
    invoice_id = dy.Int64(primary_key=True)


class InvoiceLinesSchema(dy.Schema):
    invoice_id = dy.Int64(primary_key=True)
    line = dy.Int64(primary_key=True)


class InvoiceBook(dy.Collection):
    invoices: dy.LazyFrame[InvoicesSchema]
    lines: dy.LazyFrame[InvoiceLinesSchema]

    @dy.filter()
    def invoice_has_lines(self) -> pl.LazyFrame:
        return self.invoices.join(self.lines, on="invoice_id", how="semi")


book_checks = dd.build_collection_checks(
    InvoiceBook,
    members={"invoices": dg.AssetSpec("invoices"), "lines": dg.AssetSpec("lines")},
)

[(spec.asset_key.to_user_string(), spec.name) for spec in book_checks.check_specs]
[('invoices', 'dy_filter__invoice_has_lines'),
 ('lines', 'dy_filter__invoice_has_lines')]

An invoice with no lines fails the check on invoices, and a line whose invoice does not exist fails the check on lines.

What a run reports

The run below writes order ORD-0010, whose customer does not exist. It also selects order_count, an asset downstream of orders:

@dg.asset
def order_count(orders: pl.DataFrame) -> int:
    return orders.height


with tempfile.TemporaryDirectory() as storage:
    result = dg.materialize(
        [customers, orders, order_count, shop_checks],
        resources={"io_manager": ParquetIOManager(base_dir=storage)},
        raise_on_error=False,
    )
    orders_table = pl.read_parquet(f"{storage}/orders.parquet")

[evaluation] = [
    evaluation
    for evaluation in result.get_asset_check_evaluations()
    if evaluation.check_name.startswith("dy_filter__")
]
metadata = evaluation.metadata
{
    "passed": evaluation.passed,
    "severity": evaluation.severity,
    "description": evaluation.description,
    "dataframely/failed_row_count": metadata["dataframely/failed_row_count"].value,
    "dataframely/failed_examples": [
        dict(record.data) for record in metadata["dataframely/failed_examples"].records
    ],
}
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_START - Started execution of step "customers".
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - customers - Writing file at: /tmp/tmpnxrxpzq2/customers.parquet using ParquetIOManager...
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 42ms.
2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_START - Started execution of step "orders".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - orders - Writing file at: /tmp/tmpnxrxpzq2/orders.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 134ms.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_START - Started execution of step "shop".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - shop - Loading file from: /tmp/tmpnxrxpzq2/customers.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager", from output "result" of step "customers"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - shop - Loading file from: /tmp/tmpnxrxpzq2/orders.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_INPUT - Got input "customers" of type "LazyFrame". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_INPUT - Got input "orders" of type "LazyFrame". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_FAILURE - Execution of step "shop" failed.

dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
orders: dy_filter__order_references_customer

Stack Trace:
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
    yield from check.generator(step_events)
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
    raise DagsterAssetCheckFailedError(

2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - order_count - Dependencies for step order_count failed: ['shop']. Not executing.
/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
  pass
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 223ms
2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['shop'].
{'passed': False,
 'severity': <AssetCheckSeverity.ERROR: 'ERROR'>,
 'description': '1 row failed.',
 'dataframely/failed_row_count': 1,
 'dataframely/failed_examples': [{'order_id': 'ORD-0010',
   'line_no': 1,
   'email': 'jo@example.com',
   'amount': '512.40',
   'quantity': 6,
   'priority': 1,
   'status': 'shipped',
   'tracking_id': 'TRK-ORD-0010-1',
   'is_gift': False,
   'ordered_at': '2026-08-05 15:30:00',
   'fulfilled_in': '1 day, 6:00:00',
   'tags': "['bulk', 'priority']",
   'note': 'Split across two pallets.'}]}

The check reads each member’s table as the member’s asset wrote it. It evaluates only the collection filters, not the rules of each member’s schema. So check each member’s rules on the member’s own asset: declare it with dd.asset, or check it with dd.build_rule_checks.

A failing check’s metadata has up to three keys:

key value
dataframely/filter the collection filter’s name, which a passing check has too
dataframely/failed_row_count how many of the member’s rows failed the collection filter
dataframely/failed_examples up to max_failure_examples of those rows

A passing check’s description is No row failed.

A run writes the failure examples to the Dagster event log unredacted. max_failure_examples= sets how many, and Settings lists its sources.

A failing row stays in its table

A failing "error" check fails the run and stops the assets downstream of orders in that run, so the run does not materialize order_count:

(
    result.success,
    sorted(
        event.asset_key.to_user_string()
        for event in result.get_asset_materialization_events()
    ),
)
(False, ['customers', 'orders'])

Order ORD-0010 is still in the orders table:

orders_table
shape: (12, 13)
order_idline_noemailamountquantityprioritystatustracking_idis_giftordered_atfulfilled_intagsnote
stri32strdecimal[10,2]i32i32enumstrbooldatetime[μs]duration[μs]list[str]str
"ORD-0001"1"ada@example.com"125.0021"shipped""TRK-ORD-0001-1"false2026-08-01 09:00:001d 2h["priority"]null
"ORD-0001"2"ada@example.com"18.5011"shipped""TRK-ORD-0001-2"false2026-08-01 09:00:001d 2h["priority"]null
"ORD-0002"1"bo@example.com"340.0042"paid""TRK-ORD-0002-1"true2026-08-01 14:30:003h["gift", "fragile"]"Leave with the neighbour."
"ORD-0003"1"cyd@example.com"12.991null"new""TRK-ORD-0003-1"false2026-08-02 08:15:00nullnullnull
"ORD-0004"1"dev@example.com"89.9533"shipped""TRK-ORD-0004-1"false2026-08-02 11:45:002d 2h["bulk"]null
…………………………………
"ORD-0006"2"fay@example.com"75.0011"paid""TRK-ORD-0006-2"true2026-08-03 19:05:001h 30m["gift"]null
"ORD-0007"1"gus@example.com"45.002null"new""TRK-ORD-0007-1"false2026-08-04 07:40:00nullnullnull
"ORD-0008"1"hal@example.com"199.0013"shipped""TRK-ORD-0008-1"true2026-08-04 12:10:003d["gift"]null
"ORD-0009"1"ivy@example.com"6.7512"paid""TRK-ORD-0009-1"false2026-08-05 09:55:002hnullnull
"ORD-0010"1"jo@example.com"512.4061"shipped""TRK-ORD-0010-1"false2026-08-05 15:30:001d 6h["bulk", "priority"]"Split across two pallets."

A later run that selects only order_count reads order ORD-0010.

A run evaluates the checks of the members it selects

A run that selects orders alone evaluates the check on orders, and reads customers as the last run wrote it. A run that selects customers alone evaluates no check on orders, because Dagster selects a check by the asset it is on:

def list_evaluated_checks(selection: str, storage: str) -> list[str]:
    run = dg.materialize(
        [customers, orders, shop_checks],
        resources={"io_manager": ParquetIOManager(base_dir=storage)},
        selection=selection,
        raise_on_error=False,
    )
    return [
        f"{evaluation.asset_key.to_user_string()}/{evaluation.check_name}"
        for evaluation in run.get_asset_check_evaluations()
        if evaluation.check_name.startswith("dy_filter__")
    ]


with tempfile.TemporaryDirectory() as storage:
    list_evaluated_checks("*", storage)
    by_selection = {
        selection: list_evaluated_checks(selection, storage)
        for selection in ("orders", "customers")
    }

by_selection
/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/definitions/antlr_asset_selection/antlr_asset_selection.py:97: BetaWarning: Parameter `include_sources` of function `AssetSelection.all` is currently in beta, and may have breaking changes in minor version releases, with behavior changes in patch releases.
  return AssetSelection.all(include_sources=self.include_sources)
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_START - Started execution of step "customers".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - customers - Writing file at: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 32ms.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_START - Started execution of step "orders".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - orders - Writing file at: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 138ms.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_START - Started execution of step "shop".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - shop - Loading file from: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager", from output "result" of step "customers"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - shop - Loading file from: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_INPUT - Got input "customers" of type "LazyFrame". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_INPUT - Got input "orders" of type "LazyFrame". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_FAILURE - Execution of step "shop" failed.

dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
orders: dy_filter__order_references_customer

Stack Trace:
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
    yield from check.generator(step_events)
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
    raise DagsterAssetCheckFailedError(

/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
  pass
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 211ms
2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['shop'].
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_START - Started execution of step "orders".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - orders - Writing file at: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 132ms.
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_START - Started execution of step "shop".
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - shop - Loading file from: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - shop - Loading file from: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_INPUT - Got input "customers" of type "LazyFrame". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_INPUT - Got input "orders" of type "LazyFrame". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_FAILURE - Execution of step "shop" failed.

dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
orders: dy_filter__order_references_customer

Stack Trace:
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
    yield from check.generator(step_events)
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
    raise DagsterAssetCheckFailedError(

/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
  pass
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 169ms
2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['shop'].
2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_START - Started execution of step "customers".
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - customers - Writing file at: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 33ms.
/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
  pass
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 42ms
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - RUN_SUCCESS - Finished execution of run for "__ephemeral_asset_job__".
{'orders': ['orders/dy_filter__order_references_customer'], 'customers': []}

To check the foreign key in a run that rewrites customers, select the check on orders too.

Severity

A collection filter’s severity is "error" unless the Collection declares "warn", in the class attribute __dagster_dataframely__. It takes the forms a schema’s attribute takes: one value for every collection filter, or a mapping from collection filter name to value. Write it without an annotation, because Dataframely raises for any Collection annotation that is not a frame:

class LenientShop(dy.Collection):
    __dagster_dataframely__ = {"severity": {"order_references_customer": "warn"}}

    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi")


lenient_checks = dd.build_collection_checks(
    LenientShop, members={"orders": orders, "customers": customers}
)

[(spec.name, spec.blocking) for spec in lenient_checks.check_specs]
[('dy_filter__order_references_customer', False)]

An "error" check is blocking and fails at ERROR. A "warn" check is not blocking and fails at WARN, as dagster-dbt sets a dbt test. Rule severity covers the declaration on a schema.

How the checks read the members

Each input has the type the Collection declares. A dy.LazyFrame[...] member is a pl.LazyFrame input, which ParquetIOManager loads as a scan. A dy.DataFrame[...] member is a pl.DataFrame input. A pickling IO manager such as dg.FilesystemIOManager loads the pl.DataFrame the asset wrote. Dagster then fails the step with DagsterTypeCheckDidNotPass for a lazy member, so declare eager members when you use one:

class EagerShop(dy.Collection):
    orders: dy.DataFrame[OrdersSchema]
    customers: Annotated[
        dy.DataFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi").lazy()


eager_checks = dd.build_collection_checks(
    EagerShop, members={"orders": orders, "customers": customers}
)

with tempfile.TemporaryDirectory() as storage:
    eager_result = dg.materialize(
        [customers, orders, eager_checks],
        resources={"io_manager": dg.FilesystemIOManager(base_dir=storage)},
        raise_on_error=False,
    )

[
    (evaluation.check_name, evaluation.passed)
    for evaluation in eager_result.get_asset_check_evaluations()
    if evaluation.check_name.startswith("dy_filter__")
]
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_START - Started execution of step "customers".
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - customers - Writing file at: /tmp/tmp2ultxsp1/customers using PickledObjectFilesystemIOManager...
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 32ms.
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_START - Started execution of step "orders".
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - orders - Writing file at: /tmp/tmp2ultxsp1/orders using PickledObjectFilesystemIOManager...
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 137ms.
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_START - Started execution of step "eager_shop".
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - eager_shop - Loading file from: /tmp/tmp2ultxsp1/customers using PickledObjectFilesystemIOManager...
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager", from output "result" of step "customers"
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - eager_shop - Loading file from: /tmp/tmp2ultxsp1/orders using PickledObjectFilesystemIOManager...
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_INPUT - Got input "customers" of type "DataFrame". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_INPUT - Got input "orders" of type "DataFrame". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
2026-10-22 02:11:21 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_FAILURE - Execution of step "eager_shop" failed.

dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
orders: dy_filter__order_references_customer

Stack Trace:
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
    yield from check.generator(step_events)
  File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
    raise DagsterAssetCheckFailedError(

/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
  pass
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 209ms
2026-10-22 02:11:21 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['eager_shop'].
[('dy_filter__order_references_customer', False)]

The checks read every member’s whole table, so dd.build_collection_checks raises InvalidMembersError for a partitioned member. A collection filter evaluated in each partition alone would fail an order whose customer is in another partition.

An optional member can be left out of members, and the checks then do not read it:

class PromosSchema(dy.Schema):
    email = dy.String(primary_key=True)


class ShopWithPromos(dy.Collection):
    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]
    promos: Annotated[
        dy.LazyFrame[PromosSchema] | None, dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi")


promo_checks = dd.build_collection_checks(
    ShopWithPromos, members={"orders": orders, "customers": customers}
)

[input_def.name for input_def in promo_checks.node_def.input_defs]
['customers', 'orders']

A collection filter that returns a primary key twice can make another collection filter’s check count a row twice. Dataframely’s @dy.filter docstring states that duplicate primary keys “might introduce duplicate rows”. Return each primary key once, as a semi-join does.

Errors

dd.build_collection_checks raises when you call it. It raises InvalidMembersError for four mistakes in members:

  • a required member left out, including a member with ignored_in_filters=True, which Dataframely still requires;
  • a name that is not a member of the Collection;
  • a definition of several assets, such as a @dg.multi_asset, in place of the member’s dg.AssetSpec;
  • a partitioned asset.
@dg.multi_asset(specs=[dg.AssetSpec("orders"), dg.AssetSpec("customers")])
def warehouse(): ...


daily = dg.DailyPartitionsDefinition("2026-01-01")
mistakes = {
    "left out": {"orders": orders},
    "unknown": {"orders": orders, "customers": customers, "refunds": orders},
    "several assets": {"orders": warehouse, "customers": customers},
    "partitioned": {
        "orders": dg.AssetSpec("orders", partitions_def=daily),
        "customers": customers,
    },
}

for mistake, members in mistakes.items():
    try:
        dd.build_collection_checks(Shop, members=members)
    except dd.errors.InvalidMembersError as error:
        print(f"{mistake}: {error}")
left out: `members` lacks the required member 'customers' of Shop. The members of Shop are 'orders', 'customers'.
unknown: `members` names 'refunds', which is not a member of Shop. The members of Shop are 'orders', 'customers'.
several assets: `members` maps 'orders' to a definition of several assets. Pass the member's `dg.AssetSpec` from its `specs`. The members of Shop are 'orders', 'customers'.
partitioned: `members` maps 'orders' to a partitioned asset, and the checks read every member's whole table. Pass unpartitioned assets. The members of Shop are 'orders', 'customers'.

It raises FailurePropagationError for a member with propagate_row_failures=True and without ignored_in_filters=True:

class Propagating(dy.Collection):
    invoices: dy.LazyFrame[InvoicesSchema]
    lines: Annotated[
        dy.LazyFrame[InvoiceLinesSchema],
        dy.CollectionMember(propagate_row_failures=True),
    ]


try:
    dd.build_collection_checks(
        Propagating,
        members={"invoices": dg.AssetSpec("invoices"), "lines": dg.AssetSpec("lines")},
    )
except dd.errors.FailurePropagationError as error:
    print(error)
Member 'lines' of Propagating sets `propagate_row_failures=True`, which `dd.build_collection_checks` cannot check. A row that fails its member's own rules is not in the member's table, so a check over the tables would always pass. Remove the setting, or write a collection filter that states the condition.

dd.build_collection_checks does not raise FailurePropagationError for a member left out of members, because the checks do not read it.

It raises InvalidSeverityError when __dagster_dataframely__ names something that is not a collection filter:

class Misdeclared(dy.Collection):
    __dagster_dataframely__ = {"severity": {"order_has_customer": "warn"}}

    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi")


try:
    dd.build_collection_checks(
        Misdeclared, members={"orders": orders, "customers": customers}
    )
except dd.errors.InvalidSeverityError as error:
    print(error)
`__dagster_dataframely__` on Misdeclared names 'order_has_customer', which is not a collection filter of Misdeclared. The collection filters of Misdeclared are 'order_references_customer'.