PySpark 使用“覆盖”模式保存到 Redshift 表会导致删除表?
Posted
技术标签:
【中文标题】PySpark 使用“覆盖”模式保存到 Redshift 表会导致删除表?【英文标题】:PySpark save to Redshift table with "Overwirte" mode results in dropping table? 【发布时间】:2018-05-21 05:50:10 【问题描述】:在 AWS Glue 中使用 PySpark 将数据从 S3 文件加载到 Redshift 表中,在代码使用模式(“Overwirte”)中出现错误,指出“无法删除表,因为其他对象依赖于表”,结果是在该表之上创建的视图,接缝“覆盖”模式实际上删除并重新创建红移表然后加载数据,是否有任何选项只能“截断”表而不删除它?
【问题讨论】:
【参考方案1】:AWS Glue 使用databricks spark redshift connector(它没有在任何地方记录,但我凭经验验证了这一点)。 Spark redshift 连接器的文档提到:
覆盖现有表:默认情况下,此库使用事务来执行覆盖,通过删除目标表、创建新的空表并向其追加行来实现。
【讨论】:
【参考方案2】:这里有一个与您的问题相关的讨论,他们使用截断而不是覆盖,也是 lambda 和胶水的组合。详细讨论和代码示例请参考here。希望这会有所帮助。
问候
【讨论】:
该线程谈到使用两个作业首先截断 Redshift 表并运行 AWS Glue 作业来加载数据。我正在尝试在一项 Glue 作业中找到一种方法来实现这一点,即插入连接到 Redshift db 并截断目标表然后加载数据的代码,这可能吗?有示例代码吗?以上是关于PySpark 使用“覆盖”模式保存到 Redshift 表会导致删除表?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Databrick/PySpark 覆盖/更新 Azure Cosmos DB 中的集合