Redshift 复制命令错误“溢出,列类型:整数”

Posted

技术标签:

【中文标题】Redshift 复制命令错误“溢出,列类型:整数”【英文标题】:Redshift Copy Command Error "Overflow, Column type: Integer" 【发布时间】:2017-09-25 19:57:12 【问题描述】:

我正在使用 Redshift 数据库的 Copy 命令并将 json 文件从 s3 存储桶存储到数据库。但我收到此错误“溢出,列类型:整数”,错误代码为 1216,json 文件中的行号为 33。

这是我的 json 文件:

             
                "id": 119548805147,
                "title": "Shoes",
                "vendor": "xyz",
                "product_type": "",
                "handle": "shoes",
                "options": [
                    
                        "id": 171716739099,
                        "product_id": 119548805147,
                        "name": "Size",
                        "position": 1,
                        "values": [
                            "9",
                            "10",
                            "11"
                        ]
                    ,
                    
                        "id": 171716771867,
                        "product_id": 119548805147,
                        "name": "Color",
                        "position": 2,
                        "values": [
                            "Red",
                            "white",
                            "Black"
                        ]
                    
                ],
                "images": [],
                "image": null
               //line number 33
            
                "id": 119548805147,
                "title": "Shoes",
                "vendor": "xyz",
                "product_type": "",
                "handle": "shoes",
                "options": [
                    
                        "id": 171716739099,
                        "product_id": 119548805147,
                        "name": "Size",
                        "position": 1,
                        "values": [
                            "9",
                            "10",
                            "11"
                        ]
                    ,
                    
                        "id": 171716771867,
                        "product_id": 119548805147,
                        "name": "Color",
                        "position": 2,
                        "values": [
                            "Red",
                            "white",
                            "Black"
                        ]
                    
                ],
                "images": [],
                "image": null
            

我的红移表格如下

CREATE TABLE products (
    "_id" int4 DEFAULT "identity"(297224, 0, '1,1'::text),
    "id" int4,
    title varchar(50),
    product_type varchar(200),
    vendor varchar(200),
    handle varchar(200),
    variants_id int4,
    "options" varchar(65535),
    images varchar(65535),
    image varchar(65535)
);

我在 Redshift 中的复制命令在这里:

copy products
from 's3://kloudio-data-files'
access_key_id 'my access key'
secret_access_key 'my secret key'
json 'auto'

我认为列和 json 文件数据类型不匹配,但我不明白。

【问题讨论】:

【参考方案1】:

错误表明您尝试输入的值大于类型可以容纳的值,我可以从您的数据样本中看到id 的值171716771867 大于最大值INTEGER可以持有。

整数在 Redshift 中是 4 个字节长,因此它们可以保存 (2 ^ (8))^4 = 4294967296 不同的值,这为我们提供了范围:[-2147483648, 2147483647],或者可以从 the official documentation 中的表中读取它

解决方案是为您的数据使用不同的类型。如果您希望 id 为数字或使用文本字段,请使用大整数。 请注意,我只扫描了您的示例输入中的 1 个溢出错误,可能需要更正其他字段的类型

【讨论】:

以上是关于Redshift 复制命令错误“溢出,列类型:整数”的主要内容,如果未能解决你的问题,请参考以下文章

如何忽略错误但不跳过 redshift 复制命令中的行

将 csv 文件从 s3 复制到 redshift 的问题

使用复制命令将 Json 文件加载到 redshift

使用复制命令和清单文件将 parquet 格式文件加载到 Amazon Redshift 时出错

将 txt 文件复制到 Redshift

在 Redshift 中复制 JSON 列