【问题标题】:DQL query to return all files in a Cabinet in Documentum?DQL查询以返回Documentum内阁中的所有文件?
【发布时间】:2014-02-10 10:53:51
【问题描述】:

我想从一个柜子(名为“Wombat Insurance Co”)中检索所有文件。目前我正在使用这个 DQL 查询:

select r_object_id, object_name from dm_document(all) 
where folder('/Wombat Insurance Co', descend);

这没关系,只是它最多只返回 100 个结果。如果文件柜中有 5000 个文件,我想获得所有 5000 个结果。有没有办法使用分页来获得所有结果?

我试过这个查询:

select r_object_id, object_name from dm_document(all) 
where folder('/Wombat Insurance Co', descend) 
ENABLE (RETURN_RANGE 0 100 'r_object_id DESC');

目的是获得 100 个文件增量的结果,但是当我尝试执行它时,这个查询给了我一个错误。错误是这样说的:

com.emc.documentum.fs.services.core.CoreServiceException: "QUERY" action failed.

java.lang.Exception: [DM_QUERY2_E_UNRECOGNIZED_HINT]error:  
"RETURN_RANGE is an unknown hint or is being used incorrectly."

我认为我正确使用了 RETURN_RANGE 提示,但也许我没有。任何帮助将不胜感激!

我也尝试过使用提示 ENABLE(FETCH_ALL_RESULTS 0),但这仍然最多只能返回 100 个结果。

澄清一下,我的问题是:我怎样才能从一个文件柜中获取所有文件?

【问题讨论】:

    标签: sql database dql documentum dfc


    【解决方案1】:

    我使用 DFC API(使用 Java)已经有一段时间了,但我不记得查询的任何默认限制,IIRC 我们总是得到所有文档,没有任何限制。实际上(根据我的笔记)我们必须明确设置限制,例如enable (return_top 2000)。 (据我所知,语法可能取决于 EMC Documentum 背后的 DBMS。)

    只是猜测:检查您的 dfc.properties 文件。

    【讨论】:

    • 感谢您的建议。 enable (return_top 2000) 仍然只返回 100 个结果,properties 文件似乎是有序的。我设法找到了解决方案。我正在使用 DFS(对不起,我应该在问题中提到这一点),它是 DFC 之上的一个抽象层,事实证明您可以设置查询结果的起始索引。
    • @JasonPather:没关系,感谢分享解决方案!
    【解决方案2】:

    啊哈,我想通了。将 DFS 与 Java(DFC 之上的抽象层)一起使用,您可以设置查询结果的起始索引:

    String queryStr = "select r_object_id, object_name from dm_document(all) 
                       where folder('/Wombat Insurance Co', descend);"
    
    PassthroughQuery query = new PassthroughQuery();
    query.setQueryString(queryStr);
    query.addRepository(repositoryStr);
    
    QueryExecution queryEx = new QueryExecution();
    queryEx.setCacheStrategyType(CacheStrategyType.DEFAULT_CACHE_STRATEGY);
    queryEx.setStartingIndex(currentIndex);      // set start index here
    
    OperationOptions operationOptions = null;
    
    // will return 100 results starting from currentIndex
    QueryResult queryResult = queryService.execute(query, queryEx, operationOptions);
    

    您只需增加 currentIndex 变量即可获得所有结果。

    【讨论】:

      【解决方案3】:

      嗯,提示 使用不正确。从 1 开始,而不是 0。

      DQL 本身没有内置限制。默认返回所有结果。您只获得 100 个结果的原因必须与您使用 DFC(或您使用的任何其他客户端)的方式有关。按以下方式使用 IDfCollection 肯定会返回 everything

      IDfQuery query = new DfQuery("SELECT r_object_id, object_name "
              + "FROM dm_document(all) WHERE FOLDER('/System', DESCEND)");
      IDfCollection coll = query.execute(session, IDfQuery.DF_READ_QUERY);
      int i = 0;
      while (coll.next()) i++;
      System.out.println("Number of results: " + i);
      

      在测试环境(CS 6.7 SP1 x64,MS SQL)中,输出:

      结果数:37162

      现在,有证据。但是,如果您想提高应用程序的整体性能,则使用分页是一个好主意。如前所述,从数字 1 开始计数:

      ENABLE(RETURN_RANGE 1 100 'r_object_id DESC')
      

      这种分页方式要求在提示中指定排序,而不是作为 DQL 语句。如果您只想要前 100 条记录,请尝试以下提示:

      ENABLE(RETURN_TOP 100)
      

      在这种情况下,使用 ORDER BY 进行排序将如您所愿。

      最后,请注意添加 (all) 不仅会找到所有符合指定条件的文档,还会找到每个文档的所有版本。如果这是你的意图,那很好。

      【讨论】:

        【解决方案4】:

        您已经接受了一个使用 DFS 的答案。

        由于您正在玩 DFC,这些信息可能会对您有所帮助。

        DFS:

        如果您使用 DFS,则必须了解可以使用 DFS 使用的并发会话数。 我认为是 100 或 150。

        DFC:

        实际上,您可以通过 DFC 获取一个限制(我不确定 DFS)。

        转到您的 DFC 应用程序(webtop 或 da 或任何东西)并检查 dfc.properties 文件。

        # Maximum number of results to retrieve by a query search.                      
        # min value:  1, max value: 10000000
        # 
        dfc.search.max_results = 100
        
        # Maximum number of results to retrieve per source by a query search.           
        # min value:  1, max value: 10000000
        # 
        dfc.search.max_results_per_source = 400
        

        dfc.properties.full 或类似文件在那里,您可以根据您的系统验证这些值。

        我说的是 ContentServer 端,而不是客户端 dfc.properties 文件。

        如果您在 DFC 中使用 ENABLE (RETURN_TOP) 提示,则有两种方法可以从 ContentServer 获取结果。

        1. 基于对象
        2. 基于行

        您必须使用 server.ini 文件中的参数return_top_results_row_based 进行配置。

        所有这些更改都针对 documentum 服务器端,而不是针对您的 DFC/DQL 客户端。

        【讨论】:

          猜你喜欢
          • 2011-04-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多