返回超过字符长度限制的列列表-pyspark/snowflake

返回超过字符长度限制的列列表-pyspark/snowflake,pyspark,jupyter-notebook,snowflake-cloud-data-platform,Pyspark,Jupyter Notebook,Snowflake Cloud Data Platform,我面临一个问题,在使用pyspark将数据帧写入snowflake中的表时,无法返回超过字符长度的所有列的列表 如何一次返回列列表,而不是更新每一列,重新运行该命令,然后在另一列上遇到相同的问题,并重复该过程,直到所有列的长度都固定 (df.write \ .format(SNOWFLAKE_SOURCE_NAME) .options(**sfWriteOptions) .option("schema",schemaname) .option("dbtabl

我面临一个问题,在使用pyspark将数据帧写入snowflake中的表时,无法返回超过字符长度的所有列的列表

如何一次返回列列表,而不是更新每一列,重新运行该命令,然后在另一列上遇到相同的问题,并重复该过程,直到所有列的长度都固定

(df.write \
    .format(SNOWFLAKE_SOURCE_NAME) 
    .options(**sfWriteOptions) 
    .option("schema",schemaname) 
    .option("dbtable",targettable) 
    .mode('overwrite') 
    .save())

net.snowflake.client.jdbc.SnowflakeSQLException: User character length limit (30) exceeded by string

谢谢大家!

Snowflake非常独特,因为在表中定义字符串(甚至整数)的长度没有好处。它没有空间或性能优势。因此,一个想法是重新定义表,使它们不必定义长度。如果不可能,可以创建一个没有长度的临时表,从spark加载到该表,然后在插入到最终表之前评估字段长度


在将数据加载到Snowflake之前,我不知道有什么更具动态性的方法可以做到这一点。

谢谢您的回复。雪花表需要定义列长度作为需求的一部分。我可以想到的一个选项是获取每个列的最大值,然后对snowflake表的列长度进行交叉检查。但是,我觉得这将是一个耗时的过程,因为大多数情况下,列数可能超过200。对于如何处理超出长度的数据,有什么要求?您应该将其截断还是将记录作为坏记录删除?如果您对截断值感兴趣,您应该查看此URL,它允许您为连接器使用
truncate_columns
选项,这将基本上打开
COPY to
命令的
TRUNCATECOLUMNS
选项,这就是连接器在后台使用的功能。我需要更新雪花表模式,以便在将数据加载到列中时不会发生任何截断。目前的情况是,我只能找到超过一列长度的文本。因此,我必须手动搜索该值,对列长度进行更改,然后再次重新加载该表,结果发现错误日志中出现了一些其他列数据。我的目的是查看一个选项,在执行df.write命令后,错误消息将列出长度已超过的所有列。