[英]How to read CSV data from S3 using Node.js AWS Lambda function
[英]Loading data from s3 to redshift using copy command
我有一種場景,需要將數據從Amazon S3加載到Amazong Redshift數據庫中。
S3中的文件都是JSON,它們位於存儲桶中的各個文件夾下。 每個文件夾均指示其生成日期。
例如,這是S3中的示例文件夾結構:
每個JSON文件沒有單個根元素。 它們具有以下格式-
file1.json
{
Key : Value,
Key1 : [ some array],
Key2 : value3,
}
{
Key : Value1,
Key1 : [ some array1],
Key2 : value2,
}
我想知道是否有一種方法可以使用copy命令將這些數據遞歸加載(由於json位於多個文件夾中)到redshift中。
(要么)
除了使用復制命令之外,還有沒有更好的方法來加載數據。
在S3中,沒有文件夾之類的東西。 而是將路徑作為對象鍵 。 只要您的密鑰遵循一個通用模式,並假設除了要導入的文件之外沒有其他文件可以匹配該模式,例如:
s3
└── b1-bucket
├── f1/20160728/file1.json
├── f1/20160728/file2.json
├── f1/20160729/file1.json
└── f2/20160728/file1.json
然后,以下COPY
命令將匹配(並復制)所有這些文件:
COPY your_table FROM 's3://b1-bucket/f' CREDENTIALS '' FORMAT AS JSON 'auto';
如文檔中所述 :
s3:// copy_from_s3_objectpath參數可以引用具有相同鍵前綴的單個文件或一組對象或文件夾。
另一個選擇是將清單文件添加到COPY
語句,該清單文件基本上只是一個包含要導入的文件列表的文件:
{
"entries": [
{"url":"s3://b1-bucket/f1/20160728/file1.json", "mandatory":true},
{"url":"s3://b1-bucket/f1/20160728/file2.json", "mandatory":true},
{"url":"s3://b1-bucket/f1/20160729/file1.json", "mandatory":true},
{"url":"s3://b1-bucket/f2/20160728/file1.json", "mandatory":true}
]
}
參見http://docs.aws.amazon.com/redshift/latest/dg/loading-data-files-using-manifest.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.