Человек, у меня были проблемы с тем, как произнести название.
Сводка: Для проекта базы данных в универе мы должны импортировать 1 миллион строк данных в базу данных, где каждая строка представляет статью, вырезанную из целого числа. rnet. Один из столбцов в этих данных, является автором статьи. Поскольку многие статьи были написаны одним и тем же автором, я хотел создать отдельную от статей таблицу, в которой каждый уникальный автор связывался бы с первичным ключом, а затем я хотел заменить строку автора в таблице статей на ключ для этого автора. в другой таблице. Как это сделать наиболее эффективным способом и возможно ли сделать это таким образом, чтобы обеспечить детерминированный c вывод, при котором указанная c авторская строка ВСЕГДА отображалась бы на определенный pkey, независимо от порядка строки статей «входят», когда этот метод создает эту таблицу.
То, что я сделал: То, как я это сделал, было (Python с использованием Pandas) go через все 1 миллион строк статей и создать уникальный список всех авторов, которых я нашел. Затем я создал словарь на основе этого списка (отсортировано). Затем я использовал этот словарь для замены строки автора в таблицах статей ключом, соответствующим указанному c автору, а затем использовал dict для создания моей таблицы авторов. Однако, как я понимаю, если в мои данные была вставлена строка, в которой автор не был найден в первый раз, это могло бы испортить алфавитный порядок, в котором мой метод добавляет авторов к требованию, что делает его не таким уж детерминированным. c. Итак, что люди обычно делают в этих случаях? Может ли SQL в статьях 1mio непосредственно создать новую таблицу авторов с уникальными авторами и ключами и заменить строку автора в таблице статей? Может ли быть идея использовать хеширование с указанным ключом c ha sh, чтобы гарантировать, что определенная строка всегда отображается на определенный ключ, или?
Показать некоторые код:
def get_authors_dict():
authors_lists = []
df = pd.read_csv("1mio-raw.csv", usecols=['authors'], low_memory=True)
unique_authors_list = df['authors'].unique()
num_of_authors = len(unique_authors_list)
authors_dict = {}
i = 0
prog = 0
for author in unique_authors_list:
try:
authors_dict[author]
i += 1
except KeyError:
authors_dict[author] = i
i += 1
print(prog / num_of_authors * 100, "%")
prog += 1
return authors_dict
authors_dict = get_authors_dict()
col1_author_id = list(authors_dict.values())
col2_author_name = list(authors_dict.keys())
data_dict = {'col1': col1_author_id,
'col2': col2_author_name}
df = pd.DataFrame(data=data_dict, columns=['col1', 'col2'])
df.to_csv('author.csv', index=False, header=False, sep="~")
f = open('author.csv', encoding="utf8")
conn = psycopg2.connect(--------)
cur = conn.cursor()
cur.copy_from(f, 'author', sep='~')
conn.commit()
cur.close()
# Processing all the 1mio rows again in seperate file
# and making changes to the dataframe using the dict:
sample_data['authors'] = sample_data['authors'].map(authors_dict)