由于 VARCHAR/TEXT 字符的字符串长度限制,尝试执行合并到 Redshift 表时胶水作业失败

问题描述 投票:0回答:1

我们有数百个 Glue 作业将数据从 S3 和 RDS 移动到 Redshift。当从源系统生成新数据然后移动到 Redshift 时,我们需要执行更新插入,即插入新记录并更新现有记录,以确保 Redshift 表中没有重复项。

问题是,当完成 Glue 作业(使用 Visual Studio)更新插入时,会创建一个临时表。此临时表的问题在于,对于 VARCHAR 数据类型的列,默认限制为 255。我们的数据通常包含长度大于 255 的 VARCHAR 字符列(例如描述字段)。因此,作业经常失败并出现错误:字符串长度超过 DDL 长度。

我们尝试了 Glue Visual Studio 中可用的各种转换来插入长度超过 255 的 varchar 数据。

我们的期望是将超过 255 个字符的描述字段插入到目标 Redshift 表列中。关于如何实现这一目标有什么想法吗?

amazon-redshift aws-glue
1个回答
0
投票

我在我的计算机上复制了设置,以在测试表中执行从 S3 到 Redshift 的更新插入。

表结构:

CREATE TABLE public.test (
    id integer ENCODE az64,
    name character varying(256) ENCODE lzo,
    salary bigint ENCODE az64,
    jd character varying(300) ENCODE lzo
) DISTSTYLE AUTO;

看起来像是 Glue Visual Studio 中的一个错误,当我在“jd”列中插入超过 255 个字符时,遇到了类似的错误消息。

根本原因:- 使用 Glue Visual Studio 在 Preactions 中创建的临时表存在问题,它为字符串列创建默认 Varchar 数据类型,默认限制为 255。此外,我们无法使用 Visual ETL 控制临时表接近。

解决方案:- 当前的工作解决方案需要将可视化作业转换为脚本,因为我们没有在可视化模式下更改临时表的数据类型大小的选项。

1. Go to Job -> Navigate to Script -> Edit script

2. Update the Preaction statement's temp table create statement to change the Varchar size based on a number of characters you are expecting in Description columns as below:

"preactions": DROP TABLE IF EXISTS public.test_temp_df5c11; CREATE TABLE public.test_temp_df5c11 (id int, name VARCHAR, salary VARCHAR, jd VARCHAR(300));",
    },

手动编辑 preaction 语句后,我能够插入数据。

© www.soinside.com 2019 - 2024. All rights reserved.