故障排除同步、扫描和指纹识别

首先,检查您的数据是否因为浏览器缓存而过时

  1. 清除浏览器缓存。
  2. 刷新您的 Metabase 页面。
  3. 在无痕窗口中打开您的 Metabase 页面。

一旦您确认您正在查看的是表的非缓存视图和列,请联系您的数据库管理员寻求故障排除帮助

  • 同步,如果您的表或列缺失,或列数据类型错误。
  • 扫描,如果您的列缺失或错误(例如,在您的筛选下拉菜单中)。
  • 指纹识别,如果您已触发手动扫描,但更改未生效。

同步

  1. 确保您的数据库驱动程序是最新的。
  2. 前往管理 > 故障排除 > 日志检查同步状态。
  3. 从 Metabase SQL 编辑器对您的数据库运行查询,检查日志中未列出的数据库连接或数据库权限错误

    SELECT
       *
    FROM
        "your_schema"."your_table_or_view"
    LIMIT 1
    
  4. 如果需要,手动重新同步表或视图。

特殊情况

如果您刚刚在 Metabase 中设置了一个新数据库,初始同步查询需要一些时间才能启动。如果同步完全没有开始,请尝试故障排除数据库连接

解释

同步查询应在您的数据库查询执行表中显示如下(使用数据库连接详细信息中数据库用户的权限

SELECT
    TRUE
FROM
    "your_schema"."your_table_or_view"
WHERE
    1 <> 1
LIMIT 0

要运行同步查询,Metabase 必须

  • 成功连接到您的数据库,并且
  • 授予查询该数据库的权限。

如果连接失败或数据库权限错误,同步查询将无法运行。如果您首次设置 Metabase 后无法与数据库同步,则初始扫描和指纹识别查询也无法运行。

展开带有对象记录的 JSON 列

  1. 前往管理 > 数据库 > 您的数据库 > 显示高级选项
  2. 点击禁用“JSON 展开”
  3. 点击保存更改
  4. 点击同步数据库 Schema

解释

Metabase 将在同步过程中尝试展开 JSON 和 JSONB 记录,这会占用相当一部分查询执行时间。如果您有大量 JSON 记录,请尝试禁用自动展开选项,以使同步脱离慢速模式。请记住,您可以从管理 > 故障排除 > 日志跟踪同步状态。

扫描

  1. 前往管理 > 表元数据
  2. 选择数据库和表。
  3. 前往您要更新的列,然后点击齿轮图标。
  4. 点击丢弃缓存的字段值
  5. 点击重新扫描此字段
  6. 前往管理 > 故障排除 > 日志以跟踪扫描状态并从中调试错误。

特殊情况

如果您正在等待连接数据库后的初始扫描运行,请确保初始同步已首先完成(请记住,您可以从管理 > 故障排除 > 日志检查状态)。

解释

扫描查询针对您的数据库运行,以从表或视图的前 1,000 行中抽取列值样本

SELECT
    "your_table_or_view"."column" AS "column"
FROM
    "your_schema"."your_table_or_view"
GROUP BY
    "your_table_or_view"."column"
ORDER BY
    "your_table_or_view"."column" ASC
LIMIT 1000

扫描失败是由扫描查询失败引起的——您可以查看日志来调试查询,类似于您直接对数据库运行的其他查询。

请注意,当您从表元数据将搜索框筛选器更改为下拉筛选器时,您将触发该字段的扫描查询。如果您的下拉筛选器未拾取字段中的所有值,请记住 Metabase 仅对每个字段的前 1,000 个唯一值进行采样,并最多存储 100 千字节的文本。如果您的列中有超过 1,000 个唯一值,或者有大量文本密集型数据(如长 URL 或调查回复),您可以

  • 对该字段使用搜索框筛选器。
  • 在您的 ETL 或 ELT 过程中进一步清理数据。

指纹识别

要手动重新触发给定列的指纹识别查询

  1. 前往管理 > 数据库 > 您的数据库 > 显示高级选项
  2. 打开定期重新指纹识别表并点击保存更改
  3. 前往管理 > 表元数据
  4. 选择您的数据库和表。
  5. 将表的可见性更改为“隐藏”。
  6. 将可见性更改回“可查询”。
  7. 等待 10 秒。
  8. 转到您的列,并将类型从“实体键”更改为“无语义类型”,然后再改回“实体键”。

特殊情况

如果您正在等待连接数据库后的初始指纹识别查询运行,请确保初始同步已首先完成(请记住,您可以从管理 > 故障排除 > 日志检查状态)。

如果您使用的是 MongoDB,Metabase 会对每个集合的前 10,000 个文档进行指纹识别。如果您没有看到所有字段,那是因为这些字段可能不存在于前 10,000 个文档中。有关更多信息,请参阅我们的MongoDB 参考文档

解释

初始指纹识别查询会查看您的数据库中给定表或视图的前 10,000 行

SELECT
    *
FROM
    "your_schema"."your_table_or_view"
LIMIT 10000

如果前 10,000 行不能代表表中的数据(例如,如果您有大量空白或空值的稀疏数据),您可能会看到以下问题:

  • 不正确的筛选器类型,例如您需要日历时却显示为类别。
  • 无法工作的直方图可视化(因为 Metabase 需要最小值和最大值来生成分箱)。

Metabase 没有内置选项来触发手动指纹识别查询。您可以按照上述步骤“重置”字段的设置,尝试强制执行指纹识别查询,但这不能保证在所有 Metabase 版本上都有效。

同步或扫描时间过长

要加快同步速度

要加快扫描速度

解释

同步和扫描最终只是针对您的数据库运行的两种查询,因此执行速度受运行查询的数量、执行频率、数据大小以及您分配给数据库的资源量的限制。Metabase 为您提供了调整同步和扫描查询数量和频率的选项,因为不幸的是,我们无法赋予您的数据库更多能力……(目前还不能?)

您还在遇到问题吗?

如果您无法使用故障排除指南解决问题

阅读其他Metabase 版本的文档。

© . All rights reserved.