我正在使用Redshift数据库的Copy命令并将s3存储桶中的json文件存储到数据库。但是我收到此错误“溢出,列类型:整数”,错误代码为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
}
我在redshift中的表格如下
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文件数据类型不匹配,但我没有得到它。
答案 0 :(得分:2)
错误表明您尝试输入的值大于类型可以容纳的值,我可以从您的数据示例中看到id
取值大于171716771867
INTEGER
可以容纳的最大值。
Redshift中整数长度为4个字节,因此它们可以保存(2 ^ (8))^4 = 4294967296
个不同的值,这样我们可以得到范围:[-2147483648, 2147483647]
,或者可以从the official documentation中的表中读取它
解决方案是为您的数据使用不同的类型。如果您希望id为数字或使用文本字段,请使用Big Integer。 注意,我只扫描了您的示例输入1次溢出错误,可能需要更正其他字段的类型