Я столкнулся с миссией, которую невозможно извлечь из большого количества данных из Amazone Redshift в другую таблицу. Это определенно требует более эффективного подхода, но я новичок в SQL и AWS, поэтому решил обратиться к этому умному сообществу за советом.
Это мой первоначальный SQL-запрос, который занимает вечность:
-- STEP 1: CREATE A SAMPLE FOR ONE MONTH
SELECT DISTINCT at_id, utc_time, name
INTO my_new_table
FROM s3_db.table_x
WHERE type = 'create'
AND (dt BETWEEN '20181001' AND '20181031');
Какой будет лучший подход? Я думал об использовании python и sqlalchemy для создания фреймов данных с кусками по 1 м строк и вставки их обратно в новую таблицу (которую мне нужно создать заранее). Будет ли это работать?:
from sqlalchemy import create_engine
import os
import pandas as pd
redshift_user = os.environ['REDSHIFT_USER']
redshift_password = os.environ['REDSHIFT_PASSWORD']
engine_string = "postgresql+psycopg2://%s:%s@%s:%d/%s" \
% (redshift_user, redshift_password, 'localhost', XXXX, 'redshiftdb')
engine = create_engine(engine_string)
for df in pd.read_sql_query("""
SELECT DISTINCT at_id, utc_time, name
INSERT INTO my_new_table
FROM s3_db.table_x
WHERE type = 'create'
AND (dt BETWEEN '20181001' AND '20181031');
""", engine, chunksize=1000000):