hive 建库建表插入数据

本文详细介绍了使用Hive进行数据库创建、表结构定义、数据上传及加载的完整流程。通过具体命令演示了如何在HDFS中存储数据,并利用Hive SQL进行数据表的构建与数据插入,为大数据分析提供了实用的操作指南。

hive 建库建表插入数据

先上传文件

sftp> put /Users/chenxin/Downloads/HQL50/HQL50/score.txt /root/data/hql50

sftp> put /Users/chenxin/Downloads/HQL50/HQL50/teacher.txt /root/data/hql50 

sftp> put /Users/chenxin/Downloads/HQL50/HQL50/course.txt /root/data/hql50

sftp> put /Users/chenxin/Downloads/HQL50/HQL50/student.txt /root/data/hql50

在hdfs 建文件夹 将传上去的文件存到hdfs中

hdfs dfs -mkdir /homework
hdfs dfs -put course.txt /homework
hdfs dfs -put score.txt /homework
hdfs dfs -put student.txt /homework
hdfs dfs -put teacher.txt /homework

去50070端口查看是否传上去了

hive 建库用库

create database homework;
use homewrok;

建表

create table if not exists course(
course_id int,course_name string,teacher_id int
) COMMENT 'course table' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE;
create table if not exists score(
student_id int,course_id int,score int
) COMMENT 'score table' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE;
create table if not exists student(
student_id int,student_name string,
student_birth string,student_sex string
) COMMENT 'student table' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE;
create table if not exists teacher(
teacher_id int,
Display all 478 possibilities? (y or n)
ame string
) COMMENT 'teacher table' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE;

查看表是否建完成

show tables;

将hdfs文件中数据插入表中

load data inpath'/homework/course.txt' into table course;
load data inpath'/homework/score.txt' into table score;
load data inpath'/homework/student.txt' into table student;
load data inpath'/homework/teacher.txt' into table teacher;

查看表中是否有数据

select * from teacher;
### Hive数据的语法与示例 #### 数据Hive 中,可以通过 `CREATE DATABASE` 或 `CREATE SCHEMA` 命令来创一个新的数据。命令的具体语法如下: ```sql CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT 'database_comment'] [LOCATION 'directory_path'] [WITH DBPROPERTIES (property_name=property_value, ...)]; ``` - `[IF NOT EXISTS]`: 如果指定名称的数据不存在,则创数据。 - `[COMMENT 'database_comment']`: 可选字段,用于描述该数据的信息。 - `[LOCATION 'directory_path']`: 指定存储数据的位置路径,默认情况下会在 HDFS 的 `/user/hive/warehouse` 下创目录。 - `[WITH DBPROPERTIES (...)]`: 设置数据属性。 例如,下面是一个简单的例子[^3]: ```sql CREATE DATABASE IF NOT EXISTS my_database COMMENT 'This is a test database' LOCATION '/user/hive/my_database'; ``` 此命令将在 HDFS 上创名为 `my_database` 的数据附带注释说明以及自定义位置。 要切换到某个特定数据下执行查询或其他操作,可使用 `USE` 子句: ```sql USE my_database; ``` 这使得后续所有的 SQL 查询都作用于当前选定的数据中。 #### Hive 支持多种类型的格结构,包括内部(Managed Table)、外部(External Table),还有临时(Temporary Table)等。 ##### 内部(Managed Table) 这是最常用的形式之一,在删除此类时其元数据和实际的数据都会被清除掉。基本语法为: ```sql CREATE TABLE [IF NOT EXISTS] table_name ( col1 data_type, col2 data_type, ... ) [COMMENT 'table_comment'] [PARTITIONED BY (col_name data_type)] [CLUSTERED BY (col_name) INTO num_buckets BUCKETS] [SORTED BY (col_name [ASC|DESC])] [ROW FORMAT DELIMITED FIELDS TERMINATED BY char LINES TERMINATED BY char] [STORED AS file_format]; ``` 举个实例演示如何构一张包含分区信息采用 ORC 文件格式储存的新[^1]: ```sql CREATE TABLE employees( id INT, name STRING, salary FLOAT, join_date DATE ) COMMENT 'Employee details with partitioning on department.' PARTITIONED BY(department STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS ORC; ``` 上述脚本建立了一个员工记录,其中按部门划分了多个分区以便更高效地检索相关联的数据集。 ##### 外部(External Table) 当不想让 Hive 控制底层数据文件生命周期的时候可以选择这种方式。即使移除对应的 Hive 对象也不会影响原始数据源的存在状态。其声明方法几乎相同只是多了前缀关键词 EXTERNAL 而已。 ```sql CREATE EXTERNAL TABLE external_table_name ( column_definitions... ) [LOCATION hdfs_directory_path]; ``` 比如这样设置指向已有 HDFS 地址上的 CSV 文档作为输入资源: ```sql CREATE EXTERNAL TABLE logs_ext ( log_time TIMESTAMP, message STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('field.delim'=',') LOCATION '/logs/csv/'; ``` 这里指定了 SerDe 类型处理逗号分割符的情况。 ##### 临时(Temporary Table) 这类特殊用途的只存在于发起它们的那个 session 生命周期期间结束之后就会消失不见再也无法访问到了。通常适用于那些只需要短期存在的中间计算成果或者测试验证场景之中。可通过附加 TEMPORARY 标识位实现快速搭过程[^2]. ```sql -- 方法一:通过列定义直接生成 CREATE TEMPORARY TABLE temp_employee ( emp_id INT, first_name STRING, last_name STRING ); -- 方法二:基于现有复制架构 CREATE TEMPORARY TABLE temp_copy LIKE permanent_table; -- 方法三:利用 SELECT INTO 构造初始内容填充 CREATE TEMPORARY TABLE temp_results AS SELECT * FROM source_data WHERE condition=true; ``` 以上三种途径均展示了不同风格下的临时构造技巧供开发者灵活选用满足各自需求特点。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值