从S3 databucket复制Amazon Redshift中的特定列

Bit*_*Das 6 amazon-s3 amazon-redshift

我在S3中有一个文件,例如列

CustomerID   CustomerName   ProductID    ProductName   Price   Date
Run Code Online (Sandbox Code Playgroud)

现在,Redshift中现有的SQL表结构很有用

Date  CustomerID   ProductID    Price
Run Code Online (Sandbox Code Playgroud)

无论如何都要复制现有表结构中的选定数据?S3数据库没有任何标题,只有订单中的数据.

Big*_*Kid 6

这适用于文件的列数少于目标加载表的情况.

假设CustomerName和ProductName可以是NULL字段,则有两个选项.

选项#1 - 直接在桌面上加载

    COPY main_tablename
    (Date  
    ,CustomerID   
    ,ProductID    
    ,Price)
    FROM 's3://<<YOUR-BUCKET>>/<<YOUR-FILE>>'
    credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret- access-key>';

ANALYZE main_tablename;
Run Code Online (Sandbox Code Playgroud)

选项#2 - 将数据加载到临时表中.然后使用引用数据连接临时表以将数据插入

    COPY staging-tablename
    (Date  
    ,CustomerID   
    ,ProductID    
    ,Price)
    FROM 's3://<<YOUR-BUCKET>>/<<YOUR-FILE>>'
    credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret- access-key>'; 

 INSERT INTO
     main_tablename
SELECT st.CustomerID   
      ,cust.CustomerName   
      ,st.ProductID    
      ,prod.ProductName   
      ,st.Price   
      ,st.Date
FROM  staging-tablename st
INNER JOIN  customer-tablename cust ON ( cust.CustomerID = st.CustomerID)
INNER JOIN  product-tablename prod ON ( prod.ProductID  = st.ProductID );

TRUNCATE TABLE staging-tablename;

ANALYZE main_tablename;
Run Code Online (Sandbox Code Playgroud)


Big*_*Kid 5

这是针对文件的列数多于目标加载表的情况。

假设 CustomerName 和 ProductName 可以是 NULL 字段,您有两个选择。

将数据加载到临时表中。然后将暂存表与参考数据连接起来插入数据

COPY staging-tablename
FROM 's3://<<YOUR-BUCKET>>/<<YOUR-FILE>>'
credentials 'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret- access-key>'; 

INSERT INTO
 main_tablename
SELECT Date  
  ,CustomerID   
  ,ProductID    
  ,Price
FROM  staging-tablename st;

TRUNCATE TABLE staging-tablename;

ANALYZE main_tablename;
Run Code Online (Sandbox Code Playgroud)