将ods库中order_master表昨天的分区(任务一生成的分区)数据抽取到dwd库中fact_order_master的动态分区表,分区字段为etl_date,类型为String,取create_time值并将格式转换为yyyyMMdd, 并添加dwd_insert_user、dwd_insert_time、dwd_modify_user、dwd_modify_time四列,其中dwd_insert_user、dwd_modify_user均填写“user1”,dwd_insert_time、dwd_modify_time均填写当前操作时间, 并进行数据类型转换,需要过滤掉city字段长度大于8。使用hive cli执行show partitions dwd.fact_order_info命令;
编写运行代码块
package moniceshi
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.{current_timestamp, date_format, date_trunc, lit}
object test3_qx {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.master("local[*]")
.appName("ods")
.enableHiveSupport()
.getOrCreate()
Test1(spark)
}
def Test1(spark: SparkSession): Unit = {
val order = spark.sql("select * from ods.order_master")
order
.withColumn("dwd_insert_user", lit("user1"))
.withColumn("dwd_insert_time", date_trunc("sceon", current_timestamp()))
.withColumn("dwd_modify_user", lit("user1"))
.withColumn("dwd_modify_time", date_trunc("sceon", current_timestamp()))
.write
.mode("overwrite")
.partitionBy("etl_date")
.saveAsTable("dwd.fact_order_master")
spark.table("dwd.fact_order_master").show()
spark.sql("show partitions fact_order_info").show()
}
分析:
- 需要掌握scala
- hive和MySQL数据库
- 一点点的java
如果还有什么问题可以私信找博主解决,这一板块的离线清洗并不难,重点在于对数据的了解,以及spark sql 或 spark dataframe api 的运用,还有hive的一些基本命令