You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Databricks中为Delta表的Great Expectations校验传递查询条件?

在Databricks中用Great Expectations校验Delta表子集的正确方式

你的问题出在batch_spec_passthrough里的query参数用法不对——Great Expectations的RuntimeBatchRequest不识别这个位置的查询条件,所以会直接加载全表数据。下面是两种可行的解决方法:

方法1:用Spark SQL查询直接获取数据子集

将reader_method改为spark_sql,并在runtime_parameters中传入完整的SQL查询语句(直接指定Delta表路径并添加过滤条件):

batch_request = RuntimeBatchRequest(
    datasource_name="datasource",
    data_connector_name="data_quality_run",
    data_asset_name="Input Data",
    runtime_parameters={
        "query": "SELECT * FROM delta.`/delta table path` WHERE name = 'John'"
    },
    batch_identifiers={"data_quality_check": f"data_quality_check_{datetime.date.today().strftime('%Y%m%d')}"},
    batch_spec_passthrough={"reader_method": "spark_sql"}
)

这种方式会让Great Expectations直接执行SQL查询,只加载符合过滤条件的数据,避免全表扫描。

方法2:通过Delta Lake的predicate参数过滤

如果坚持用delta作为reader_method,可以在reader_options中添加predicate参数,Delta Lake会自动应用这个过滤条件来读取子集数据:

batch_request = RuntimeBatchRequest(
    datasource_name="datasource",
    data_connector_name="data_quality_run",
    data_asset_name="Input Data",
    runtime_parameters={"path": "/delta table path"},
    batch_identifiers={"data_quality_check": f"data_quality_check_{datetime.date.today().strftime('%Y%m%d')}"},
    batch_spec_passthrough={
        "reader_method": "delta",
        "reader_options": {
            "header": True,
            "predicate": "name = 'John'"
        }
    },
)

这个predicate参数会被Delta的阅读器解析,只加载满足条件的数据块,效率更高。

内容的提问来源于stack exchange,提问作者S.Dasgupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:15:23