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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据文件
PostgreSQL的物理存储结构主要包括数据文件、日志文件等。数据文件按oid命名,超过1G时自动拆分。通过查询数据库和表的oid,可定位到具体的数据文件。例如,查询数据库oid后,再查询特定表的oid及relfilenode,即可找到该表对应的数据文件位置。
104 1
|
3月前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
691 1
|
4月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
76 4
|
4月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
140 3
|
4月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
65 2
|
4月前
|
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
164 0
|
6月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
699 0
|
6月前
|
SQL 关系型数据库 HIVE
实时计算 Flink版产品使用问题之如何将PostgreSQL数据实时入库Hive并实现断点续传
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
232 1