Muszę dołączyć do wszystkich tabel PostgreSQL i przekonwertować je w słowniku Python. W bazie danych znajduje się 72 tablice. Łączna liczba kolumn jest większa niż .Dołącz do wszystkich tabel PostgreSQL i utwórz słownik w języku Python
Napisałem prosty skrypt w języku Python, który łączy kilka tabel, ale nie dołącza do nich wszystkich z powodu the memory error. Cała pamięć jest zajęta podczas wykonywania skryptu. I uruchamiam skrypt na nowym wirtualnym serwerze z pamięcią RAM i 8 procesorami. Zawodzi podczas wykonywania funkcji lambda.
W jaki sposób można poprawić poniższy kod, aby wykonać wszystkie tabele?
from sqlalchemy import create_engine
import pandas as pd
auth = 'user:pass'
engine = create_engine('postgresql://' + auth + '@host.com:5432/db')
sql_tables = ['table0', 'table1', 'table3', ..., 'table72']
df_arr = []
[df_arr.append(pd.read_sql_query('select * from "' + table + '"', con=engine)) for table in sql_tables]
df_join = reduce(lambda left, right: pd.merge(left, right, how='outer', on=['USER_ID']), df_arr)
raw_dict = pd.DataFrame.to_dict(df_join.where((pd.notnull(df_join)), 'no_data'))
print(df_join)
print(raw_dict)
print(len(df_arr))
Czy można używać Pandas dla mojego celu? Czy są lepsze rozwiązania?
Ostatecznym celem jest udostępnienie danych denormalize DB, aby można było je zindeksować do Elasticsearch jako dokumentów, po jednym dokumencie dla każdego użytkownika.
Ile kolumn posiadasz we wszystkich 72 tabelach? Jeśli wynikowy DF będzie miał <= 250 kolumn, wtedy możesz i powinieneś dołączyć do PostgreSQL - nie będziesz odczuwał błędów pamięciowych – MaxU
Dlaczego nie powiesz nam swojego ostatecznego celu, abyśmy mogli Ci pomóc w lepszym rozwiązaniu –
@MaxU, Nie pamiętam dokładnej liczby, ale jestem pewien, że liczba kolumn jest większa niż 250. – trex