У меня есть массивная таблица (более 100B записей), в которую я добавил пустой столбец. Я анализирую строки из другого поля (строки), если требуемая строка доступна, извлекаю целое число из этого поля и хочу обновить его в новом столбце для всех строк, в которых есть эта строка.
В данный момент,После того, как данные были проанализированы и сохранены локально в кадре данных, я выполняю итерации по ним, чтобы обновить таблицу Redshift чистыми данными. Это занимает около 1 с / итерация, что слишком долго.
Мой текущий пример кода:
conn = psycopg2.connect(connection_details)
cur = conn.cursor()
clean_df = raw_data.apply(clean_field_to_parse)
for ind, row in clean_df.iterrows():
update_query = build_update_query(row.id, row.clean_integer1, row.clean_integer2)
cur.execute(update_query)
, где update_query
- это функция для генерации запроса на обновление:
def update_query(id, int1, int2):
query = """
update tab_tab
set
clean_int_1 = {}::int,
clean_int_2 = {}::int,
updated_date = GETDATE()
where id = {}
;
"""
return query.format(int1, int2, id)
и где clean_df имеет следующую структуру:
id . field_to_parse . clean_int_1 . clean_int_2
1 . {'int_1':'2+1'}. 3 . np.nan
2 . {'int_2':'7-0'}. np.nan . 7
Существует ли способ массового обновления определенных полей таблицы, чтобы не нужно было выполнять один запрос за раз?
Я анализирую строки и выполняю оператор обновления из Python. База данных хранится в Redshift.