datajoint "join" 运算符是否要求表在共享辅助属性上具有相同的值?

Does datajoint "join" operator require tables to have the same value at shared secondary attributes?

我是加州大学旧金山分校 Loren Frank 实验室的研究员。在依赖于两个上游 table 的 Computed datajoint table 上调用 populate 时,这两个上游 table 的条目具有相同的共享主属性值但不同的共享辅助属性值(“analysis_file_name "), 我收到以下错误:

~/anaconda3/envs/nwb_datajoint/lib/python3.8/site-packages/datajoint/condition.py in assert_join_compatibility(expr1, expr2)
     63     if not isinstance(expr1, U) and not isinstance(expr2, U):  # dj.U is always compatible
     64         try:
---> 65             raise DataJointError(
     66                 "Cannot join query expressions on dependent attribute `%s`" % next(
     67                     r for r in set(expr1.heading.secondary_attributes).intersection(

DataJointError: Cannot join query expressions on dependent attribute `analysis_file_name`

为了弄清楚为什么会出现这种情况,我们的实验室目前有一个工作流程,其中所有在 nwb 文件中存储数据的数据联合 tables 都具有二级属性“analysis_file_name”,其中包含存储数据的分析文件的名称。因此,跨两个 table 的条目可以共享主要属性的值,但次要属性“analysis_file_name”的值不同。当“加入”两个这样的 tables 时,似乎会出现上述错误,例如在依赖于那些 table 的第三个 table 的自动填充期间。 datajoint 的人能否澄清是否加入两个 tables(例如,在第三个 table 的自动填充期间取决于那些 tables),必须是具有相同条目的情况共享主要属性的值 在共享次要属性中具有相同的值?感谢您对此的任何澄清。

这确实是一个错误,我在这里提交了它:issue 980

我们正在研究解决方案PR981

问题是key_source加入前没有投射出副属性

与此同时,解决方法是覆盖 key_source 属性,在其中一个表中突出次要属性。比如两个parents分别是AB那么就需要定义方法:

@property
def key_source(self):
    return A.proj() * B