#返回对a四舍五入的bigint值
SELECT round(1.5)        # 输出  2
SELECT round(-1.5)        # 输出 -2 该四舍五入计算方式为:绝对值四舍五入加负号

#返回DOUBLE型d的保留n位小数的DOUBLW型的近似值
select round(6.58354,3)		#输出	6.584
round(number, decimal_places)
pie
    title Round功能实现流程
    "输入数据" : 30
    "选择round函数" : 30
    "结果输出" : 30
import matplotlib.pyplot as plt

def draw_pie_chart(labels, sizes):
    plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
    plt.axis('equal')
    plt.show()

if __name__ == "__main__":
    labels = ['Honey', 'Pollen', 'Eggs', 'Brood']
    sizes = [30, 20, 25, 25]
    draw_pie_chart(labels, sizes)
1 返回值:
2 hive> select round(2.5);
3 OK
4 3.0
5 Time taken: 0.093 seconds, Fetched: 1 row(s)
ROUND(number, decimal_places)
flowchart TD
    A(问题描述) --> B(检查Hive配置文件)
    B --> C(确认round函数使用)
    C --> D(检查数据类型)
    D --> E(执行SQL)
    E --> F(验证结果)
real(int) round(real _arg, real _decimals);
select round(3.1415926); --> 3
select round(3.5); --> 4
SELECT col1, CAST(col2 AS INT) AS col2
FROM table_name;
round(number, decimal_places)
SELECT ROUND(11.46),ROUND(11.46,2),ROUND(11.55),ROUND(11.56,1) FROM DUAL; 


       ROUND(11.46)    ROUND(11.46,2)    ROUND(11.55)    ROUND(11.56,1) 

                    11                 11.46                         12                       11.6 


SELECT TRUNC(11.46),TRUNC(11.46,2),TRUNC(11.55),TRUNC(11.56,1) FROM DUAL; 


       TRUNC(11.46)    TRUNC(11.46,2)    TRUNC(11.55)    TRUNC(11.56,1) 

          11                11.46            11             11.5
private[storage] val memoryStore = new MemoryStore(this, maxMemory)
private[storage] val diskStore = new DiskStore(this, diskBlockManager)
private[storage] lazy val tachyonStore: TachyonStore
CREATE EXTERNAL TABLE zcg1234 (
 cookieid string,
 createtime string, --day
 pv INT
 ) ROW FORMAT DELIMITED
 FIELDS TERMINATED BY ','
 stored as textfile location '/tmp/zcg1234/';
  
 desc zcg1234; cookieid STRING
 createtime STRING
 pv INT
  
 hive> select * from zcg1234;
 OK
 cookie1 2019-04-10 1
 cookie1 2019-04-11 5
 cookie1 2019-04-12 7
 cookie1 2019-04-13 3
 cookie1 2019-04-14 2
 cookie1 2019-04-15 4
 cookie1 2019-04-16 4
| Table Type:        | MANAGED_TABLE          | NULL  |
| Table Parameters:  | NULL                   | NULL  |
|                    | COLUMN_STATS_ACCURATE  | {\"BASIC_STATS\":\"true\"}  |
|                    | numFiles               | 36554 |
|                    | numPartitions          | 4582  |
|                    | numRows                | 656353471        |
|                    | rawDataSize            | 3687190343914    |
|                    | totalSize              | 191558565757   |
|                    | transient_lastDdlTime  | 1626229162      |
WITH pus AS (  
 SELECT *, rid = ROW_NUMBER() OVER   
 (PARTITION BY rete ORDER BY score DESC) FROM user_score  
)  
  
SELECT id, rate, score FROM pus WHERE rid <= 2
# Hive是基于Hadoop的一个数据仓库工具,作为数据仓库工具,一般要具备2个方面的能力:一是数据的存储,另一个是ETL。
# Hive以HDFS作为存储,MapReduce作为数据分析。
# 在整个生态圈中,hive是为了简化MapReduce的开发难度。 MR实现复杂查询逻辑开发难度太大。主要用来做离线数据分析。
# 操作接口采用类SQL语法,叫HQL,提供快速开发能力;扩展功能方便。
# Hive 的主要三个特点: 
#    可扩展 :可自由扩展集群规模,一般不需要重启服务。
#    延展性 :支持用户自定义函数,用户可根据需求实现自己的函数
#    容错 :良好的容错性,节点出问题SQL仍可完成。


#在已经安装配置好JDK以及Hadoop的前提下,安装mysql, 再安装Hive-1.2.2 相对容易配置。

########################## Hive & derby #不推荐使用此方式
tar zxvf apache-hive-1.2.2-bin.tar.gz 
mv apache-hive-1.2.2-bin hive-1.2.2
cd hive/bin
# 使用derby数据库的最大问题是:不同的路径启动,元数据无法共享。

# hadoop需要先正常启动运行
./hive # 进入shell

show databases; 
create database abc;
use abc;
create table t_test(id int);
show tables;

############################ 使用 mysql 的方式  生产环境使用。
yum install mysql mysql-server mysql-devel # yum安装mysql及其依赖
cd /var/lib/mysql  #这是mysql所在目录
cd /usr/share/mysql/  #相关文件
vim /etc/my.cnf #主要配置文件
# 更详细的安装与配置 https://www.cnblogs.com/chinesern/p/8440206.html

/etc/init.d/mysqld start #启动

mysql  #mysql控制台
USE mysql;
update user set password=PASSWORD('newpassword') where user='root';
grant all PRIVILEGES on *.* to 'root'@'%' IDENTIFIED BY 'newpassword' with grant option;
FLUSH PRIVILEGES;  --更改root密码,授权远程连接,生效。

service mysqld status # 检查mysqld是否运行
chkconfig mysqld on 
mysql -u root -p #使用新密码连接

########## 配置hive
vim conf/hive-env.sh
export  HADOOP_HOME=/usr/local/src/hadoop-2.7.5

vim conf/hive-site.xml
<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
    </property>
    
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
    </property>
    
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
        <description>username to use against metastore database</description>
    </property>
    
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>111111</value>
        <description>passowrd to use against metastore database</description>
    </property>
</configuration>

# 如果是hive-default.xml复制的,以及高版本的。修改太复杂,就sz到本机来操作。



# 安装mysql连接器驱动 到hive/lib中 https://dev.mysql.com/downloads/connector/
cd hive/lib
rz mysql-connector-java-5.1.46.jar

# 启动 bin/hive

show databases; 
create database test;
describe database test; # 查看库信息
use test;  ## 使用库

show tables; # 显示表
show partitions table_name; # 显示表分区信息
show functions; # 显示hive支持的所有方法 
desc formatted table_name; # 查看表信息


### Hive的几种使用方式:
# 1. Hive 交互shell   bin/hive
# 2. Hive JDBC服务(参考java jdbc连接mysql)
# 3. hive启动为一个服务器,对外提供服务 会启动一个进程 Runjar 
    bin/hiveserver2 #启动服务后,使用beeline连接。生产环境中最常用的方式。
    bin/beeline -u jdbc:hive2://master:10000 -n root # 连接方式,默认端口10000
    bin/beeline 
        ! connect jdbc:hive2://master:10000 # 另一种连接方式 
# 4. hive命令 # 不常用
    hive -e 'sql'
    bin/hive -e 'show databases'
### 以上4种方法,第3种方法使用时在命令行方式下最美观。

######################  Hive 数据映射
# Hive本身没有存储功能,所有的数据都存在HDFS中。

# 1. 采用cp文件到数据表文件位置的方法
hdfs dfs -put 1.txt /hivedata 
hive:
    show databases; use test;
    create table t_t1(id int, name string, age int);
    # http://master:50070 下,会有对应的文件/user/hive/warehouse/test.db/t_t1
    
hdfs dfs -cp /hivedata/1.txt /user/hive/warehouse/test.db/t_t1
    create table t_t2(id int, name string, age int) row format delimited fields terminated by ','; # 带有分隔符创建表
    
hdfs dfs -cp /hivedata/1.txt /user/hive/warehouse/test.db/t_t2
    select * from t_t2;
    select count(*) from t_t2; # 此句将执行mr程序 http://master:8088 将可以看到进程

# 2. 采用load 文件数据到 数据表的方法 ,不必先上传文件
create table t_t3(id int, name string, age int) row format delimited fields terminated by '\t'; # 带有\t分隔符创建表
load data local inpath '/test/data2' into table t_t3; # 载入也有同样\t分隔符的数据


######################## 复杂类型的数据表指定分隔符
# 建表的时候一定要根据结构化数据文件的分隔符类型 指定分隔符
# 建表的字段个数和字段类型 要跟结构化数据中的个数类型一致
# 分隔符一般使用内置的来指定 ROW FORMAT DELIMITED 分割字段还是分割集合,等。

#### 示例1.txt 数据:
Alex    BJ,JS,SH,HZ
Jerry    SH,CD,WH,HEB

# 建表语句:
use test;
create table complex_array(name string, city array<string>) ROW FORMAT delimited fields terminated by '\t' collection items terminated by ',';

# 上传文件
hdfs dfs -put 1.txt /user/hive/warehouse/test.db/complex_array

# 查看数据  select * from complex_array;
+---------------------+-------------------------+
| complex_array.name  |   complex_array.city    |
+---------------------+-------------------------+
| Alex                | ["BJ","JS","SH","HZ"]   |
| Jerry               | ["SH","CD","WH","HEB"]  |
+---------------------+-------------------------+

#### 示例2.txt 数据:
1,Alex,唱歌:非常喜欢-跳舞:喜欢-游戏:一般般
2,Melin,自行车:非常喜欢-足球:不喜欢

# 建表语句
create table t_map(id int,name string,hobby map<string,string>) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':';

# 上传文件
hdfs dfs -put 2.txt /user/hive/warehouse/test.db/t_map

# 查看数据 select * from t_map
+-----------+-------------+---------------------------------------------------+
| t_map.id  | t_map.name  |             t_map.hobby                           |
+-----------+-------------+---------------------------------------------------+
| 1         | Alex        | {"唱歌":"非常喜欢","跳舞":"喜欢","游戏":"一般般"} |
| 2         | Melin       | {"自行车":"非常喜欢","足球":"不喜欢"}             |
+-----------+-------------+---------------------------------------------------+


############################ 不指定分隔符时的默认分隔符
# 默认分隔符是'\001' 在vi下,Ctrl+v再Ctrl+a即可输入这个符号
# 示例数据 3.txt
1^A砖家^A28
2^A明月^A33

# 建表语句
create table t_t5(id int, name string, age int);

# 上传文件
hdfs dfs -put 3.txt /user/hive/warehouse/test.db/t_t5

# 查看数据 可以看到映射成功.
  • 1
  • 2
  • 3
  • 4
  • 5