Redshift - 将文本列插入数据库表的问题

Posted

技术标签:

【中文标题】Redshift - 将文本列插入数据库表的问题【英文标题】:Redshift - Issue inserting text column to Database table 【发布时间】:2018-07-05 08:35:10 【问题描述】:

我正在尝试使用 python 将数据从 JIRA 更新到 Redshift DB。我在更新“描述”列中的值时遇到问题。 DB 中的目标列是 varchar 类型。

下面是我如何在将“描述”列插入 Redshift DB 之前对其进行修改。

df['description'] = df['description'].astype(str)

它会抛出以下错误:

DataError: value too long for type character varying(256)

我在插入此字段时做错了什么。描述列中的值的长度最多为 6000 个字符。

对此有任何帮助,将不胜感激..

【问题讨论】:

【参考方案1】:

可能与this 重复。

df['description'] = df['description'].str.slice(0,255)

评论后编辑 这是我的完整工作示例。

import pandas as pd

d = 'name' : pd.Series(['FFFFF', 'FFFFF', 'FFFFFGGGGg'], index=['a', 'b', 'c']),
     'description' : pd.Series(['FFFFF', 'FFFFF', 'FFFFFGGGGg','4666666666'], index=['a', 'b', 'c', 'd']),
     'place' : pd.Series(['166666660', '26666666660', '3666666660'], index=['a', 'b', 'c'])

df = pd.DataFrame(d)
print ("Our dataframe is:")
print (df)

print ("Modifying column description:")

df['description'] = df['description'].str.slice(0,4)
print(df)

【讨论】:

感谢您的回复。尝试使用您的建议“df['description'].str.slice(0,255)”。它会抛出一个错误“ProgrammingError: can't adapt type 'dict'”。 不确定为什么会出现异常,我刚刚添加了完整的工作示例,这是我之前分享的一行。希望对您有所帮助。 我认为,无法适应可能是因为数据类型不匹配,但不确定。 想知道如何解决这个问题,因为我的源列长度超过 256 个字符,但目标列类型是 varchar。相信这会导致问题.. str.slice(0,4) 正在将原始长度转换为 4 个字符,同样 (0,255) 将从任何长度截断为 255 个字符。

以上是关于Redshift - 将文本列插入数据库表的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 文件加载到 Redshift 表的单个列

如果列数不同,如何处理从源 spark df 到 hive 表的插入

在 Redshift 中插入列的子字符串

插入数据:查看哪一列导致 Redshift 上的数字溢出

根据 Redshift 中其他表的条目在表中插入值

Redshift ROW_ID 列换行?