Обновление нескольких строк таблицы SQL из скрипта Python - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть массивная таблица (более 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.

...