使用复制命令和清单文件将镶木地板格式文件加载到Amazon Redshift中时出错

时间:2019-07-09 00:40:52

标签: amazon-redshift parquet

我正在尝试使用清单文件加载镶木地板文件并出现错误。

查询: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条记录。 复制

我的复制声明中可能有什么问题?

2 个答案:

答案 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