我的编程空间,编程开发者的网络收藏夹
学习永远不晚

spark-sql中视图关联表结果不匹配问题

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

spark-sql中视图关联表结果不匹配问题

spark-sql中视图关联表结果不匹配问题

在sparkSQL 中将计算结果保存为视图,关联其他表后出现结果匹配错误,通过分析发现,是因为sql语句中使用了表达式

row_number() over(order by 1)

其实该表达式并没有执行,真正执行的时候是需要触发action (例如 show, count, top .......)算子的。或者在保存为视图之前,将结果持久化到内存中。

(1)结果不匹配

      println(" --------增加自增列,保存为视图----------- ")
      sqlBF.setLength(0)
      sqlBF.append(" select row_number() over(order by 1) as id, ")
      sqlBF.append("   a.* from students a                       ")
      val addId = sqlC.sql(sqlBF.toString)
      addId.createOrReplaceTempView("temp_addid")
      println(" --------增加自增列成功----------- ")


      println("---------视图关联其他表-------")
      sqlBF.setLength(0)
      sqlBF.append(" select a.id, a.student_name, a.class_id, ")
      sqlBF.append("        b.class_name, b.teacher,          ")
      sqlBF.append("     from  temp_addid  a,                 ")
      sqlBF.append("           class       b                  ")
      sqlBF.append("  where a.class_id = b.class_id           ")
      val results = sqlC.sql(sqlBF.toString)

      results.show()

(2)带表达式的,在保存为视图之前,将结果持久化到内存中

      println(" --------增加自增列,保存为视图----------- ")
      sqlBF.setLength(0)
      sqlBF.append(" select row_number() over(order by 1) as id, ")
      sqlBF.append("   a.* from students a                       ")
      val addId = sqlC.sql(sqlBF.toString)
      addId.persist() //持久化到内存中
      addId.createOrReplaceTempView("temp_addid")
      println(" --------增加自增列成功----------- ")


      println("---------视图关联其他表-------")
      sqlBF.setLength(0)
      sqlBF.append(" select a.id, a.student_name, a.class_id, ")
      sqlBF.append("        b.class_name, b.teacher,          ")
      sqlBF.append("     from  temp_addid  a,                 ")
      sqlBF.append("           class       b                  ")
      sqlBF.append("  where a.class_id = b.class_id           ")
      val results = sqlC.sql(sqlBF.toString)

      results.show()

(3)或者直接保存为table

println(" --------增加自增列,保存为视图----------- ")
      sqlBF.setLength(0)
      sqlBF.append(" select row_number() over(order by 1) as id, ")
      sqlBF.append("   a.* from students a                       ")
      val addId = sqlC.sql(sqlBF.toString)
      hc.saveTable(addId , "temp_addid  ") //保存为table
      println(" --------增加自增列成功----------- ")


      println("---------table关联其他表-------")
      sqlBF.setLength(0)
      sqlBF.append(" select a.id, a.student_name, a.class_id, ")
      sqlBF.append("        b.class_name, b.teacher,          ")
      sqlBF.append("     from  temp_addid  a,                 ")
      sqlBF.append("           class       b                  ")
      sqlBF.append("  where a.class_id = b.class_id           ")
      val results = sqlC.sql(sqlBF.toString)

      results.show()

  如果视图中没有使用类似的计算表达式,不做持久化操作,直接保存为视图,然后关联其他表是不会 影响结果的,使用视图只是将大量的SQL进行分解,简化计算。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

spark-sql中视图关联表结果不匹配问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

spark-sql中视图关联表结果不匹配问题

在sparkSQL 中将计算结果保存为视图,关联其他表后出现结果匹配错误,通过分析发现,是因为sql语句中使用了表达式row_number() over(order by 1)其实该表达式并没有执行,真正执行的时候是需要触发action (例如 show, c
spark-sql中视图关联表结果不匹配问题
2020-08-03

编程热搜

目录