簡體   English   中英

使用復制命令將數據從s3加載到redshift

[英]Loading data from s3 to redshift using copy command

我有一種場景,需要將數據從Amazon S3加載到Amazong Redshift數據庫中。

S3中的文件都是JSON,它們位於存儲桶中的各個文件夾下。 每個文件夾均指示其生成日期。

例如,這是S3中的示例文件夾結構:

  1. 斗(B1)
    A.文件夾(F1)
    一世。 file1.json,file2.json ...等等B.文件夾(F2)
    ii。 file22.json,file23.json ...等

每個JSON文件沒有單個根元素。 它們具有以下格式-

file1.json

{
Key : Value,
Key1 : [ some  array],
Key2 : value3,
}

{
Key : Value1,
Key1 : [ some  array1],
Key2 : value2,
}

我想知道是否有一種方法可以使用copy命令將這些數據遞歸加載(由於json位於多個文件夾中)到redshift中。

(要么)

除了使用復制命令之外,還有沒有更好的方法來加載數據。

選項1:鍵前綴匹配

在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參數可以引用具有相同鍵前綴的單個文件或一組對象或文件夾。

選項2:清單文件

另一個選擇是將清單文件添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM