ToB企服应用市场:ToB评测及商务社交产业平台

标题: Hadoop大数据入门——Hive-SQL语法大全 [打印本页]

作者: 万万哇    时间: 2024-10-29 03:57
标题: Hadoop大数据入门——Hive-SQL语法大全
Hive SQL 语法大全

基于语法形貌说明

  1. CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] 'path';
  2. SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC]
  3. (A | B | C)
复制代码
如上语法,在语法形貌中出现:

数据库操纵

创建数据库

  1. CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION 'path'] [COMMENT database_comment];
复制代码

删除数据库

  1. DROP DATABASE [IF EXISTS] db_name [CASCADE];
复制代码

数据库修改LOCATION

  1. ALTER DATABASE database_name SET LOCATION hdfs_path;
复制代码
不会在HDFS对数据库地点目次进行改名,只是修改location后,新创建的表在新的路径,旧的稳固
选择数据库

  1. USE db_name;
复制代码

若想切换回使用default库
  1. USE DEFAULT;
复制代码
查询当前USE的数据库
  1. SELECT current_database();
复制代码
表操纵

数据类型

分类类型形貌字面量示例原始类型BOOLEANtrue/falseTRUETINYINT1字节的有符号整数 -128~1271YSMALLINT2个字节的有符号整数,-32768~327671SINT4个字节的带符号整数1BIGINT8字节带符号整数1LFLOAT4字节单精度浮点数1.0DOUBLE8字节双精度浮点数1.0DEICIMAL任意精度的带符号小数1.0STRING字符串,变长“a”,’b’VARCHAR变长字符串“a”,’b’CHAR固定长度字符串“a”,’b’BINARY字节数组TIMESTAMP时间戳,毫秒值精度122327493795DATE日期‘2016-03-29’时间频率隔断复杂类型ARRAY有序的的同类型的聚集array(1,2)MAPkey-value,key必须为原始类型,value可以任意类型map(‘a’,1,’b’,2)STRUCT字段聚集,类型可以差别struct(‘1’,1,1.0), named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)UNION在有限取值范围内的一个值create_union(1,’a’,63) 基础建表

  1. CREATE [EXTERNAL] TABLE tb_name
  2.         (col_name col_type [COMMENT col_comment], ......)
  3.         [COMMENT tb_comment]
  4.         [PARTITIONED BY(col_name, col_type, ......)]
  5.         [CLUSTERED BY(col_name, col_type, ......) INTO num BUCKETS]
  6.         [ROW FORMAT DELIMITED FIELDS TERMINATED BY '']
  7.         [LOCATION 'path']
复制代码

基于其它表的结构建表

  1. CREATE TABLE tbl_name LIKE other_tbl;
复制代码
基于查询效果建表

  1. CREATE TABLE tbl_name AS SELECT ...;
复制代码
删除表

  1. DROP TABLE tbl;
复制代码
修改表

重命名
  1. ALTER TABLE old RENAME TO new;
复制代码
修改属性
  1. ALTER TABLE tbl SET TBLPROPERTIES(key=value);
  2. -- 常用属性
  3. ("EXTERNAL"="TRUE") -- 内外部表,TRUE表示外部表
  4. ('comment' = new_comment) -- 修改表注释
  5. -- 其余属性参见
  6. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-listTableProperties
复制代码
分区操纵

创建分区表
  1. -- 分区表示意
  2. CREATE TABLE test_ext(id int) COMMENT 'partitioned table' PARTITION BY(year string, month string, day string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
复制代码
添加分区
  1. ALTER TABLE tablename ADD PARTITION (partition_key='partition_value', ......);
复制代码
修改分区值
  1. ALTER TABLE tablename PARTITION (partition_key='old_partition_value') RENAME TO PARTITION (partition_key='new_partition_value');
复制代码
留意
只会在元数据中修改,不会同步修改HDFS路径吗,如:

如果希望修改分区名后,同步修改HDFS的路径,并保证正常可用,需要:

删除分区
  1. ALTER TABLE tablename DROP PARTITION (partition_key='partition_value');
复制代码
  删除分区后,只是在元数据中删除,即删除元数据库中:
  
  相关记录
  分区地点的HDFS文件夹依旧保留
  加载数据
LOAD DATA
  1. LOAD DATA [LOCAL] INPATH 'path' INTO TABLE tbl PARTITION(partition_key='partition_value');
复制代码
INSERT SELECT
  1. INSERT (OVERWRITE | INTO) TABLE tbl PARTITION(partition_key='partition_value') SELECT ... FROM ...;
复制代码
分桶操纵

建表
  1. CREATE TABLE course (c_id string,c_name string,t_id string)
  2.         [PARTITION(partition_key='partition_value')]
  3.         CLUSTERED BY(c_id) INTO 3 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
复制代码

   分桶表需要开启:
  set hive.enforce.bucketing=true;
  设置主动匹配桶数目标reduces task数目
  数据加载
  1. INSERT (OVERWRITE | INTO) TABLE tbl
  2.         [PARTITION(partition_key='partition_value')]
  3.         SELECT ... FROM ... CLUSTER BY(col);
复制代码
分桶表无法使用LOAD DATA进行数据加载
数据加载

LOAD DATA
将数据文件加载到表
  1. LOAD DATA [LOCAL] INPATH 'path' INTO TABLE tbl [PARTITION(partition_key='partition_value')];        -- 指定分区可选
复制代码
INSERT SELECT
将其它表数据,加载到目标表
  1. INSERT (OVERWRITE | INTO) TABLE tbl
  2.         [PARTITION(partition_key='partition_value')]                 -- 指定分区,可选
  3.         SELECT ... FROM ... [CLUSTER BY(col)];                                -- 指定分桶列,可选
复制代码
数据导出

INSERT OVERWRITE SELECT
  1. INSERT OVERWRITE [LOCAL] DIRECTORY ‘path’                                 -- LOCAL可选,带LOCAL导出Linux本地,不带LOCAL导出到HDFS
  2.         [ROW FORMAT DELIMITED FIELDS TERMINATED BY '']                -- 可选,自定义列分隔符
  3.         SELECT ... FROM ...;
复制代码
bin/hive

复杂类型

类型界说示例内含元素类型元素个数取元素可用函数arrayarray<类型>如界说为array数据为:1,2,3,4,5单值,类型取决于界说动态,不限定array[数字序号] 序号从0开始size统计元素个数 array_contains判定是否包含指定数据mapmap<key类型, value类型>如界说为:map<string, int>数据为:{’a’: 1, ‘b’: 2, ‘c’: 3}键值对,K-V,K和V类型取决于界说动态,不限定map[key] 取出对应key的valuesize统计元素个数array_contains判定是否包含指定数据 map_keys取出全部key,返回array map_values取出全部values,返回arraystructstruct<子列名 类型, 子列名 类型…>如界说为:struct<c1 string, c2 int, c3 date>数据为:’a’, 1, ‘2000-01-01’单值,类型取决于界说固定,取决于界说的子列数目struct.子列名 通过子列名取出子列值暂无 数据查询的课堂SQL记录

基本查询

  1. create database itheima;
  2. use itheima;
  3. CREATE TABLE itheima.orders (
  4.     orderId bigint COMMENT '订单id',
  5.     orderNo string COMMENT '订单编号',
  6.     shopId bigint COMMENT '门店id',
  7.     userId bigint COMMENT '用户id',
  8.     orderStatus tinyint COMMENT '订单状态 -3:用户拒收 -2:未付款的订单 -1:用户取消 0:待发货 1:配送中 2:用户确认收货',
  9.     goodsMoney double COMMENT '商品金额',
  10.     deliverMoney double COMMENT '运费',
  11.     totalMoney double COMMENT '订单金额(包括运费)',
  12.     realTotalMoney double COMMENT '实际订单金额(折扣后金额)',
  13.     payType tinyint COMMENT '支付方式,0:未知;1:支付宝,2:微信;3、现金;4、其他',
  14.     isPay tinyint COMMENT '是否支付 0:未支付 1:已支付',
  15.     userName string COMMENT '收件人姓名',
  16.     userAddress string COMMENT '收件人地址',
  17.     userPhone string COMMENT '收件人电话',
  18.     createTime timestamp COMMENT '下单时间',
  19.     payTime timestamp COMMENT '支付时间',
  20.     totalPayFee int COMMENT '总支付金额'
  21. ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
  22. load data local inpath '/home/hadoop/itheima_orders.txt' into table itheima.orders;
  23. CREATE TABLE itheima.users (
  24.     userId int,
  25.     loginName string,
  26.     loginSecret int,
  27.     loginPwd string,
  28.     userSex tinyint,
  29.     userName string,
  30.     trueName string,
  31.     brithday date,
  32.     userPhoto string,
  33.     userQQ string,
  34.     userPhone string,
  35.     userScore int,
  36.     userTotalScore int,
  37.     userFrom tinyint,
  38.     userMoney double,
  39.     lockMoney double,
  40.     createTime timestamp,
  41.     payPwd string,
  42.     rechargeMoney double
  43. ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
  44. load data local inpath '/home/hadoop/itheima_users.txt' into table itheima.users;
  45. -- 查询全表数据
  46. SELECT * FROM itheima.orders;
  47. -- 查询单列信息
  48. SELECT orderid, userid, totalmoney FROM itheima.orders o ;
  49. -- 查询表有多少条数据
  50. SELECT COUNT(*) FROM itheima.orders;
  51. -- 过滤广东省的订单
  52. SELECT * FROM itheima.orders WHERE useraddress LIKE '%广东%';
  53. -- 找出广东省单笔营业额最大的订单
  54. SELECT * FROM itheima.orders WHERE useraddress LIKE '%广东%'
  55. ORDER BY totalmoney DESC LIMIT 1;
  56. -- 统计未支付、已支付各自的人数
  57. SELECT ispay, COUNT(*) FROM itheima.orders o GROUP BY ispay ;
  58. -- 在已付款的订单中,统计每个用户最高的一笔消费金额
  59. SELECT userid, MAX(totalmoney) FROM itheima.orders WHERE ispay = 1 GROUP BY userid;
  60. -- 统计每个用户的平均订单消费额
  61. SELECT userid, AVG(totalmoney) FROM itheima.orders GROUP BY userid;
  62. -- 统计每个用户的平均订单消费额,并过滤大于10000的数据
  63. SELECT userid, AVG(totalmoney) AS avg_money FROM itheima.orders GROUP BY userid HAVING avg_money > 10000;
  64. -- 订单表和用户表JOIN 找出用户username
  65. SELECT o.orderid, o.userid, u.username FROM itheima.orders o JOIN itheima.users u ON o.userid = u.userid;
  66. SELECT o.orderid, o.userid, u.username FROM itheima.orders o LEFT JOIN itheima.users u ON o.userid = u.userid;
复制代码
RLIKE




  1. -- 查找广东省数据
  2. SELECT * FROM itheima.orders WHERE useraddress RLIKE '.*广东.*';
  3. -- 查找用户地址是:xx省 xx市 xx区
  4. SELECT * FROM itheima.orders WHERE useraddress RLIKE '..省 ..市 ..区';
  5. -- 查找用户姓为:张、王、邓
  6. SELECT * FROM itheima.orders WHERE username RLIKE '[张王邓]\\S+';
  7. -- 查找手机号符合:188****0*** 规则
  8. SELECT * FROM itheima.orders WHERE userphone RLIKE '188\\S{4}0[0-9]{3}';
复制代码
UNION团结

  1. CREATE TABLE itheima.course(
  2. c_id string,
  3. c_name string,
  4. t_id string)
  5. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
  6. LOAD DATA LOCAL INPATH '/home/hadoop/course.txt' INTO TABLE itheima.course;
  7. -- 基础UNION
  8. SELECT * FROM itheima.course WHERE t_id = '周杰轮'
  9.         UNION
  10. SELECT * FROM itheima.course WHERE t_id = '王力鸿';
  11. -- 去重演示
  12. SELECT * FROM itheima.course
  13.         UNION
  14. SELECT * FROM itheima.course;
  15. -- 不去重
  16. SELECT * FROM itheima.course
  17.         UNION ALL
  18. SELECT * FROM itheima.course;
  19. -- UNION写在FROM中 UNION写在子查询中
  20. SELECT t_id, COUNT(*) FROM
  21. (
  22.         SELECT * FROM itheima.course WHERE t_id = '周杰轮'
  23.                 UNION ALL
  24.         SELECT * FROM itheima.course WHERE t_id = '王力鸿'
  25. ) AS u GROUP BY t_id;
  26. -- 用于INSERT SELECT
  27. INSERT OVERWRITE TABLE itheima.course2
  28. SELECT * FROM itheima.course
  29.         UNION
  30. SELECT * FROM itheima.course;
复制代码
Sampling采样

  1. # 随机桶抽取, 分配桶是有规则的
  2. # 可以按照列的hash取模分桶
  3. # 按照完全随机分桶
  4. -- 其它条件不变的话,每一次运行结果一致
  5. select username, orderId, totalmoney FROM itheima.orders
  6.         tablesample(bucket 3 out of 10 on username);
  7.        
  8. -- 完全随机,每一次运行结果不同
  9. select * from itheima.orders
  10.         tablesample(bucket 3 out of 10 on rand());
  11.        
  12. # 数据块抽取,按顺序抽取,每次条件不变,抽取结果不变
  13. -- 抽取100条
  14. select * from itheima.orders
  15.         tablesample(100 rows);
  16.        
  17. -- 取1%数据
  18. select * from itheima.orders
  19.         tablesample(1 percent);
  20.        
  21. -- 取 1KB数据
  22. select * from itheima.orders
  23.         tablesample(1K);
复制代码
虚拟列

虚拟列是Hive内置的可以在查询语句中使用的特别标记,可以查询数据自己的具体参数。
Hive目前可用3个虚拟列:
  1. - INPUT__FILE__NAME,显示数据行所在的具体文件
  2. - BLOCK__OFFSET__INSIDE__FILE,显示数据行所在文件的偏移量
  3. - ROW__OFFSET__INSIDE__BLOCK,显示数据所在HDFS块的偏移量
  4.   此虚拟列需要设置:SET hive.exec.rowoffset=true 才可使用
复制代码
  1. SET hive.exec.rowoffset=true;
  2. SELECT orderid, username, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM itheima.orders;
  3. SELECT *, BLOCK__OFFSET__INSIDE__FILE FROM itheima.orders WHERE BLOCK__OFFSET__INSIDE__FILE < 1000;
  4. SELECT orderid, username, INPUT__FILE__NAME, BLOCK__OFFSET__INSIDE__FILE, ROW__OFFSET__INSIDE__BLOCK FROM itheima.orders_bucket;
  5. SELECT INPUT__FILE__NAME, COUNT(*) FROM itheima.orders_bucket GROUP BY INPUT__FILE__NAME;
复制代码
函数

数值、聚集、转换、日期函数
  1. -- 查看所有可用函数
  2. show functions;
  3. -- 查看函数使用方式
  4. describe function extended count;
  5. -- 数值函数
  6. -- round 取整,设置小数精度
  7. select round(3.1415926);                -- 取整(四舍五入)
  8. select round(3.1415926, 4);                -- 设置小数精度4位(四舍五入)
  9. -- 随机数
  10. select rand();                                        -- 完全随机
  11. select rand(3);                                        -- 设置随机数种子,设置种子后每次运行结果一致的
  12. -- 绝对值
  13. select abs(-3);
  14. -- 求PI
  15. select pi();
  16. -- 集合函数
  17. -- 求元素个数
  18. select size(work_locations) from test_array;
  19. select size(members) from test_map;
  20. -- 取出map的全部key
  21. select map_keys(members) from test_map;
  22. -- 取出map的全部value
  23. select map_values(members) from test_map;
  24. -- 查询array内是否包含指定元素,是就返回True
  25. select * from test_array where ARRAY_CONTAINS(work_locations, 'tianjin');
  26. -- 排序
  27. select *, sort_array(work_locations) from test_array;
  28. -- 类型转换函数
  29. -- 转二进制
  30. select binary('hadoop');
  31. -- 自由转换,类型转换失败报错或返回NULL
  32. select cast('1' as bigint);
  33. -- 日期函数
  34. -- 当前时间戳
  35. select current_timestamp();
  36. -- 当前日期
  37. select current_date();
  38. -- 时间戳转日期
  39. select to_date(current_timestamp());
  40. -- 年月日季度等
  41. select year('2020-01-11');
  42. select month('2020-01-11');
  43. select day('2020-01-11');
  44. select quarter('2020-05-11');
  45. select dayofmonth('2020-05-11');
  46. select hour('2020-05-11 10:36:59');
  47. select minute('2020-05-11 10:36:59');
  48. select second('2020-05-11 10:36:59');
  49. select weekofyear('2020-05-11 10:36:59');
  50. -- 日期之间的天数
  51. select datediff('2022-12-31', '2019-12-31');
  52. -- 日期相加、相减
  53. select date_add('2022-12-31', 5);
  54. select date_sub('2022-12-31', 5);
复制代码
交际案例操纵SQL

预备数据
  1. -- 创建数据库
  2. create database db_msg;
  3. -- 选择数据库
  4. use db_msg;
  5. -- 如果表已存在就删除
  6. drop table if exists db_msg.tb_msg_source ;
  7. -- 建表
  8. create table db_msg.tb_msg_source(
  9.     msg_time string comment "消息发送时间",
  10.     sender_name string comment "发送人昵称",
  11.     sender_account string comment "发送人账号",
  12.     sender_sex string comment "发送人性别",
  13.     sender_ip string comment "发送人ip地址",
  14.     sender_os string comment "发送人操作系统",
  15.     sender_phonetype string comment "发送人手机型号",
  16.     sender_network string comment "发送人网络类型",
  17.     sender_gps string comment "发送人的GPS定位",
  18.     receiver_name string comment "接收人昵称",
  19.     receiver_ip string comment "接收人IP",
  20.     receiver_account string comment "接收人账号",
  21.     receiver_os string comment "接收人操作系统",
  22.     receiver_phonetype string comment "接收人手机型号",
  23.     receiver_network string comment "接收人网络类型",
  24.     receiver_gps string comment "接收人的GPS定位",
  25.     receiver_sex string comment "接收人性别",
  26.     msg_type string comment "消息类型",
  27.     distance string comment "双方距离",
  28.     message string comment "消息内容"
  29. );
  30. -- 上传数据到HDFS(Linux命令)
  31. hadoop fs -mkdir -p /chatdemo/data
  32. hadoop fs -put chat_data-30W.csv /chatdemo/data/
  33. -- 加载数据到表中,基于HDFS加载
  34. load data inpath '/chatdemo/data/chat_data-30W.csv' into table tb_msg_source;
  35. -- 验证数据加载
  36. select * from tb_msg_source tablesample(100 rows);
  37. -- 验证一下表的数量
  38. select count(*) from tb_msg_source;
复制代码
ETL清洗转换
  1. create table db_msg.tb_msg_etl(
  2.     msg_time string comment "消息发送时间",
  3.     sender_name string comment "发送人昵称",
  4.     sender_account string comment "发送人账号",
  5.     sender_sex string comment "发送人性别",
  6.     sender_ip string comment "发送人ip地址",
  7.     sender_os string comment "发送人操作系统",
  8.     sender_phonetype string comment "发送人手机型号",
  9.     sender_network string comment "发送人网络类型",
  10.     sender_gps string comment "发送人的GPS定位",
  11.     receiver_name string comment "接收人昵称",
  12.     receiver_ip string comment "接收人IP",
  13.     receiver_account string comment "接收人账号",
  14.     receiver_os string comment "接收人操作系统",
  15.     receiver_phonetype string comment "接收人手机型号",
  16.     receiver_network string comment "接收人网络类型",
  17.     receiver_gps string comment "接收人的GPS定位",
  18.     receiver_sex string comment "接收人性别",
  19.     msg_type string comment "消息类型",
  20.     distance string comment "双方距离",
  21.     message string comment "消息内容",
  22.     msg_day string comment "消息日",
  23.     msg_hour string comment "消息小时",
  24.     sender_lng double comment "经度",
  25.     sender_lat double comment "纬度"
  26. );
  27. INSERT OVERWRITE TABLE db_msg.tb_msg_etl
  28. SELECT
  29.         *,
  30.         DATE(msg_time) AS msg_day,
  31.         HOUR(msg_time) AS msg_hour,
  32.         SPLIT(sender_gps, ',')[0] AS sender_lng,
  33.         SPLIT(sender_gps, ',')[1] AS sender_lat
  34. FROM db_msg.tb_msg_source
  35. WHERE LENGTH(sender_gps) > 0;
复制代码
指标计算
需求1
  1. --保存结果表
  2. CREATE TABLE IF NOT EXISTS tb_rs_total_msg_cnt
  3. COMMENT "每日消息总量" AS
  4. SELECT
  5.     msg_day,
  6.     COUNT(*) AS total_msg_cnt
  7. FROM db_msg.tb_msg_etl
  8. GROUP BY msg_day;
复制代码
需求2
  1. --保存结果表
  2. CREATE TABLE IF NOT EXISTS tb_rs_hour_msg_cnt
  3. COMMENT "每小时消息量趋势" AS  
  4. SELECT  
  5.     msg_hour,
  6.     COUNT(*) AS total_msg_cnt,
  7.     COUNT(DISTINCT sender_account) AS sender_user_cnt,
  8.     COUNT(DISTINCT receiver_account) AS receiver_user_cnt
  9. FROM db_msg.tb_msg_etl GROUP BY msg_hour;
复制代码
需求3
  1. CREATE TABLE IF NOT EXISTS tb_rs_loc_cnt
  2. COMMENT '今日各地区发送消息总量' AS
  3. SELECT
  4.     msg_day,  
  5.     sender_lng,
  6.     sender_lat,
  7.     COUNT(*) AS total_msg_cnt
  8. FROM db_msg.tb_msg_etl
  9. GROUP BY msg_day, sender_lng, sender_lat;
复制代码
需求4
  1. --保存结果表
  2. CREATE TABLE IF NOT EXISTS tb_rs_user_cnt
  3. COMMENT "今日发送消息人数、接受消息人数" AS
  4. SELECT
  5. msg_day,
  6. COUNT(DISTINCT sender_account) AS sender_user_cnt,
  7. COUNT(DISTINCT receiver_account) AS receiver_user_cnt
  8. FROM db_msg.tb_msg_etl
  9. GROUP BY msg_day;
复制代码
需求5
  1. --保存结果表
  2. CREATE TABLE IF NOT EXISTS db_msg.tb_rs_s_user_top10
  3. COMMENT "发送消息条数最多的Top10用户" AS
  4. SELECT
  5.     sender_name AS username,
  6.     COUNT(*) AS sender_msg_cnt
  7. FROM db_msg.tb_msg_etl
  8. GROUP BY sender_name
  9. ORDER BY sender_msg_cnt DESC
  10. LIMIT 10;
复制代码
需求6
  1. CREATE TABLE IF NOT EXISTS db_msg.tb_rs_r_user_top10
  2. COMMENT "接收消息条数最多的Top10用户" AS
  3. SELECT
  4. receiver_name AS username,
  5. COUNT(*) AS receiver_msg_cnt
  6. FROM db_msg.tb_msg_etl
  7. GROUP BY receiver_name
  8. ORDER BY receiver_msg_cnt DESC
  9. LIMIT 10;
复制代码
需求7
  1. CREATE TABLE IF NOT EXISTS db_msg.tb_rs_sender_phone
  2. COMMENT "发送人的手机型号分布" AS
  3. SELECT
  4.     sender_phonetype,
  5.     COUNT(sender_account) AS cnt
  6. FROM db_msg.tb_msg_etl
  7. GROUP BY sender_phonetype;
复制代码
需求8
  1. --保存结果表
  2. CREATE TABLE IF NOT EXISTS db_msg.tb_rs_sender_os
  3. COMMENT "发送人的OS分布" AS
  4. SELECT
  5.     sender_os,
  6.     COUNT(sender_account) AS cnt
  7. FROM db_msg.tb_msg_etl
  8. GROUP BY sender_os
复制代码
Hive列解释、表解释等乱码解决方案

  1. -- 在Hive的MySQL元数据库中执行
  2. use hive;
  3. 1).修改字段注释字符集
  4. alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
  5. 2).修改表注释字符集
  6. alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
  7. 3).修改分区表参数,以支持分区键能够用中文表示
  8. alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
  9. alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
  10. 4).修改索引注解
  11. mysql>alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
复制代码
COUNT(sender_account) AS cnt
FROM db_msg.tb_msg_etl
GROUP BY sender_phonetype;
  1. 需求8```sql--保存结果表
  2. CREATE TABLE IF NOT EXISTS db_msg.tb_rs_sender_os
  3. COMMENT "发送人的OS分布" AS
  4. SELECT
  5.     sender_os,
  6.     COUNT(sender_account) AS cnt
  7. FROM db_msg.tb_msg_etl
  8. GROUP BY sender_os
复制代码
Hive列解释、表解释等乱码解决方案

  1. -- 在Hive的MySQL元数据库中执行
  2. use hive;
  3. 1).修改字段注释字符集
  4. alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
  5. 2).修改表注释字符集
  6. alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
  7. 3).修改分区表参数,以支持分区键能够用中文表示
  8. alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
  9. alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
  10. 4).修改索引注解
  11. mysql>alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4