Dies ist für den Fall, dass die Datei weniger Spalten als die Ziellasttabelle hat.
Angenommen, dass CustomerName und ProductName NULL-Felder sein können, haben Sie zwei Möglichkeiten.
Option # 1 - Last direkt auf den Tisch
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;
Option # 2 - die Daten in einem Zwischenspeichertabelle laden. Fügen Sie dann die Zwischenspeichertabelle mit den Referenzdaten zum Einfügen von Daten in
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;
Es ist umgekehrt: Die Zieltabelle hat weniger Spalten als die Quelldaten in S3. Der Befehl 'copy' funktioniert in diesem Fall nicht, weil er mehr Spalten in den Quelldaten findet, als in der Zieltabelle verfügbar sind. – moertel
Es tut mir leid. Sie müssten eine Zwischenspeichertabelle verwenden. Ich habe 2 verschiedene Antworten gepostet. eine für jeden Fall. Es tut mir leid, dass ich deine Frage anfangs falsch gelesen habe – BigDataKid
Es war nicht meine Frage; Ich habe gerade den Thread gelesen und es bemerkt. :) – moertel