故障排除连接操作
学习如何解决使用join包时可能出现的常见行为和错误。
提交关于无法解释的行为或错误的问题
这是一个“动态”的文档,可能会更新用户在使用join包时遇到的常见问题。如果您对此处未记录的行为或错误有疑问,请向InfluxData文档或Flux GitHub存储库提交问题:
排查连接行为
在连接中明确映射的列为null
在某些情况下,您的连接输出可能包括在您预期为非空值的列中出现null值。这可能是由以下问题之一引起的:
原因
每个输入流的组键并不相同。
join包中的函数使用组键快速识别应该比较哪些表。
解决方案
使用 group() 重新分组您的两个输入流,以便在尝试将它们连接在一起之前,它们的组键匹配。
原因
在您的数据流中没有匹配的 组键实例。join 包中的函数仅比较具有匹配的 组键实例 的表。输入流可能具有匹配的组键,但在您的流中没有匹配的组键实例。
当连接从 InfluxDB 查询的两个单独字段时,可能会发生这种情况。默认情况下,InfluxDB 返回的数据将 _field 作为组键的一部分。如果每个流包含不同的字段,则这两个流中的表将不会被比较,因为它们不会有任何匹配的 组键实例。
解决方案
使用 group() 去除
任何会阻止组键实例匹配的输入流的组键列。
排除连接错误消息
表缺少列 ''
错误信息
cannot set join columns in left table stream: table is missing column '<column>'
原因
您的 on 连接谓词使用了一个不存在的列。
在 on 谓词函数中,您正在尝试比较一个在您的输入流之一中不存在的列。
解决方案
确保您在 on 谓词函数中比较的列存在于输入流中。如果必要,请更新谓词函数中的列名。
表格缺少标签
错误信息
table is missing label <label>
原因
您的 on 连接谓词使用了一个不存在的列。
在外连接的 on 谓词函数中,您尝试使用一个来自于“主”输入流中不存在的列的值
(left 对于 join.left() 和 right 对于 join.right()).
解决方案
确保您在 on 谓词函数中比较的列确实存在于输入流中。必要时,更新谓词函数中的列名。
记录缺少标签
错误信息
record is missing label <label> (argument <left or right>)
原因
您的 on 连接谓词使用了一个不存在的列。
在 on 谓词函数中,您尝试比较一个在您的输入流之一中不存在的列。
解决方案
确保您在on谓词函数中比较的列实际上在输入流中存在。
如有必要,请更新谓词函数中的列名。
原因
您的 as 输出模式函数使用了一个不存在的列。如果使用 外连接,则 as 正在尝试使用一个在“主”输入流中不存在的列的值 (left 对于 join.left() 和 right 对于 join.right())。
解决方案
确保您在as输出函数中用于分配值的列确实存在于输入流中。
无法在空表上连接
错误信息
error preparing <left or right> side of join: cannot join on an empty table
原因
你的一个输入流是空的表流。当一个或两个输入流为空时,连接包中的函数会出错。
解决方案
使用 array.from() 和
union() 在每个你在连接操作后过滤掉的流中插入一个假表。
假表需要包括与其联合的流的所有分组键列。