我以以下结构向S3发送了报告:
s3://chum-bucket/YYYY/MM/DD/UsageReportYYYYMMDD.zip
s3://chum-bucket/YYYY/MM/DD/SearchReportYYYYMMDD.zip
s3://chum-bucket/YYYY/MM/DD/TimingReportYYYYMMDD.zip
YYYY MM DD每天变化。文件名中的YYYMMDD在那里,因为文件在移至S3之前都已进入服务器的一个目录中。
我想拥有1个或3个搜寻器,这些搜寻器将3个表传递到目录,每种类型的报告一个。这可能吗?我似乎无法指定
s3://chum-bucket/**/UsageReport*.zip
s3://chum-bucket/**/SearchReport*.zip
s3://chum-bucket/**/TimingReport*.zip
我可以编写一个不包含SearchReport和TimingReport的搜寻器,因此只能搜寻UsageReport。那是最好的方法吗?
还是我必须完全重新进行存储桶/文件夹/文件名设计?
答案 0 :(得分:1)
Amazon Redshift会加载给定路径中的所有文件,无论文件名如何。
Redshift将不会利用分区(Redshift Spectrum将使用分区,但不是正常的Redshift COPY语句),但是它将从给定路径内的任何子目录中读取文件。
因此,如果要将数据加载到单独的表(UsageReport,SearchReport,TimingReport)中,则它们必须位于单独的路径(目录)中。指定的目录层次结构中的所有文件都必须采用相同的格式,并将通过COPY
命令加载到同一表中。
另一种选择是,您可以使用清单文件指向特定文件,但这可能会变得混乱。
底线:将文件移到单独的目录。