【问题标题】:return list of columns that exceeds character length limit - pyspark/snowflake返回超过字符长度限制的列列表 - pyspark/snowflake
【发布时间】:2020-04-28 18:45:08
【问题描述】:

我遇到的问题是,在使用 pyspark 将数据帧写入雪花中的表时,我无法返回超过字符长度的所有列的列表。

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

(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

谢谢!

【问题讨论】:

    标签: pyspark jupyter-notebook snowflake-cloud-data-platform


    【解决方案1】:

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

    在将数据加载到 Snowflake 之前,我不知道有一种更动态的方法。

    【讨论】:

    • 感谢迈克的回复。作为要求的一部分,需要使用列长度来定义雪花表。我能想到的一个选项是获取每一列的最大值,然后对雪花表的列长度进行交叉检查。但是,我觉得这将是一个耗时的过程,因为大多数情况下列数可能超过 200。
    • 对超过长度的数据有什么要求?您应该截断它还是将记录删除?
    • 如果您对截断值感兴趣,您应该查看这个 URL,它允许您使用连接器的 truncate_columns 选项,这实际上将打开 @ 的 TRUNCATECOLUMNS 选项987654324@ 命令,这是连接器在后台利用的。 docs.snowflake.com/en/user-guide/…
    • 我需要更新雪花表模式,以便在将数据加载到列中时不会发生任何截断。目前的情况是我只能找出超过一列长度的文本。因此,我必须手动搜索该值,更改列长度,然后再次重新加载表,结果发现错误日志中出现了其他一些列数据。
    • 我的目的是看到一个选项,在执行 df.write 命令后,错误消息将列出所有已超过长度的列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2020-09-16
    • 2020-02-11
    • 1970-01-01
    相关资源
    最近更新 更多