Как перенести таблицу в redshift?

Есть ли какой-то лучший способ, чтобы перенести стол в redshift, кроме того, чтобы взять его в пандах и сделать вещи.

2 ответа

  1. Вы можете попробовать использовать запрос ниже. Но приведенный ниже запрос был бы полезен, если число строк в группе является постоянным значением

    SELECT col1, 
           Split_part(col_values, ',', 1) col_value1, 
           Split_part(col_values, ',', 2) col_value2, 
           Split_part(col_values, ',', 3) col_value3 
    FROM  (SELECT col1, 
                  Listagg(col2, ',') 
                    within GROUP (ORDER BY col2) col_values 
           FROM   (SELECT col1, 
                          col2 
                   FROM   table1) derived_table1
           GROUP  BY col1) derived_table2
    

    Примечание: приведенный выше запрос будет использоваться, если у вас есть такое же количество строк в группе или если вы знаете максимальное количество строк в группе.

  2. Транспонирование данных в SQL никогда не является веселой задачей. Однако если данные помещаются в памяти в панд этот пакет может сделать процесс более гладким.

    https://github.com/agawronski/pandas_redshift

    Пример того, как это сделать, заключается в следующем:

    pip установить панды-redshift

    import pandas_redshift as pr
    
    # Provide your redshift credentials and connect to redshift
    pr.connect_to_redshift(dbname = <dbname>,
                            host = <host>,
                            port = <port>,
                            user = <user>,
                            password = <password>)
    
    # This next step reads the data from redshift to your python session
    data = pr.redshift_to_pandas('select * from gawronski.nba_shots_log')
    
    # Transpose the DataFrame
    data_transposed = data.transpose()
    
    # Provide S3 credentials 
    # (data goes to S3 then redshift so an S3 bucket is necessary)
    pr.connect_to_s3(aws_access_key_id = <aws_access_key_id>,
                    aws_secret_access_key = <aws_secret_access_key>,
                    bucket = 'my-bucket-name',
                    # this is and optional parameter:
                    subdirectory = 'subdirectory-in-the-bucket')
    
    # Write the transposed DataFrame back to redshift
    pr.pandas_to_redshift(data_frame = data_transposed, 
                 redshift_table_name = 'public.my_transposed_table'
    

    Edit: обновлено, чтобы избежать предоставления ответа только по ссылке.