Как использовать Bulk API с предложением WHERE в Salesforce

Я хочу использовать Bulk API Salesforce для выполнения запросов этого формата.

Select Id from Object where field='<value>'.

У меня есть тысячи таких значений полей, и я хочу получить идентификатор этих объектов. Насколько мне известно, массовый запрос Salesforce поддерживает только один оператор SOQL в качестве входных данных.

Одним из вариантов может быть формирование запроса типа

Select Id,field where field in (<all field values>)

но проблема в том, что SOQL имеет ограничение в 10000 символов.

Любые предложения здесь?

Спасибо


person RandomQuestion    schedule 16.07.2012    source источник
comment
Стоит обновить вопрос с помощью бизнес-логики, поскольку запрос стольких значений полей не считается хорошей идеей по соображениям производительности.   -  person Anup    schedule 22.07.2012


Ответы (3)


Похоже, вы пытаетесь выполнить какой-то поисковый запрос. Если это так, вы можете использовать запрос SOSL как в отличие от SOQL, если поля, которые вы ищете, индексируются SFDC.

В остальном я согласен с Born2BeMild. Ваш второй подход лучше, и разбиение списка значений на партии поможет обойти ограничения.

Было бы также полезно, если бы вы более подробно описали свой вариант использования. Обычно запросы к динамическому набору полей и значений не всегда обеспечивают наилучшую производительность даже при массовом API. Вам почти лучше загрузить данные в локальную базу данных и изучить данные таким образом.

person John De Santiago    schedule 17.07.2012
comment
Разделение на партии — один из вариантов. У нас уже есть данные, загружаемые в базы данных, поэтому я думаю, это было бы более эффективно. - person RandomQuestion; 25.07.2012

Вы можете разбить их на пакеты по 200 или около того значений и итеративно запрашивать Salesforce, чтобы создать набор результатов в памяти или обработать подмножества данных.

Однако вам нужно будет проверить ограничения регулятора на максимальное количество запросов SOQL. Вы должны иметь возможность отслеживать использование через API во время выполнения, чтобы избежать превышения максимума.

person Born2BeMild    schedule 17.07.2012

Проблема в том, что вы достигаете пределов губернатора. Salesforce может обрабатывать только 200 записей за раз, если они поступают из базы данных. Поэтому, чтобы иметь возможность работать со всеми этими записями, сначала вам нужно добавить все записи в список, например:

 List<Account> accounts= [SELECT id, name, FROM Account];

Затем вы можете работать со списком учетных записей, делать с ним все, что вам нужно, а затем, когда вы закончите, вы можете обновить базу данных, используя:

Update accounts;

эта ссылка может быть полезной: https://help.salesforce.com/apex/HTViewSolution?id=000004410&language=en_US

person Levementum    schedule 16.03.2015