为什么在 ClickHouse Cloud 中无法查看字典中的数据?
ClickHouse 中的字典
在 ClickHouse Cloud 中创建的字典在初始创建阶段可能会出现不一致的情况。这意味着在创建后,您可能无法在字典中看到任何数据。但是,经过几次重试后,创建查询可能会落在不同的副本上,并且数据将可见。
有时发生这种情况是因为字典是在 part 到达服务器之前创建的。例如
如您所见,part 仅在字典创建后才到达。如果您使用 LIFETIME(MIN 0 MAX 0),这可能会成为一个更大的问题,因为这意味着字典将永远不会自动刷新。因此,在执行 RELOAD DICTIONARIES 命令之前,字典将保持为空。
解决此问题的方案是在创建字典时使用 SELECT 查询,而不是指定源表,并启用设置 select_sequential_consistency=1。
不要指定源表
使用带有 select_sequential_consistency=1 的 SELECT 查询
为什么会出现此问题?
当您插入数据然后创建或重新加载字典时,DDL 可能会先到达一个副本,而数据(或新数据)却没有。这导致字典在副本之间不一致。然后,根据接收查询的副本,您可能会获得不同的结果。
请注意,当您插入数据后立即从表中读取时,也会发生同样的情况。如果您从尚未复制数据的副本读取,则看不到新插入的数据。当您需要顺序一致性时(以牺牲性能为代价,因此通常不建议使用),您可以启用 select_sequential_consistency。
字典的情况有点棘手,因为字典不使用查询中的设置,而是使用服务器中的设置。因此,即使您 SET select_sequential_consistency=1,将数据加载到字典中,数据在副本之间也可能不一致地加载。在字典源查询中指定 select_sequential_consistency=1 允许字典遵守此设置,即使它未作为服务器设置全局启用。