2012-10-29 38 views
2

我正在使用CLIq並計劃了應該每x小時運行一次的任務。 我的問題是,我的SOQL查詢獲取數據庫中的所有項目,我只需要提取在最近x小時內更新的內容。我怎樣才能限制我的查詢?提取最近x小時更新的數據的SOQL查詢

這是我的process-config.xml文件。

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
    <bean id="AMP_AIMS" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false"> 
     <description>Created by Dataloader Cliq.</description> 
     <property name="name" value="AMP_AIMS"/> 
     <property name="configOverrideMap"> 


      <map> 
       <entry key="dataAccess.name" value="...\AMP_AIMS\write\AMP_AIMS.csv"/> 
       <entry key="dataAccess.readUTF8" value="true"/> 
       <entry key="dataAccess.type" value="csvWrite"/> 
       <entry key="dataAccess.writeUTF8" value="true"/> 
       <entry key="process.enableExtractStatusOutput" value="true"/> 
       <entry key="process.enableLastRunOutput" value="true"/> 
       <entry key="process.lastRunOutputDirectory" value="...\AMP_AIMS\log"/> 
       <entry key="process.operation" value="extract"/> 
       <entry key="process.statusOutputDirectory" value="...\AMP_AIMS\log"/> 
       <entry key="sfdc.bulkApiCheckStatusInterval" value="5000"/> 
       <entry key="sfdc.bulkApiSerialMode" value="5000"/> 
       <entry key="sfdc.debugMessages" value="false"/> 
       <entry key="sfdc.enableRetries" value="true"/> 
       <entry key="sfdc.endpoint" value="https://test.salesforce.com/services/Soap/u/24.0"/> 
       <entry key="sfdc.entity" value="Agency_Profile__c"/> 
       <entry key="sfdc.extractionRequestSize" value="500"/> 
       <entry key="sfdc.extractionSOQL" value="Select a.Total_Annual_Sales__c, a.Market_Specialties__c, a.Market_Focus__c, a.Destination_Specialties__c, a.CreatedDate, a.Agency_Website__c, a.Agency_Business_Email__c From Agency_Profile__c a"/> 
       <entry key="sfdc.insertNulls" value="false"/> 
       <entry key="sfdc.loadBatchSize" value="100"/> 
       <entry key="sfdc.maxRetries" value="3"/> 
       <entry key="sfdc.minRetrySleepSecs" value="2"/> 
       <entry key="sfdc.noCompression" value="false"/> 
       <entry key="sfdc.password" value="blabla"/> 
       <entry key="sfdc.proxyHost" value=""/> 
       <entry key="sfdc.proxyNtlmDomain" value=""/> 
       <entry key="sfdc.proxyPassword" value=""/> 
       <entry key="sfdc.proxyPort" value=""/> 
       <entry key="sfdc.proxyUsername" value=""/> 
       <entry key="sfdc.timeoutSecs" value="60"/> 
       <entry key="sfdc.useBulkApi" value="false"/> 
       <entry key="sfdc.username" value="bla"/> 
      </map> 
     </property> 
    </bean> 
</beans> 
+1

我不知道如何表達「最後X小時」,但如果可能的話,它可能會在您的soql語句的where子句中使用lastmodifieddate字段和日期方法。 http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_date_functions.htm –

+0

本文檔介紹了API中可用的getUpdated()方法。不過目前我還不確定你是否可以通過dataloader訪問它http://www.salesforce.com/us/developer/docs/api/Content/sforce_api_calls_getupdated.htm我認爲Talend支持getUpdated()API方法但我不確定APEX dataloader的確如此,因爲我無法在文檔中找到對它的引用。 – Born2BeMild

+1

@Sdry:我過去很喜歡這樣的事情:SELECT ID,Name FROM LastModifiedDate = TODAY AND HOUR_IN_DAY(LastModifiedDate)> 9'。你會讓它在12點運行,然後在下午3點運行相似的點......但仍然不理想,因爲如果其中一個運行失敗,你希望趕上...所以在裝載程序周圍有一些腳本以節省時間最後一次成功的運行是必要的。 – eyescream

回答

1

我是罰款與某事與此類似,在過去:

SELECT Total_Annual_Sales__c, Market_Specialties__c, Market_Focus__c, Destination_Specialties__c, CreatedDate, Agency_Website__c, Agency_Business_Email__c 
FROM Agency_Profile__c 
WHERE LastModifiedDate = TODAY AND HOUR_IN_DAY(LastModifiedDate) > 9 

你會shedule它在12運行,然後在下午3點類似一個...

仍不理想,因爲如果其中一個運行失敗,您希望趕上...因此,對於故障安全解決方案而言,爲了節省上次成功運行的時間,裝載器周圍的一些腳本是必需的。

+0

嗨,我運行sql作爲選擇a.Id從帳戶a 其中a.LastModifiedDate =今天和HOUR_IN_DAY(a.LastModifiedDate)> 1。我想在最近一個小時內查詢。但即使有一些手動更新的數據,也不會出現行。 – kitokid

+0

@kitokid'HOUR_IN_DAY(LastModifiedDate)> 1'會在1點和2點之間返回給你更新的內容。我認爲你最好的選擇是使用':System.now()。addHours(-1)'作爲綁定變量,或者如果它必須是純SOQL的 - 也許只是按最後一個mod的日期降序排序並檢查循環? – eyescream