Hive 实践(四)、Hive 语法归纳

本文介绍Hive SQL的基本操作,包括创建表、修改表结构、数据装载及导出等。通过实例演示了如何创建不同类型的表、加载数据、插入数据,并提供了执行SQL脚本和导出数据到本地的方法。

hive 常用的语法:

1、 hive中创建表

#创建一个库表,表名为 cwqsolo, 含有2个字段 id, name,并且记录中各个字段的分割符为 ‘,’,在ascii中表示为 '\054';

CREATE TABLE cwqsolo(id INT, name STRING)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054';


   创建分区表(内部表)

> create  table zc_bicc_isup_bdr (
    > 
    > opc                     int       ,    
    > 
    > dpc                     int                    , 
    > 
    > calling                 string                 ,      
    > 
    > calling_add_ind         int                   , 
    > 
    > called                  string                  ,
    > 
    > ori_called              string              , 
    > 
    > start_time              timestamp               ,  
    > 
    > alert_time              int                     ,    
    > 
    > talk_time               int                    , 
    > 
    > call_result             int                     ,      
    > 
    > rel_cause               int                 ,      
    > 
    > rel_dir                 int                 ,
    > 
    > gen_num                 string                 )
    > 
    > partitioned by (ptDate string)
    > 
    > ROW FORMAT DELIMITED
    > 
    > FIELDS TERMINATED BY ','
    > 
    > ;
    注意: 如果没有 最后两行,在数据导入时可能会出现全是NULL的情况


   

   创建分区表(外部表)



2、修改库表结构

修改库表的字段

#修改字段名为ID的字段,修改后名称为 myid, string类型

ALTER TABLE cwqsolo CHANGE id myid String;

#增加一个字段,字段名为 sex,性别

ALTER TABLE cwqsolo ADD COLUMNS ( sex STRING COMMENT 'sex type');



3、数据的装载

可以建立一个文本文件,用,号分隔,然后使用load命令装载。
首先,建立一个文本文件:
[root@archive studydata]# vi  test1.txt
1001,cwq,male
1101,lxj,female

然后装载这个文本
hive> LOAD DATA LOCAL INPATH '/home/hadoop/hive/studydata/test1.txt' INTO TABLE cwqsolo;
Loading data to table default.cwqsolo
OK
Time taken: 1.83 seconds
hive> select  * from  cwqsolo;
OK
1001    cwq     male
1101    lxj     female
Time taken: 0.173 seconds, Fetched: 2 row(s)
hive>

4、插入数据

1) 追加的方式插入数据,原有数据没有被修改

insert into  table cwqsolo values ( '1005', 'ddd','male' );

2) 重写的方式,旧的数据都被清除,指留下新的数据

insert overwrite table test_insert select * from test_table;

insert OVERWRITE  table cwqsolo values ( '1006', 'hhh','female' );
WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. tez, spark) or using Hive 1.X releases.
Query ID = root_20161007070952_4fc5c176-76da-40ff-8a4a-4522e2138441
Total jobs = 3
Launching Job 1 out of 3
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_1475846838422_0002, Tracking URL = http://archive.cloudera.com:8088/proxy/application_1475846838422_0002/
Kill Command = /opt/hadoop/hadoop-2.6.4//bin/hadoop job  -kill job_1475846838422_0002
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0
2016-10-07 07:44:25,570 Stage-1 map = 0%,  reduce = 0%
2016-10-07 07:44:33,415 Stage-1 map = 100%,  reduce = 0%
Ended Job = job_1475846838422_0002
Stage-4 is selected by condition resolver.
Stage-3 is filtered out by condition resolver.
Stage-5 is filtered out by condition resolver.
Moving data to: hdfs://192.168.136.144:9000/user/hive/warehouse/cwqsolo/.hive-staging_hive_2016-10-07_07-44-15_130_2736379798501468939-1/-ext-10000
Loading data to table default.cwqsolo
MapReduce Jobs Launched: 
Stage-Stage-1: Map: 1   Cumulative CPU: 2.6 sec   HDFS Read: 4598 HDFS Write: 87 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 600 msec
OK
Time taken: 21.032 seconds
hive> 
    > select * from cwqsolo;
OK
1006    hhh     female
Time taken: 0.159 seconds, Fetched: 1 row(s)
hive> 
    >


五、hive 执行 sql 文本

1、 首先编辑一个sql文件,并上传到主机下。

2、执行 hive -f   路径/xxx.sql

如:

hive -f  /home/hadoop/hive/sql/creat_table_biss.sql


六、导出数据到本地文件

hive> 
    > insert overwrite local directory '/home/data/cwq/'
    > 
    > select * from  zc_bicc_isup_bdr  where  calling= '13003097698';

在本地可以生成 000000_0  文件,

可以制定分隔符:

insert overwrite local directory '/home/data/cwq/output1'row format delimited fields terminated by ',' select * from  zc_bicc_isup_bdr  where  calling= '13003097698';








<think>好的,我现在需要回答用户关于Hive层架构的问题。用户明确要求了解层架构的组成和功能,所以我得先回忆一下Hive的架构相关知识。根据用户提供的引用,特别是引用[3]提到了Hive的基本组成,包括用户接口、元数据存储、解释器、编译器、优化器、执行器等。但用户问的是层架构,可能需要将这些组件归纳层中。 首先,Hive的架构通常被分为不同的层次。根据我之前的了解,Hive的架构可以分为用户接口层、驱动层(Driver)、元数据层(Metastore)和执行层。但需要确认是否层结构可能有不同的划分方式。比如,有的资料可能把驱动层再细分,或者把存储层单独列出来。不过结合用户提供的引用,引用[3]提到了用户接口、元数据存储、解释器、编译器、优化器等,这可能对应不同的层次。 用户接口层应该包括CLI、JDBC/ODBC、WebGUI,这些属于用户直接交互的部分。驱动层可能负责处理HQL查询的整个流程,包括解释、编译、优化和执行。元数据层则是存储表结构等信息的地方,通常使用关系型数据库如MySQL。执行层可能涉及与Hadoop的交互,比如生成MapReduce任务,由Hadoop集群执行。 需要确认层的具体名称和组成。比如,是否将驱动层拆分为更细的组件,或者是否包含资源管理层?根据引用[3],驱动层包括解释器、编译器、优化器、执行器,这可能属于驱动层的一部分。而执行层可能是指将任务提交到Hadoop集群,如MapReduce或Spark。 所以可能的层架构是: 1. 用户接口层 2. 驱动层(处理HQL到MR任务的转换) 3. 元数据存储层 4. 执行引擎层(与Hadoop交互) 或者可能有另一种划分,比如: 1. 用户接口层 2. 元数据管理层 3. 查询处理层(驱动层) 4. 执行引擎层 需要根据引用内容来调整。例如,引用[3]提到用户接口、元数据存储、解释器等组件。元数据存储是单独的一层,用户接口是一层,驱动层(解释器、编译器、优化器、执行器)作为处理层,执行层则是调用MapReduce的部分。这可能构成层:用户接口层、元数据层、处理层(驱动层)、执行层。 不过,另一种可能的划分是将驱动层作为处理层的一部分,而执行引擎属于Hadoop本身,因此Hive的架构可能不包括执行引擎作为单独一层,而是驱动层负责生成执行计划,然后由Hadoop执行。所以层可能是用户接口层、元数据层、驱动层、存储层(数据存储在HDFS)? 不过用户的问题明确是层架构,需要确保正确性。可能需要查阅标准资料,但根据提供的引用,引用[3]提到Hive的基本组成包括用户接口、元数据存储、解释器、编译器、优化器、执行器。这些可能被组织成层: 1. 用户接口层:提供访问方式,如CLI、JDBC等。 2. 元数据管理层(Metastore):存储元数据。 3. 驱动层(Driver):负责HQL的解析、编译、优化和执行计划的生成。 4. 执行引擎层:将执行计划转换为MapReduce/Tez/Spark任务,并提交到Hadoop集群执行。 这样的话,层架构就明确了。需要确认每个层的功能: - 用户接口层:用户交互。 - 元数据管理层:存储结构信息。 - 驱动层:处理查询的整个流程。 - 执行引擎层:与底层计算框架交互。 另外,引用[4]提到生成的文件可以让TotalOrderPartitioner分发数据,这可能属于执行引擎层的优化部分。引用[3]中的解释器、编译器、优化器等属于驱动层。元数据存储层使用关系数据库如MySQL。 所以综合这些信息,Hive层架构应该是: 1. 用户接口层 2. 元数据管理层(Metastore) 3. 查询处理层(驱动层) 4. 执行引擎层 需要详细描述每一层的功能,并确保引用正确的引用来源。例如,元数据管理层可以参考引用[3],驱动层中的组件如解释器、编译器也来自引用[3]。执行引擎层可能涉及将任务提交到MapReduce,如引用[1]中提到的Hive将SQL转为MapReduce代码。 现在组织答案的结构,分层,每层详细说明功能,并适当添加引用标注。最后生成相关问题。</think>### Hive层架构详解 Hive的架构体系可分为层,各层协同工作实现SQL到分布式计算任务的转换。根据功能划分如下: --- #### 1. **用户接口层** 提供多种访问方式,包括: - **CLI**(命令行界面):通过`hive`命令直接操作 - **JDBC/ODBC**:支持Java程序或其他工具通过数据库连接方式访问 - **WebGUI**:通过浏览器界面操作(需额外配置) 此层负责接收用户提交的HQL(Hive Query Language)语句,是用户与系统交互的入口[^3]。 --- #### 2. **元数据管理层(Metastore)** 存储Hive的核心元数据,包括: - 表名、列名、分区信息 - 表属性(如是否为外部表) - 数据存储路径(如HDFS目录地址) 元数据默认存储在嵌入式Derby数据库,但生产环境通常使用**MySQL**等关系型数据库,以支持高并发访问[^3]。 --- #### 3. **查询处理层(驱动层)** 负责HQL语句的解析与优化,核心组件包括: - **解释器**:完成词法分析、语法分析,生成抽象语法树 - **编译器**:将语法树转换为逻辑执行计划 - **优化器**:对执行计划进行优化(如谓词下推、分区裁剪) - **执行器**:将优化后的逻辑计划转换为物理计划(如MapReduce任务) 此层通过`Driver`模块协调各组件,最终生成可执行的作业代码[^3][^4]。 --- #### 4. **执行引擎层** 将物理计划提交到分布式计算框架执行,支持多种引擎: - **MapReduce**:默认引擎,适合离线批处理 - **Tez**:优化DAG执行,减少中间数据落盘 - **Spark**:基于内存计算,提升迭代任务效率 执行结果通过HDFS返回,数据存储格式支持文本、Parquet、ORC等[^1][^4]。 --- ### 架构协作流程示例 1. 用户通过CLI提交`SELECT * FROM table WHERE id>100;` 2. Metastore校验表结构及存储路径 3. 驱动层生成MapReduce任务代码 4. 执行引擎调用YARN资源,启动Task节点完成计算 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值