Hive创建表及插入数据demo

create table student(id int comment "学生id",name string comment "学生姓名",age int comment "学生年龄")
comment "学生信息表"
row format delimited fields terminated by ",";

create external table student_ext(id int comment "学生id",name string comment "学生姓名",age int comment "学生年龄")
comment "学生信息表"
row format delimited fields terminated by ","
location "/user/hive/student_ext";

create external table student_ptn(id int comment "学生id",name string comment "学生姓名",age int comment "学生年龄")
comment "学生信息表"
partitioned by (city string)
row format delimited fields terminated by ","
location "/user/hive/student_ptn";

set hive.exec.dynamici.partition=true; #开启动态分区,默认是false
set hive.exec.dynamic.partition.mode=nonstrict; #开启允许所有分区都是动态的,否则必须要有静态分区才能使用。

set hive.exec.dynamic.partition=true;(可通过这个语句查看:set hive.exec.dynamic.partition;)
set hive.exec.dynamic.partition.mode=nonstrict;
SET hive.exec.max.dynamic.partitions=100000;(如果自动分区数大于这个参数,将会报错)
SET hive.exec.max.dynamic.partitions.pernode=100000;

insert into table student_ptn partition(city) select 6,"yangdong",29,"beijing";
insert into table student_ptn partition(city) select 2,"limei",22,"chongqing";
insert into table student_ptn partition(city) select 3,"wangxing",25,"beijing";
insert into table student_ptn partition(city) select 4,"chenming",22,"beijing";
insert into table student_ptn partition(city) select 5,"xiali",26,"chongqing";

create external table student_bck(id int comment "学生id",name string comment "学生姓名",age int comment "学生年龄")
comment "学生信息表"
clustered by(id) sorted by(id asc) into 2 buckets
row format delimited fields terminated by ","
location "/user/hive/student_bck";

insert into table student_bck
select * from student;

create table cdt(
id int,
name string,
work_location array<string>,
piaofang map<string,bigint>,
address struct<location:string,zipcode:int,phone:string,value:int>)
row format delimited
fields terminated by "\t"
collection items terminated by ","
map keys terminated by ":"
lines terminated by "\n";

将json字符串加载到table json中
{"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}
{"movie":"661","rate":"3","timeStamp":"978302109","uid":"1"}
{"movie":"914","rate":"3","timeStamp":"978301968","uid":"1"}
{"movie":"3408","rate":"4","timeStamp":"978300275","uid":"1"}
{"movie":"2355","rate":"5","timeStamp":"978824291","uid":"1"}
{"movie":"1197","rate":"3","timeStamp":"978302268","uid":"1"}
{"movie":"1287","rate":"5","timeStamp":"978302039","uid":"1"}
{"movie":"2804","rate":"5","timeStamp":"978300719","uid":"1"}
{"movie":"594","rate":"4","timeStamp":"978302268","uid":"1"}

CREATE TABLE json(
data string)
ROW FORMAT SERDE
‘org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe‘
STORED AS INPUTFORMAT
‘org.apache.hadoop.mapred.TextInputFormat‘
OUTPUTFORMAT
‘org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat‘
LOCATION
‘hdfs://hmaster:9000/user/hive/warehouse/plusorg.db/json‘
TBLPROPERTIES (
‘transient_lastDdlTime‘=‘1542008332‘)

load data local inpath "/root/json.txt" into table json;
get_json_object(data,‘$.movie‘) 内置函数解析某列数据
select get_json_object(data,‘$.movie‘) as movie from json;
json_tuple(jsonStr, k1, k2, ...) 内置函数解析json字符串类数据
参数为一组键k1,k2……和JSON字符串,返回值的元组。该方法比?get_json_object?高效,因为可以在一次调用中输入多个键

select
b.b_movie,
b.b_rate,
b.b_timeStamp,
b.b_uid
from json a
lateral view json_tuple(a.data,‘movie‘,‘rate‘,‘timeStamp‘,‘uid‘) b as b_movie,b_rate,b_timeStamp,b_uid;

create table rate(movie int, rate int, unixtime int, userid int) row format delimited fields
terminated by ‘\t‘;

insert into table rate select
get_json_object(data,‘$.movie‘) as moive,
get_json_object(data,‘$.rate‘) as rate,
get_json_object(data,‘$.timeStamp‘) as unixtime,
get_json_object(data,‘$.uid‘) as userid
from json;

select from_unixtime(unixtime,‘yyyy/MM/dd HH:mm:ss‘) from rate;

create table lastjsontable(movie int, rate int, utime date, userid int) row format delimited
fields terminated by ‘\t‘;
添加Python脚本,hive即可访问,路径为在当前Unix服务器存储绝对路径
add file /home/pythoncode/WeekdayMapper.py;

insert into table lastjsontable
select
transform(movie,rate,unixtime,userid) #输入值(基表)
using ‘python WeekdayMapper.py‘ #使用脚本清洗
as(movie,rate,utime,userid) #输出值(子表)
from rate; #基表

原文地址:http://blog.51cto.com/6000734/2320983

时间: 2024-10-08 22:13:31

Hive创建表及插入数据demo的相关文章

MySql存储过程动态创建表并插入数据

最近做的一个项目,数据库用的是MySql,对于MySql不是很熟练,只是会简单的应用,毕竟简单的sql语句还是相通的,但是随着项目的深入复杂的sql语句开始慢慢多起来,其中一个小难点就是要根据当天的日期动态创建表,并且向其中插入数据. 具体逻辑可以理解为,先去数据库查询有没有当天的记录表,如果没有则创建表,然后执行当天的日志写入. Mysql的可视化工具我们用的是navicat,相对来说还是比较好用,当然没有sqlserver 那么人性化(很多快捷键不支持,操作累赘).下面我就来说一说用navi

mysql创建表及插入数据操作步骤及注意要点

环境:mysql workbench 1.创建新的表,注意,指定要存放的数据库 列名可以加单引号(键盘上1左边的引号),也可以不加 2.插入数据 注意:如果数据是字符型,必须使用单引号或者双引号,如:"value". 原文地址:https://www.cnblogs.com/kylie-go/p/10233728.html

2. SQL -- 查询表,创建表,插入数据到表

(1):查询一个数据库中是否存在某个表(两种方式):假设表名为table_name if exists(select * from sysobjects where name='table_name')drop table table_name if object_id('table_name') is not nulldrop table table_name 同样的操作也可用来判断数据库是否存在! (2):对表的一些实例操作: 创建一个表的实例:(学生成绩表:grade_table) if

Hive通过查询语句向表中插入数据过程中发现的坑

前言 最近在学习使用Hive(版本0.13.1)的过程中,发现了一些坑,它们或许是Hive提倡的比关系数据库更加自由的体现(同时引来一些问题),或许是一些bug.总而言之,这些都需要使用Hive的开发人员额外注意.本文旨在列举我发现的2个通过查询语句向表中插入数据过程中的问题,希望大家注意. 数据准备 为了验证接下来出现的问题,需要先准备两张表employees和staged_employees,并准备好测试数据.首先使用以下语句创建表employees: create table employ

(大数据工程师学习路径)第四步 SQL基础课程----创建数据库并插入数据

一.练习内容 1.新建数据库 首先,我们创建一个数据库,给它一个名字,比如“mysql_shiyan”,以后的几次实验也是对mysql_shiyan这个数据库进行操作. 语句格式为“CREATE DATABASE <数据库名字>;”,(注意不要漏掉“;”)因此具体命令为: CREATE DATABASE mysql_shiyan; 创建成功后输入命令“show databases;”(注意不要漏掉“;”)检查一下: 在大多数系统中,SQL语句都是不区分大小写的,因此以下语句是等价的: CREA

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform)让用户方便的操作数据库中的数据. 什么是ADO.NET 是一组库类,System.Data. Ado.net组成 Connection:用来连接数据库 Command:用来执行SQL语句 DataReader:只读.只进的结果集,一条一条读取数据(SteamReader.XmlReader) Da

MYSQL基础加固——创建数据库并插入数据

二.开发准备 在使用实验楼 Linux 环境进行本次实验之前,先用以下两条命令打开MySQL 服务并使用 root 登录: # 打开 MySQL 服务 sudo service mysql start #使用 root 用户登录,密码为空 mysql -u root 后续的实验都在 MySQL 的控制台输入命令进行操作. 三.实验步骤 3.1 新建数据库 首先,我们创建一个数据库,给它一个名字,比如 mysql_shiyan,以后的几次实验也是对 mysql_shiyan 这个数据库进行操作.

MySQL创建数据库并插入数据命令

简介: 学习mysql环境为ubantu,下面记录一些基本的创建数据库和插入数据的口令 学习资源来自实验楼:https://www.shiyanlou.com/courses/9 打开MySQL 服务并使用 root 登录: # 打开 MySQL 服务 sudo service mysql start #使用 root 用户登录,密码为空 mysql -u root 以下为实例操作:创建一个名为library的数据库,包含 book.reader 两张表,根据自己的理解安排表的内容并插入数据 新

2.SQL--创建课程表和向表内插入数据

--创建课程表,并向表内插入数据--新建课程表,Tid为教师编号create table Course(Cid varchar(10),Cname nvarchar(10),Tid varchar(10))--向表内插入数据insert into Course values('01' , '语文' , '02')insert into Course values('02' , '数学' , '01')insert into Course values('03' , '英语' , '03') 原文