Я успешно подключил Python к таблице красного смещения с помощью Jupyter Notebook. Я выбрал 1 день данных (176707 строк) и выполнил функцию, используя Missingno , чтобы оценить, сколько данных отсутствует и где. Нет проблем.
Вот код (отредактированный для безопасности) ...
#IMPORT NECESSARY PACKAGES FOR REDSHIFT CONNECTION AND DATA VIZ
import psycopg2
from getpass import getpass
from pandas import read_sql
import seaborn as sns
import missingno as msno
#PASSWORD INPUT PROMPT
pwd = getpass('password')
#REDSHIFT CREDENTIALS
config = { 'dbname': 'abcxyz',
'user':'abcxyz',
'pwd':pwd,
'host':'abcxyz.redshift.amazonaws.com',
'port':'xxxx'
}
#CONNECTION UDF USING REDSHIFT CREDS AS DEFINED ABOVE
def create_conn(*args,**kwargs):
config = kwargs['config']
try:
con=psycopg2.connect(dbname=config['dbname'], host=config['host'],
port=config['port'], user=config['user'],
password=config['pwd'])
return con
except Exception as err:
print(err)
#DEFINE CONNECTION
con = create_conn(config=config)
#SQL TO RETRIEVE DATASET AND STORE IN DATAFRAME
df = read_sql("select * from schema.table where date = '2020-06-07'", con=con)
# MISSINGNO VIZ
msno.bar(df, labels=True, figsize=(50, 20))
Это дает следующее, что я и хочу видеть:
![enter image description here](https://i.stack.imgur.com/r3kd3.png)
Однако мне нужно выполнить эту задачу на подмножестве всей таблицы, а не только за один день.
Я запустил ...
SELECT "table", size, tbl_rows FROM SVV_TABLE_INFO
... и я вижу, что таблица имеет общий размер 9 ГБ и 32,5 млн строк , хотя образец мне нужен для оценки данных завершение составляет 11M строк
Пока что я определил 2 варианта для получения большего набора данных, чем ~ 18k строк из моей первоначальной попытки.
Это:
1) Использование chunksize 2) Использование Dask
Использование Chunksize
Я заменил необходимую строку кода на это:
#SQL TO RETRIEVE DATASET AND STORE IN DATAFRAME
df = read_sql("select * from derived.page_views where column_name = 'something'", con=con, chunksize=100000)
Это все еще заняло несколько часов на MacBook Pro с процессором Intel Core i7 2,2 ГГц и 16 ГБ ОЗУ, и к концу задачи выдавались предупреждения о памяти. Когда он был завершен, я все равно не смог просмотреть фрагменты, и ядро отключилось, что означало, что данные, хранящиеся в памяти, были потеряны, и я, по сути, зря потратил утро.
Мой вопрос:
Если предположить, что это не совсем глупая sh попытка, может ли Даск быть лучшим подходом? Если да, то как я могу выполнить эту задачу с помощью Dask?
В документации Dask приводится следующий пример:
df = dd.read_sql_table('accounts', 'sqlite:///path/to/bank.db',
npartitions=10, index_col='id') # doctest: +SKIP
Но я не понимаю, как я могу применить это к моему сценарию, в котором я подключились к таблице красных смещений, чтобы получить данные.
Любая помощь с благодарностью получена.