02-Hive

简介: 02-Hive

一.常用 SQL

1.删除表

DROPTABLEifEXISTS ads_sense_rep.tmp_table_${bizdate};

2.清空表

TRUNCATETABLE db.table;

3.删除分区表指定数据

altertable ads_sense_rep.table_name

droppartition(partition_day ='2022-05-18');

### 4.是否重复数据

SELECT period_sdate, product_key, size_code, managing_city_no

FROM ads_sense_rep.ads_day_city_brand_sku_size_rep

GROUPBY period_sdate, product_key, size_code, managing_city_no

HAVINGCOUNT(*)>1;

5.迁移数据

insertinto ads_sense_rep.table_namepartition(partition_day)

SELECT`product_key`,

      `period_sdate`,

      `total30_sal_qty_store_rate`,

      `partition_day`

FROM ads_sense_rep.table_name;

6.修改表名

ALTERTABLE ads_sense_rep.table_nameRENAMETO ads_sense_rep.table_name;

7.创建临时表

DROPTABLEifEXISTS ads_sense_rep.tmp_table_${bizdate};

CREATETABLEifNOTEXISTS ads_sense_rep.tmp_table_${bizdate}AS

SELECTDISTINCT sku.product_code

FROM ads_sense_rep.table sku

WHERE sku.brand_detail_no='01'

 AND sku.gender_nameIN('男','女')

 AND sku.category_name1='鞋'

 AND sku.begin_dateISNOTNULL

;

8.批量插入数据

INSERT INTO ads_sense_rep.ads_dim_natural_year_week_info

( financial_year, financial_year_week, financial_year_start, financial_year_end, week_start_day, week_end_day)

VALUES

(2016, 1, '2016-01-01', '2016-12-31', '2016-01-01', '2016-01-03'),

(2016, 2, '2016-01-01', '2016-12-31', '2016-01-04', '2016-01-10'),

(2016, 3, '2016-01-01', '2016-12-31', '2016-01-11', '2016-01-17'),

(2016, 4, '2016-01-01', '2016-12-31', '2016-01-18', '2016-01-24'),

(2016, 5, '2016-01-01', '2016-12-31', '2016-01-25', '2016-01-31'),

(2025, 53, '2025-01-01', '2025-12-31', '2025-12-29', '2025-12-31');

9.with as 写法

WITH tmp_dim_pro_allinfo AS (

   SELECT product_key

   FROM bdc_dim.table

   WHERE gender_name = '女'

     AND category_name1 = '鞋'

     AND brand_detail_no = 'SD01'

)

SELECT *

FROM tmp_dim_pro_allinfo;

10.表插入更新

insert into table  #在表后直接插入,不去重


insert overwrite table   #将原表清空后,再插入数据。

二.不常用

1.创建表

-- 带分区

CREATE TABLE `ads_sense_rep.table_name`

(

   `product_key`                string COMMENT '商品主键',

   `period_sdate`               date COMMENT '日期(yyyy-mm-dd)',

   `size_code`                  string COMMENT '尺码',

   `total7_sal_qty_store_rate`  decimal(18, 4) COMMENT '累计7天转化率',

   `total30_sal_qty_store_rate` decimal(18, 4) COMMENT '累计30天转化率'

) PARTITIONED BY ( `partition_day` string);


-- 不带分区

CREATE TABLE `ads_sense_rep.tabel_name`

(

   `product_key`                string COMMENT '商品主键',

   `period_sdate`               date COMMENT '日期(yyyy-mm-dd)',

   `size_code`                  string COMMENT '尺码',

   `total7_sal_qty_store_rate`  decimal(18, 4) COMMENT '累计7天转化率',

   `total30_sal_qty_store_rate` decimal(18, 4) COMMENT '累计30天转化率'

) ;



-- 带描述

CREATE TABLE `ads_sense_rep.table_name`

(

   `product_key`  string COMMENT '商品主键',

   `period_sdate` date COMMENT '日期(yyyy-mm-dd)',

   `size_code`    string COMMENT '尺码'

) COMMENT '对方答复'

PARTITIONED BY (`partition_day` string);

创建分区表:

CREATE TABLE `db_name.table_name`

(

   `financial_year`                 int COMMENT '财年',

   `financial_year_week`            int COMMENT '财年第n周',

   `managing_city_no`               string COMMENT '城市编码',

   `etl_time`                       date COMMENT '处理时间'

) comment '城市-品类洞察-品牌概览表'

PARTITIONED BY (

 `partition_financial_year` INT

   ,`partition_financial_year_week` INT);

--插入数据

INSERT INTO TABLE db_name.table_name    PARTITION(partition_financial_year,partition_financial_year_week)

SELECT financial_year                         AS financial_year                 --财年

    , financial_year_week                    AS financial_year_week            --第几周

    , date_format(now(), 'yyyy-MM-dd')       AS etl_time                       --跑数时间

    , financial_year                         AS partition_financial_year       --分区财年

    , financial_year_week        AS partition_financial_year_week  --分区财年周

FROM ads_sense_rep.xxxxx distribute BY partition_financial_year,partition_financial_year_week,CAST(rand() * 20 AS INT)

;

2.修改表注释

ALTER TABLE ads_sense_rep.table_name SET TBLPROPERTIES ('comment' = '对方答复');

3.更新数据

update ads_sense_rep.table_name

set sex='女'  where id =1;

4.前一天

格式:${bizdate}

结果:20220608

date_sub(date_format(now(), 'yyyy-MM-dd'), 1)

date_format(now(), 'yyyy-MM-dd') AS etl_time --跑数时间

5.获取周开始结束

WHERE week_start_day >= date_sub(CURRENT_DATE, 6 + CAST(date_format(CURRENT_DATE, 'u') AS int)) --上周的第一天

 AND week_end_day <= date_sub(CURRENT_DATE, CAST(date_format(CURRENT_DATE, 'u') AS int)) --上周的最后一天

;

6.获取月开始结束

WHERE month_start_day >= trunc(add_months(CURRENT_DATE, -1), 'MM') --上个月的第一天

 AND month_end_day <= last_day(date_sub(CURRENT_DATE, DAY(CURRENT_DATE))) --上个月的最后一天

;

三.系统 SQL

1.hive 查询失败

需要先执行以下语句

set hive.compute.query.using.stats=false;

2.hive 导数据到 ck

INSERT

into

default.table_name

select

*

from

jdbc('ch-server','select * from ads_sense_rep.table_name')

3.刷新表

REFRESH TABLE bdc_dws.dws_day_org_pro_size_sal_ds;

4.设置 broadcastTimeout

set spark.sql.broadcastTimeout=30000;

5.耗时统计

select COUNT(*) as querySlowCnt from system.query_log WHERE query_duration_ms > 2000 and `type` = 2;

四.高阶使用

1.分区

INSERT INTO ads_sense_rep.ads_day_city_brand_sku_rep PARTITION(partition_day)

SELECT product_key

FROM bdc_dim.table;

2.分区区别

order by,sort by,distribute by,cluster by

  • oreder by: 主要是做全局排序。
  • sort by :局部排序
  • distribute by :分区
  • cluster by:当分区数量小于字段种类时,就有意义。
  • 当 distribute by 和 sort by 所指定的字段相同时,即可以使用 cluster by。
  • 注意:cluster by 指定的列只能是降序,不能指定 asc 和 desc。
相关文章
|
4月前
|
运维 IDE 前端开发
Notepad++深度解析:免费开源轻量代码编辑器,程序员高效编码首选
本文深度解析免费开源的Notepad++编辑器,突出其轻量高效、80+语言语法高亮、零广告无捆绑、离线可用等核心优势,直击传统编辑器卡顿、臃肿、收费等痛点,并提供官网正版入口(www.notepadi.cn)及实操指南,助力程序员打造高效编码环境。
1135 1
|
7月前
|
SQL 存储 分布式计算
五、Hive表类型、分区及数据加载
在 Hive 中设计表,绝不仅是“建个结构那么简单”。选对内部表或外部表,决定了数据的归属和生命周期;设计合理的静态/动态分区策略,则直接关系到大数据场景下的查询效率和存储管理成本。本文深入讲解 Hive 表类型与分区机制,配合大量实战代码与练习题,带你从“写对语法”走向“设计合理”,让你的数仓查询快到飞起!
625 11
|
SQL 数据库 数据库管理
SQL代码规范
【7月更文挑战第27天】SQL代码规范
773 5
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错之使用oracle-cdc的,遇到错误:ORA-01292: no log file has been specified for the current LogMiner session,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
关系型数据库 MySQL 数据库
LinkStack:优雅的外观,强大的功能,完美地融合了书签管理与分享
发现有趣GitHub项目LinkStack,它创建了一个个性化页面,用于分享多个链接,类似Linktree,但更灵活,允许用户自托管。项目已获2k星。通过Docker Compose部署简单,包括创建docker-compose.yml文件,启动服务,复制持久化目录并挂载。配置涉及语言选择、数据库设置、账号创建和系统配置。支持添加、删除链接,自定义主题,以及上传背景图。LinkStack是管理多链接的有效工具,有望进一步发展。
812 2
|
SQL 分布式计算 大数据
大数据开发SQL代码编码原则和规范
这段SQL编码原则强调代码的功能完整性、清晰度、执行效率及可读性,通过统一关键词大小写、缩进量以及禁止使用模糊操作如select *等手段提升代码质量。此外,SQL编码规范还详细规定了代码头部信息、字段与子句排列、运算符前后间隔、CASE语句编写、查询嵌套、表别名定义以及SQL注释的具体要求,确保代码的一致性和维护性。
710 0
|
JavaScript Windows
Windows安装ElasticSearch
Windows安装ElasticSearch
2857 2
|
缓存 NoSQL Java
SpringBoot - Spring缓存默认配置与运行流程
SpringBoot - Spring缓存默认配置与运行流程
434 1
|
存储 Java 调度
Spring Batch轻量级批处理实战
Spring Batch轻量级批处理实战
625 0

热门文章

最新文章