Как улучшить загрузку данных SalesForce - PullRequest
0 голосов
/ 09 апреля 2020

хочу загрузить 700к. записи в экземпляр SalesForce. Работа в настоящее время занимает более 1 часа. Я пытаюсь найти способ максимально повысить скорость.

def is_missing(s):
    '''
    if an element is missing, return True or False
    '''
    criteria = str(s).lower() == 'nan' or pd.isnull(s) or str(s).lower() == 'none' or str(s) == ''
    if criteria:
        return True
    else:
        return False

def jsonalise_dataframe(data_frame):
    # prepare the data into json files so that they can be uploaded
    bulk_data = []
    for row in data_frame.itertuples():
        d = row._asdict()
        del d['Index']

        # delete the nan records
        for keys in list(d.keys()):
            if is_missing(d[keys]):
                del d[keys]
        bulk_data.append(d)
    return bulk_data

def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in range(0, len(lst), n):
        yield lst[i:i + n]
def upsert_sf_data(sf, data, api_name, ext_id):

    results = getattr(sf.bulk, api_name).upsert(data, ext_id)
    print('Data upserted on Saleforce.')

    eval_results = calculateError(results)
    print(eval_results)

    return results, eval_results

data = pd.read_csv('/home/ec2-user/parallelUpload/full.csv')
data_json = jsonalise_dataframe(data)
data_to_sf = list(chunks(data_json, n = 2000)) 
upsert_sf_data(sf = sf, data = chunk, api_name = 'Prediction__c', ext_id = 'External_System_ID__c')

Как видите, я установил размер чанка в максимально допустимый размер (2000 записей). Код python обрабатывает 119 фрагментов, что означает 119 * 200 записей, а затем ждет около 20 минут, прежде чем обрабатывать следующие 119 фрагментов. Таким образом, в общей сложности для записи записей pu sh 700k требуется около 1 часа, что я считаю ненормальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...