目录
大数据:
1 HIVE:
1.1 HIVE QL
1.1.1 创建表
1.1.2 更新表
1.1.3 常用语句
1.2 hive参数配置
DDL中常用的命令有:create,drop,alter,truncate和rename等等。而,DML中常用的命令有:insert,update,delete和select等等
CREATE TABLE ads_ql_jg_jhxm_1day (
xzqhdm string comment '行政区划代码' ,
sscsdm string comment '所属城市代码' ,
yskzjbm string comment '原始库主键编码' ,
xmmc string comment '项目名称' ,
xmlx string comment '项目类型' ,
zgdw string comment '主管单位' ,
xmnr string comment '项目内容' ,
jhnd int comment '计划年度' ,
xmjszq int comment '项目建设周期' ,
xmtze decimal(13,3) comment '项目投资额' ,
bz string comment '备注' ,
sjtbzt string comment '数据同步状态' ,
sjtbsj timestamp comment '数据同步时间' ,
kjxx string comment '空间信息'
)
COMMENT '桥梁计划项目属性结构表'
partitioned by (partition_time string)
ROW FORMAT DELIMITED FIELDS
TERMINATED BY ',' stored as orc;
CREATE EXTERNAL TABLE page_view
(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
country STRING COMMENT 'country of origination'
)
COMMENT 'page_view'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\054' --指定字段分隔符,这里我们使用逗号分隔符
--FIELDS TERMINATED BY '\t':制表符(\t)作为字段分隔符。
STORED AS TEXTFILE
LOCATION '';
创建分桶表
CREATE TABLE par_table
(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING COMMENT 'IP Address of the User'
)
COMMENT 'par_table'
PARTITIONED BY(date STRING, pos STRING) --2级分区
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS --根据 userid 列进行分桶,并在每个桶内按照 viewTime 列进行排序
ROW FORMAT DELIMITED '\t'
FIELDS TERMINATED BY '\n'
STORED AS ORC;
--删除表
DROP TABLE table_name;
--删除多个分区
ALTER TABLE table_name DROP PARTITION (statis_date='20230701'), PARTITION (statis_date='20230702');
--删除一个分区范围
--删除 2023-07-01 到 2023-07-10 的日分区
ALTER TABLE table_name DROP PARTITION (statis_date BETWEEN '20230701' AND '20230710');
--重命名表
ALTER TABLE table_name RENAME TO new_table_name;
--修改列的名字、类型、位置、注释
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
--这个命令可以允许改变列名、数据类型、注释、列位置或者它们的任意组合,例子如下
--将dwd_test_d 表中的orderid 字段修改为order_id,并把字段类型和注释更新成新的
ALTER TABLE dwd_test_d CHANGE COLUMN orderid order_id string comment '订单号';
--新增字段
ALTER TABLE employee ADD COLUMNS (salary double COMMENT '员工薪水');
--复制一个空表
CREATE TABLE empty_key_value_store LIKE key_value_store;
--插入数据的语句
INSERT INTO table VALUES (value1, value2, ...),(value1, value2, ...), ...
--往分区表写入的语句
insert overwrite table dwd_test_d partition (partition_time='20230524')
select
...
from
table_name
--快速创建备份表
create table ads_ql_jg_wqzzjl_full_20230711 stored as orc as
select
*
from
ads_ql_jg_wqzzjl_full
--hive取昨天日期
regexp_replace(substr(date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP()),1),1,10),'-','')
--hive取明天日期
regexp_replace(substr(date_add(FROM_UNIXTIME(UNIX_TIMESTAMP()),1),1,10),'-','')
--时间戳
from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as etl_time
--hive取当前日期
DATE_FORMAT(CURRENT_DATE(), 'yyyyMMdd')
--开窗函数
row_number() over( partition by a.id, a.create_date order by etl_time desc) as rn
--行转列
select
分类字段,
concut_ws('',collet_set (合并字段)) as 别名
from table_name
group by
分类字段
--列转行
select
字段,
字段别名
from table_name
lateral view explode (split(拆分字段,分隔符)) 表别名 as 字段别名
每天把分区表中新增和修改的数据插入到DWD表中
insert overwrite table dwd_ps_jg_xqrb_full
select
sscsbm,
sscs,
xzqhdm,
xzqhmc,
...
...
...
from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss') as etl_time --etl处理时间
from
(
select
a.*,
row_number() over(partition by a.jyjlbm,a.jyxxbm order by etl_time desc) as rn
from
(
select
sscsbm,
sscs,
xzqhdm,
xzqhmc,
...
...
...
etl_time --etl处理时间
from
dwd_ps_jg_xqrb_full
union all
select
sscsbm,
sscs,
xzqhdm,
xzqhmc,
...
...
...
from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss') as etl_time --etl处理时间
from
mid_dwd_ps_jg_xqrb_inc
where
partition_time = '${lastDay}'
) a
) b
where
rn = 1
set mapred.job.name=任务名称;--设置MR任务名称
--2个分桶表JOIN设置参数--start
--执行Join操作时,基于排序后的数据进行高效的连接。
set hive.auto.convert.sortmerge.join=true;
--基于分桶的Map Join通过将数据按照相应的分桶策略分配到不同的桶中,然后在执行 Join 操作时,只处理涉及到的特定桶的数据,避免了全表扫描的开销,提高了查询效率。
set hive.optimize.bucketmapjoin = true;
--Sort-Merge Join 通过对参与 Join 操作的表按照 Join 键进行排序,从而实现高效的连接操作。它可以避免传统的 Hash Join 算法所带来的内存开销和数据倾斜的问题。
set hive.optimize.bucketmapjoin.sortedmerge = true;
--2个分桶表JOIN设置参数--end
set hive.map.aggr=true; --启用 hive.map.aggr 参数后,Hive 将在 Map 阶段进行部分聚合操作,减少数据传输的数量。具体来说,Map 端会对局部数据进行聚合,将相同键的数据合并在一起,然后再传输给 Reduce 端进行最终的聚合操作。这样做的好处是减少了数据传输量,减轻了网络负载,从而提高了查询性能。尤其在处理大规模数据集时,启用 Map 端聚合功能可以有效减少整体作业的执行时间。但可能会增加 Map 阶段的内存消耗。
--建表语句
CREATE TABLE ods_ps_jc_ssjc
(
`bsm` varchar(32) NOT NULL comment "标识码"
,`dwbsm` varchar(32) NOT NULL comment "点位标识码"
,`jczb` varchar(32) NOT NULL comment "监测指标"
,`jcz` decimal(20,2) NOT NULL comment "监测值"
,`jccjsj` DATETIME NOT NULL comment "监测采集时间"
,`jcsbsj` DATETIME NOT NULL comment "监测上报时间"
,`bz` varchar(255) comment "备注"
)
DUPLICATE KEY(`bsm`,`dwbsm`,`jczb`)
DISTRIBUTED BY HASH(`bsm`) BUCKETS 1
PROPERTIES(
"replication_allocation" = "tag.location.default: 1"
);
--创建动态分区表
CREATE TABLE doris_d.ods_ql_jc_ssjc_inc (
BSM VARCHAR(32) comment '标识码'
,DWBSM VARCHAR(32) comment '点位标识码'
,JCZB VARCHAR(32) comment '监测指标'
,JCZ decimal(20,2) comment '监测值'
,JCCJSJ DATETIME comment '监测采集时间'
,JCSBSJ DATETIME comment '监测上报时间'
,BZ VARCHAR(255) comment '备注'
,YSKZJBZ VARCHAR(64) comment '原始库主键标志'
,SJTBZT VARCHAR(16) comment '数据同步状态'
,SJTBSJ DATETIME comment '数据同步时间'
,SSCSDM VARCHAR(6) comment '所属城市代码'
,EXTRACT_TIME DATETIME comment '抽取时间'
)
DUPLICATE KEY(`BSM`)
COMMENT '桥梁实时监测属性结构表'
PARTITION BY RANGE(SJTBSJ) ()
DISTRIBUTED BY HASH(`SJTBSJ`) BUCKETS 1
PROPERTIES(
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "2",
"replication_allocation" = "tag.location.default: 1"
);
--查询表中分区
SHOW PARTITIONS FROM doris_d.ods_ql_jc_ssjc_inc;
--查询建表语句
SHOW CREATE TABLE doris_d.ods_ql_jc_ssjc_inc
--查询表中某个分区
select * from doris_d.ods_ql_jc_ssjc_inc PARTITION p20230722