从 AWS Glue 更新插入到 Amazon Redshift

2023-12-04

据我所知,没有可以直接从 Glue 到 Redshift 执行的直接 UPSERT 查询。是否可以在粘合脚本本身中实现临时表概念?

所以我的期望是创建临时表,将其与目标表合并,最后删除它。可以在Glue脚本中实现吗?


通过将“postactions”选项传递给 JDBC 接收器,可以使用 Glue 中的临时表将 upsert 实现到 Redshift 中:

val destinationTable = "upsert_test"
val destination = s"dev_sandbox.${destinationTable}"
val staging = s"dev_sandbox.${destinationTable}_staging"

val fields = datasetDf.toDF().columns.mkString(",")

val postActions =
  s"""
     DELETE FROM $destination USING $staging AS S
        WHERE $destinationTable.id = S.id
          AND $destinationTable.date = S.date;
     INSERT INTO $destination ($fields) SELECT $fields FROM $staging;
     DROP TABLE IF EXISTS $staging
  """

// Write data to staging table in Redshift
glueContext.getJDBCSink(
  catalogConnection = "redshift-glue-connections-test",
  options = JsonOptions(Map(
    "database" -> "conndb",
    "dbtable" -> staging,
    "overwrite" -> "true",
    "postactions" -> postActions
  )),
  redshiftTmpDir = s"$tempDir/redshift",
  transformationContext = "redshift-output"
).writeDynamicFrame(datasetDf)

确保用于写入 Redshift 的用户有足够的权限在暂存架构中创建/删除表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 AWS Glue 更新插入到 Amazon Redshift 的相关文章

随机推荐

  • Azure VNET 子网委派

    有人可以帮助解释 Azure 中的子网委托吗 我读过以下文章 但它并没有真正解释任何内容 https learn microsoft com en us azure virtual network subnet delegation ove
  • 将命令按钮添加到 Windows 登录屏幕 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想为 Windows 用户实现自我重置密码功能 当登录屏幕提示时 应向域用户显示忘记密码按钮 该按钮将引导用户进入密码重置向导 所以问题是如何向标准 Windows 登录屏幕添
  • 如果单击子菜单项,请避免关闭菜单

    这是一个多级菜单 当我单击 关于 链接时 它会打开包含 3 个链接 Johnny Julie 和 Jamie 的子菜单 当我再次单击 关于 时 它会关闭菜单 单击子菜单也会关闭菜单 这是我想避免的 如果我单击子菜单 约翰尼 朱莉和杰米 如何
  • Visual Studio 2013 不断崩溃并出现错误 denev.exe [重复]

    这个问题已经存在了 所以我有一台运行 Windows 10 和 Visual Studio Ultimate 2013 的机器 但是每次我启动该程序 它都会在 1 分钟内崩溃 甚至没有移动鼠标 当它崩溃时 它会给出以下错误 devenv e
  • 从 JSON 模式生成 C# 类 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在创建一个 C WCF Web 服务 它以 JSON 格式返回大量数据 客户端是一个iPad应用程序 目前正在由另一个团队开发 所以我正在研究规
  • 罐子不匹配!修复你的依赖关系

    重现步骤 创建一个android项目 MyApp 导入 ActionBarSherlock ABS Directional ViewPager DVP 或任何其他使用 Android 支持库的开源库 将库添加到项目 MyApp 中 控制台日
  • 有什么方法可以获取Java中字符串的大小(以字节为单位)?

    我需要文件中每行的大小 以字节为单位 这样我就可以获得读取的文件的百分比 我已经得到了文件的大小file length 但是如何获得每条线的大小 final String hello str Hello World hello str ge
  • uint 之间的差异可以为负数

    我有一个关于 C C 中无符号整数的问题 它们以及对它们的运算结果应始终为正或等于零 但与 uint16 t 的差异看起来并非如此 uint 在 C 头文件 cstdint 中定义 下一个程序采用 错误 分支 uint16 t beg 7
  • Django 如何知道渲染表单字段的顺序?

    如果我有一个 Django 表单 例如 class ContactForm forms Form subject forms CharField max length 100 message forms CharField sender f
  • Android Studio错误:数据错误循环冗余检查

    我正在开发一个项目 这需要我重新安装最新版本的 Android Studio 安装后 当我打开项目时 我收到此错误 我已经尝试过可用的单一答案 但它不起作用 我正在使用最新版本的 Android Studio 3 1 1 错误 数据错误 循
  • 未找到 Django related_name

    我有这个模型 class Person models Model something employers models ManyToManyField self blank True related name employees 当我做pe
  • Bootstrap 按钮问题:按钮杂乱无章,无法并排放置

    我正在从事一个房地产网站项目 我已经创建了 Photoshop 模板并将其上传到 Behance https www behance net csc103falld848 现在 我正在创建房地产商店模板的静态版本 我面临一个问题 我无法将按
  • PHP DOM 从第一个 ul 元素获取项目

    我有 html 文件 如下所示 ul li item 1 li li item 2 li li item 3 li ul ul li smth 1 2 3 li li another li ul ul li smth 1 2 3 li li
  • 当类层次结构中存在原始类型时,为什么 Scala 会抱怨非法继承?

    我正在编写一个采用 Scala 的包装器ObservableBuffer并激发与兼容的事件Eclipse JFace 数据绑定框架 在数据绑定框架中 有一个抽象ObservableList装饰一个普通的 Java 列表 我想重用这个基类 但
  • 以编程方式启用 Adob​​e PDF 使用权限

    有没有办法以编程方式从 net 代码启用 Adob e PDF 使用权限 我正在使用 ITextSharp 库用 XML 数据 从应用程序生成 填充 XFA 表单 但输出的 PDF 没有启用使用权限 因此用户无法与其交互 这通常不会成为问题
  • SQLite中根据Radius查询获取记录?

    我有这个查询在 MySQL 中运行良好 SELECT ACOS SIN 12 345 PI 180 SIN lat PI 180 COS 12 345 PI 180 COS lat PI 180 COS 67 89 lon PI 180 1
  • 我什么时候应该使用 Struct 和 OpenStruct?

    一般来说 与 Struct 相比 使用 OpenStruct 的优点和缺点是什么 哪些类型的一般用例适合这些用例 With an OpenStruct 可以任意创建属性 AStruct另一方面 必须在创建它时定义其属性 选择其中一种应主要取
  • 在 x86_64 上汇编 i386 代码

    以下代码无法按预期工作 intel syntax noprefix arch i386 data hello world ascii Hello world n hello world end equ hello world len hel
  • 使用 %b 格式化日期时的 R strptime 问题

    在标记为重复之前 我尝试了一些其他解决方案 即 R strptime b 尝试将字符转换为日期格式 strptime as POSIXct 和 as Date 返回意外的 NA 但似乎都不适合我 我正在尝试转换时间格式Dec 18到 POS
  • 从 AWS Glue 更新插入到 Amazon Redshift

    据我所知 没有可以直接从 Glue 到 Redshift 执行的直接 UPSERT 查询 是否可以在粘合脚本本身中实现临时表概念 所以我的期望是创建临时表 将其与目标表合并 最后删除它 可以在Glue脚本中实现吗 通过将 postactio