<@U088WCP3B4P> 数据库里的哪张表保存了异常或者失败的数据?
# ask-elementary-ai
l
@kapa.ai 数据库里的哪张表保存了异常或者失败的数据?
k
A message from kapa.ai
在 Elementary 中,关于异常或失败的数据,主要有以下几张表保存相关信息: 1. elementary_test_results 这是 Elementary 主要用来存储所有测试结果(包括通过和失败)的表。对于失败的测试,这张表会包含失败的样本行(默认最多5行,可以通过
test_sample_row_count
参数调整),以及测试的详细信息。例如,`result_rows` 字段会保存失败样本的原始数据(JSON 格式),`failed_row_count` 字段保存失败的行数总数【elementary_test_results 相关说明】[Slack Q&A about test failures](https://slack.com/archives/C02CTC89LAX/p1709061533176029)。 2. test_result_rows 这张表会将每个失败样本单独存为一行,便于查询和分析。你可以通过
elementary_test_results_id
字段将其与
elementary_test_results
关联起来。注意,这里同样只保存样本数据,默认5行,可以通过参数调整【test_result_rows 相关说明】[Slack Q&A about storing all failures](https://slack.com/archives/C02CTC89LAX/p1678288875135819)。 3. data_monitoring_metrics 如果你关注的是异常检测(anomaly detection)相关的数据,这张表会保存每个异常测试的度量值(metrics),但不包含异常分数的计算结果。异常分数和相关信息可以在 Elementary 的报告和其他视图中找到【anomaly 相关说明】[Slack Q&A about anomaly graph info](https://slack.com/archives/C02CTC89LAX/p1692873553144229)。 4. alerts_data_monitoring 这张表会保存所有检测到的异常(anomalies),包括异常的描述和相关信息【anomaly 相关说明】[Slack Q&A about all_columns_anomalies](https://slack.com/archives/C02CTC89LAX/p1655124255428199)。 总结: - 测试失败的样本数据主要在
elementary_test_results
和
test_result_rows
表中。 - 异常检测相关的度量和告警信息在
data_monitoring_metrics
和
alerts_data_monitoring
表中。 如果你需要所有失败的原始数据,Elementary 默认只保存样本(不是全部),可以通过调整
test_sample_row_count
参数来增加样本数量,但并不会保存所有失败行【采样说明】[Elementary data collection FAQ](https://docs.elementary-data.com/cloud/general/security-and-privacy#what-information-does-elementary-collect%3F)。
l
@kapa.ai 那收集到的dbt测试会在哪张表?
k
A message from kapa.ai
收集到的 dbt 测试结果会保存在表 elementary_test_results 中。 这张表会记录所有 dbt 测试(包括内置测试、Elementary 测试、以及其他包如 dbt_utils、dbt_expectations 的测试)的执行结果和相关元数据。每一行代表一次测试的结果,包括测试状态(通过/失败)、表名、检测时间等信息【elementary_test_results 说明】[dbt package models - Run results](https://docs.elementary-data.com/dbt/package-models#run-results)。 如果你需要测试的定义和配置信息,可以在 dbt_tests 表中找到,这里保存了所有 dbt 项目中的测试元数据【dbt_tests 说明】[Slack Q&A about dbt_tests](https://slack.com/archives/C02CTC89LAX/p1662059505282089)。
l
@kapa.ai 如果我想知道失败原因,应该怎么查询?
k
A message from kapa.ai
要查询 dbt 测试失败的原因,你可以在 elementary_test_results 表中找到相关信息。该表会保存每次测试的详细结果,包括: - 测试的配置信息 - 执行历史 - 失败的描述(如错误信息、失败原因) - 生成的测试 SQL 查询(test query) 你可以通过查询 elementary_test_results 表,查看对应测试的
status
字段(如 fail),并结合 `result_description`、`test_results_query` 等字段来分析失败原因。例如:
Copy code
sql SELECT   test_name,   status,   result_description,   test_results_query FROM   <your_schema>.elementary_test_results WHERE   status = 'fail' ORDER BY   detected_at DESC;
此外,Elementary 的 UI 也提供了测试失败的详细面板,可以直接查看失败原因、测试配置、执行历史和相关的错误信息【UI 侧边栏说明】[A better way to triage test and model failures](https://docs.elementary-data.com/changelog#a-better-way-to-triage-test-and-model-failures)。 如果你需要查看失败样本数据,可以结合
elementary_test_results
和
test_result_rows
表,通过
elementary_test_results_id
进行关联,进一步定位具体的失败行和原因【失败样本说明】[Slack Q&A about test failures](https://slack.com/archives/C02CTC89LAX/p1709061533176029)。 总结: - 失败原因主要在 elementary_test_results 表的描述和查询字段中。 - 也可以通过 UI 侧边栏直接查看详细失败信息。
l
@kapa.ai elementary_test_results表没有result_description字段?
k
A message from kapa.ai
根据目前提供的知识来源,elementary_test_results 表中并没有明确提到有 result_description 字段。官方文档和相关 Slack 讨论都没有列出该字段,表中主要包含测试结果、元数据、失败样本(result_rows)、测试 SQL(test_results_query)等字段,但没有 result_description 字段的具体说明【dbt package models - Run results】[dbt package models - Run results](https://docs.elementary-data.com/dbt/package-models#run-results)。 如果你需要失败原因,可以参考 result_rows、test_results_query 或其他相关字段,但 result_description 字段并未在知识库中被提及。
l
@kapa.ai pass代表通过了?
k
A message from kapa.ai
是的,**pass** 代表测试通过了。在 Elementary 的测试结果表(如 elementary_test_results)中,status 字段为 pass 表示该测试已通过,没有检测到异常或错误【Slack Q&A about test status】(https://slack.com/archives/C02CTC89LAX/p1734903590305679)。
l
@kapa.ai 这个配置什么意思,解读一下
Copy code
version: 2
models:
- name: dwd_shopee_order
  description: shopee订单明细模型
  tests:
  - elementary.table_anomalies:
      table_anomalies:
      - row_count
      - column_count
      anomaly_sensitivity: 1
      config:
        severity: warn
k
A message from kapa.ai
这个配置的含义如下:
Copy code
yaml version: 2 models: - name: dwd_shopee_order   description: shopee订单明细模型   tests:   - elementary.table_anomalies:       table_anomalies:       - row_count       - column_count       anomaly_sensitivity: 1       config:         severity: warn
解读: - 针对名为
dwd_shopee_order
的模型(shopee订单明细表),配置了 Elementary 的表级异常检测(anomaly detection)测试。 - `elementary.table_anomalies`:这是 Elementary 的表级异常检测测试,可以监控表的多个指标。 - `table_anomalies`: - `row_count`:监控表的行数变化,检测是否有异常的行数波动。 - `column_count`:监控表的列数变化,检测是否有异常的列数变动。 - `anomaly_sensitivity: 1`:设置异常检测的灵敏度,数值越低,检测越敏感(更容易触发异常告警)。具体灵敏度参数的作用可以参考[anomaly_sensitivity 配置说明](https://docs.elementary-data.com/data-tests/anomaly-detection-configuration/anomaly-sensitivity)。 - `config.severity: warn`:当检测到异常时,测试结果为“警告”(warn),而不是“错误”(error),不会阻断下游流程。这是通过 dbt 的标准 severity 配置实现的【severity 配置说明】[Slack Q&A about severity](https://slack.com/archives/C02CTC89LAX/p1665067912877829)。 **总结**: 该配置会对
dwd_shopee_order
表的行数和列数进行异常检测,灵敏度较高,发现异常时只发出警告,不会导致 dbt 流程失败。
l
@kapa.ai 我看了官网介绍的anomaly_sensitivity参数,但是我还是看不懂,麻烦你举例解释下
k
A message from kapa.ai
好的,下面用举例来解释一下官网介绍的
anomaly_sensitivity
参数: anomaly_sensitivity 用来控制异常检测的“灵敏度”,它决定了 Elementary 检测数据异常时的阈值范围。 具体来说,这个参数的数值代表“标准差的倍数”(Z-score),也就是数据点距离历史平均值多少个标准差才会被认为是异常。 - **数值越小,检测越敏感**,更容易被判定为异常。 - **数值越大,检测越宽松**,只有非常极端的变化才会被判定为异常。 ### 举例说明 假设你有一张表,每天的订单数(row_count)大致在 1000 左右,历史数据的标准差是 50。 - 如果设置 `anomaly_sensitivity: 3`(默认值),只有当天订单数超过 1000±150(即 3×50)才会被判定为异常。也就是说,订单数低于 850 或高于 1150 才会报警。 - 如果设置 `anomaly_sensitivity: 1`,只要当天订单数超过 1000±50(即 1×50)就会被判定为异常。也就是说,订单数低于 950 或高于 1050 就会报警。 这样,**anomaly_sensitivity 越小,越容易报警;越大,只有极端变化才报警**。 官网原文也有类似解释:“A sensitivity of 3 means that the expected range is within 3 standard deviations from the average of the training set. Smaller sensitivity means this range will be reduced and more values will be potentially flagged as anomalies. Larger values will have the opposite effect and will reduce the number of anomalies as the expected range will be larger.” [anomaly_sensitivity 配置说明](https://docs.elementary-data.com/data-tests/anomaly-detection-configuration/anomaly-sensitivity) 希望这个例子能帮助你理解!
l
@kapa.ai 那标准差是怎么算的?
k
A message from kapa.ai
关于“标准差是怎么算的”,知识库中没有详细说明 Elementary 在代码层面具体如何计算标准差,但有明确提到 Elementary 使用“标准分数(Z-score)”进行异常检测,标准差用于衡量历史数据的波动范围。 Elementary 会基于训练集(training set)中的历史数据,计算平均值和标准差,然后用这些统计量来判断新数据点是否为异常【Data anomaly detection method】([Data anomaly detection method](https://docs.elementary-data.com/data-tests/data-anomaly-detection))。 标准差的通用计算方法是: 对训练集中的每个数据点,计算其与平均值的差的平方,求平均后再开平方根。 但 Elementary 的文档没有给出具体 SQL 或实现细节。 总结: Elementary 用训练集的历史数据来计算标准差,但知识库没有提供具体的计算公式或代码实现细节。
l
@kapa.ai elementary能够收集dbt运行报错的模型,然后把数据存到数据库,是吗?
k
A message from kapa.ai
是的,Elementary 能够收集 dbt 运行报错的模型,并将相关数据存储到数据库中。具体来说,Elementary 会在 dbt 执行结束时,通过 on-run-end hook,将每次 dbt 运行(包括成功和失败的模型)的结果写入如 `dbt_run_results`、`dbt_invocations` 等表中。每条记录会包含模型的运行状态(如 Success/Error)、错误信息等内容【dbt_run_results 说明】([dbt package models - Run results](https://docs.elementary-data.com/dbt/package-models#run-results))。 此外,Elementary 的报告和 Model Duration 屏幕也会显示模型的运行状态(成功/失败),并在云版本中支持更详细的错误信息和 incident 管理【模型报错展示说明】([Slack Q&A about model error display](https://slack.com/archives/C02CTC89LAX/p1736754082968199))。