2012-10-29 2 views
2

저는 CLIq을 사용하고 있으며 매 x 시간마다 실행해야하는 작업을 예약했습니다. 내 문제는 내 SOQL 쿼리가 지난 x 시간 동안 업데이트 된 항목 만 추출해야하는 데이터베이스의 모든 항목을 가져 오는 것입니다. 쿼리를 어떻게 제한 할 수 있습니까?지난 x 시간에 업데이트 된 데이터를 추출하는 SOQL 쿼리

이것은 내 process-config.xml 파일입니다. 내가 과거에이 비슷한 STH 괜찮습니다

<!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 시간"을 표현하는 방법을 모르지만 가능한 경우 lastmodifieddate 필드 및 날짜 메서드를 사용하여 soql 문에 where 절을 사용합니다. 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 데이터 로더가 문서에서 참조를 찾을 수 없기 때문에 APEX 데이터 로더가 작동하는지 확신 할 수 없습니다. – Born2BeMild

+1

@Sdry : 나는 이전에'SELECT ID, LastModifiedDate = TODAY 및 HOUR_IN_DAY (LastModifiedDate)> 9' 계정의 이름과 비슷한 sth를 사용했다. 당신은 12시에 뛰기 위해 스케쥴을 잡았고, 오후 3시에 비슷한 스케쥴을 만들었습니다 ... 실행 중 하나가 실패 할 경우 따라 잡기를 원했기 때문에 아직 이상하지 않습니다. 시간을 절약하기 위해 로더 주위에서 스크립팅을하기 때문에 마지막으로 성공적인 실행이 필요합니다. – eyescream

답변

1

: 12에서 오후 3시 다음과 유사 하나를 실행하는

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 것 ...

정지 실행 중 하나가 실패하는 경우 따라 잡기를 원하기 때문에 이상적이지는 않습니다. 따라서 마지막으로 성공한 실행 시간을 절약하기 위해 로더를 스크립팅하는 일부 작업은 오류 방지 솔루션에 필수적입니다.

+0

안녕하세요, 저는 Select a.a 계정으로 실행합니다. 여기서 a.LastModifiedDate = 오늘 및 HOUR_IN_DAY (a.LastModifiedDate)> 1. 지난 1 시간 이내에 쿼리하고 싶습니다. 수동으로 업데이트 한 일부 데이터가 있더라도 행이 나타나지 않습니다. – kitokid

+0

@kitokid'HOUR_IN_DAY (LastModifiedDate)> 1'은 1시와 2시 사이에 업데이트 된 내용을 반환합니다. 가장 좋은 방법은': System.now(). addHours (-1)'로 바인드 변수를 사용하거나 순수한 SOQL이어야한다는 것입니다. – eyescream