任务一
创建库及外部表
在 comm 数 据 库 下 创 建 一 个 名 为 dws_behavior_log的外部表,如果表已存在,则先删除;分 区字段为dt,即根据日期进行分区;另外,要求指定表的存 储路径为HDFS的/behavior/dws/dws_behavior_log目录,存储文件类型为“orc”,文件的压缩类型为“snappy”;字段类型如下表所示;
字段类型表
字段 数据类型 说明 client_ip string 客户端请求的IP地址 device_type string 请求的设备类型,手机mobile或者电脑PC type string 上网的模式,4G,5G或WiFi device string 设备ID url string 访问的资源路径 province string 省份 city string 城市
答:
1,在comm数据库下创建一个名为dws_behavior_log的外部表,如果表已存在,则先删除,分区字段为dt,即根据日期进行分区,另外,要求指定表的存储路径为HDFS的/behavior/dws/dws_behavior_log目录,存储类型为“orc”,文件的压缩类型为“snappy”
如果comm数据库没有,则创建
#创建comm数据库
CREATE DATABASE IF NOT EXISTS comm;#这条语句做了以下几件事:# IF NOT EXISTS:如果数据库已经存在,则不会重新创建,避免报错。
# comm:数据库的名称。
#查看所有数据库
show databases;
进入comm数据库
-- 切换到comm数据库
USE comm;
因为是新库,里面没有表,需要按照题目指定的参数创建表,如果表已存在,先删除。
#删除表
DROP TABLE IF EXITST dws_behavior_log;
创建外部表,分区字段为dt,即根据日期进行分区,另外,要求指定表的存储路径为HDFS的/behavior/dws/dws_behavior_log目录,存储类型为“orc”,文件的压缩类型为“snappy”
CREATE EXTERNAL TABLE dws_behavior_log (client_ip STRING, -- 客户端请求的IP地址device_type STRING, -- 请求的设备类型,手机mobile或者电脑PCtype STRING, -- 上网的模式,4G,5G或WiFidevice STRING, -- 设备IDurl STRING, -- 访问的资源路径province STRING, -- 省份city STRING -- 城市
)
PARTITIONED BY (dt STRING) -- 分区字段
STORED AS ORC -- 存储类型为ORC
LOCATION '/behavior/dws/dws_behavior_log' -- 指定存储路径
TBLPROPERTIES ("orc.compress"="SNAPPY"); -- 文件压缩类型为SNAPPY
查看表字段是否正确
describe dws_behavior_log
查看hdfs存储位置
hdfs dfs -ls /behavior/dws
表存在
启动Hive的动态分区功能,并将Hive设置为非严格模式;
-- 启用动态分区功能
SET hive.exec.dynamic.partition = true;-- 设置动态分区模式为非严格
SET hive.exec.dynamic.partition.mode = nonstrict;
使用insert overwrite ... select ...子句将 dwd_behavior_log表中数据插入分区表dws_behavior_log 中,并实现根据dt进行动态分区
目前没准备好dwd表中字段及分区,内容持续更新中