我正在尝试使用清单文件加载镶木地板文件并出现错误。
查询:124138由于内部错误而失败。文件'https://s3.amazonaws.com/sbredshift-east/data/000002_0的版本号无效:)
这是我的复制命令
从“ s3://sbredshift-east/manifest/supplier.manifest”复制测试表 IAM_ROLE'arn:aws:iam :: 123456789:role / MyRedshiftRole123' 格式化为参数 清单;
这是我的清单文件
**{
"entries":[
{
"url":"s3://sbredshift-east/data/000002_0",
"mandatory":true,
"meta":{
"content_length":1000
}
}
]
}**
通过指定文件名,我可以使用复制命令加载相同的文件。
从's3:// sbredshift-east / data / 000002_0'复制测试表IAM_ROLE'arn:aws:iam :: 123456789:role / MyRedshiftRole123'FOR PARQUET;
INFO:加载到表“供应商”中的操作已完成,已成功加载800000条记录。 复制
我的复制声明中可能有什么问题?
答案 0 :(得分:0)
当content_length值错误时,将发生此错误。您必须指定正确的 content_length 。您可以执行 s3 ls 命令来检查它。
def date():
for num in numbers:
day = int(num[4:6])
print(day)
yield day
month = int(num[2:4]) - 20
print(month)
yield month
year = int(num[0:2])
if year < 10:
year2 = 2000 + int(num[1:2])
print(year2)
else:
year2 = 2000 + int(num[0:2])
print(year2)
yield year2
with open('C:\\Users\\X\\Desktop\\python\\Y\\Z.txt', 'a') as f:
for line in date():
f.write(line)
539(文件大小)应该与清单文件中的content_lenght值相同。
当您在直接复制命令中不需要此元值时,我不知道为什么他们使用此元值。
¯\ _(ツ)_ /¯
答案 1 :(得分:0)
我要获得拼写副本以使用清单文件的唯一方法是添加具有content_length的元密钥。
根据我收集到的错误日志中的内容,用于镶木地板(带有清单)的COPY命令可能首先是使用Redshift Spectrum作为外部表来读取文件的。如果是这种情况,则此隐藏步骤确实需要content_step,这与他们最初关于COPY命令的声明相矛盾。
https://docs.amazonaws.cn/en_us/redshift/latest/dg/loading-data-files-using-manifest.html