hive/postgresql日期时间范围查询数据,没有的数据补0

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: hive/postgresql日期时间范围查询数据,没有的数据补0

步骤一:生成临时表日历表

---临时日历表:calendar --涉及时间从2016-2043年,主要用于按时间维度补0操作   
CREATE TABLE num (i int);   
---创建一个表用来储存0-9的数字
INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
--- 生成0-9的数字,方便以后计算时间
drop table if exists calendar;
CREATE TABLE  if not exists calendar(datelist date); 
INSERT INTO calendar(datelist) 
SELECT    
  to_date('2016-1-1'::text,'yyyy-mm-dd')+cast(numlist.id||'days' as interval) AS "date"
FROM(    
  SELECT        
    n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000 AS id    
  FROM        
    num n1    
  CROSS JOIN num AS n10    
  CROSS JOIN num AS n100    
  CROSS JOIN num AS n1000
  )
  AS numlist;
---cj_year  临时时间adcode表(主要用于根据adcode查询对应时间的影像和(补0操作))
 create table cj_year(datelist date,adcode VARCHAR(20));
 INSERT into cj_year(datelist,adcode)
 SELECT    
   year,o.adcode
 from  
   satellite_productlevel_year
 CROSS JOIN
 (select       
      adcode   
  from district
  )o 
  where year is not null
---临时产品等级adcode表:cj_product_level
---主要用于根据adcode查询对应产品等级的影像和(补0操作)
  create table cj_product_level(product_level varchar(20),adcode VARCHAR(20))
  INSERT into cj_product_level(product_level,adcode)
    SELECT    
      product_level,o.adcode
    from  
      satellite_productlevel_year 
    CROSS JOIN(   
    select       
      adcode   
    from district)o
    where product_level is not null

步骤二:统计结果,借助临时表。两表进行unio后求sum

---过去一个星期每日影像下载数量---
def NumberOfTiffDownWeek(spark: SparkSession): Unit = {
  val dataFrame: DataFrame = spark.sql(
    """
      |SELECT
      |    date(dday) time,
      |    sum(ct) as num
      |FROM
      |    (
      |        SELECT
      |            datelist as dday,
      |            0 as ct
      |        FROM
      |            calendar
      |   where datelist>date_sub(current_timestamp,7) and datelist<current_timestamp
      |    UNION ALL
      |   select
      |    date_format(created_at,'yyyy-MM-dd') as dday,
      |    count(1) as ct
      |   from products
      |   where  datediff(current_timestamp, created_at)<7
      |   group by date_format(created_at,'yyyy-MM-dd')
      |  ) a
      |GROUP BY time
      |order by time
      |""".stripMargin)
  val transforDF =dataFrame.select(dataFrame.col("time").cast(StringType),dataFrame.col("num"))
  dataFrame2Json(transforDF, "过去一个星期每日影像下载数量")
  println("过去一个星期每日影像下载数量已更新至postgres")
}
---过去一个月每日影像入库景数---
def TotalNumTiffEveryDay(spark: SparkSession): Unit = {
  val dataFrame: DataFrame = spark.sql(
    """
      |SELECT
      |    date(dday) time,
      |    sum(ct) num
      |FROM
      |    (
      |        SELECT
      |            datelist as dday,
      |           0 as ct
      |        FROM
      |            calendar
      |   where datelist>date_sub(current_timestamp,30) and datelist<current_timestamp
      |    UNION ALL
      |   select
      |    date_format(storage_at,'yyyy-MM-dd') dday
      |    ,count(1) ct
      |   from image_package
      |   where datediff(current_timestamp, storage_at)<30
      |   GROUP by date_format(storage_at,'yyyy-MM-dd')
      |  ) a
      |GROUP BY time
      |order by time
      |""".stripMargin)
  val transforDF: DataFrame = dataFrame.select(dataFrame.col("time").cast(StringType),dataFrame.col("num"))
  dataFrame2Json(transforDF,"过去一个月每日影像入库景数")
  println("过去一个月每日影像入库景数已更新至postgres")
}


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
14天前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据文件
PostgreSQL的物理存储结构主要包括数据文件、日志文件等。数据文件按oid命名,超过1G时自动拆分。通过查询数据库和表的oid,可定位到具体的数据文件。例如,查询数据库oid后,再查询特定表的oid及relfilenode,即可找到该表对应的数据文件位置。
|
1月前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
272 1
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
51 4
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
71 3
|
2月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
41 2
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
96 0
|
SQL Cloud Native 关系型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
ADBPG(AnalyticDB for PostgreSQL)是阿里云提供的一种云原生的大数据分析型数据库
1295 1
|
数据可视化 关系型数据库 MySQL
将 PostgreSQL 迁移到 MySQL 数据库
将 PostgreSQL 迁移到 MySQL 数据库
1779 2
|
SQL 存储 自然语言处理
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词
在当今社交媒体的时代,人们通过各种平台分享自己的生活、观点和情感。然而,对于平台管理员和品牌经营者来说,了解用户的情感和意见变得至关重要。为了帮助他们更好地了解用户的情感倾向,我们可以使用PostgreSQL中的pg_jieba插件对这些发帖进行分词和情感分析,来构建一个社交媒体情感分析系统,系统将根据用户的发帖内容,自动判断其情感倾向是积极、消极还是中性,并将结果存储在数据库中。
玩转阿里云RDS PostgreSQL数据库通过pg_jieba插件进行分词