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数据库没有任何标题,只有订单中的数据.
这适用于文件的列数少于目标加载表的情况.
假设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)
这是针对文件的列数多于目标加载表的情况。
假设 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)
| 归档时间: |
|
| 查看次数: |
5329 次 |
| 最近记录: |