基本語法
select [all | distinct] select_expr, select_expr, ... from tablename [where where_condition]
1、hive命令列執行select * from lyz;
2、linux命令列執行hive -e "select * from lyz"
hive -s -e "select * from lyz"
hive -v -e "select * from lyz"
3、執行檔案中的hqlhive -f "/home/lyz.sql"
4、指令碼執行hql#!/bin/bash
hive -e "select * from lyz"
1、配置變數set val = ''
$
2、環境變數$,注env檢視所有環境變數
1、內錶資料載入1) 建立表時載入
> create table newtable as select col1, col2 from oldtable
2)建立表時是指定資料的位置
> create table tablename() location ''
3) 本地資料載入
> load data local inpath 'localpath' [overwrite] into table tablename
4) 載入hdfs資料
> load data inpath 'hdfspath' [overwrite] into table tablename
注: 這個操作是移動資料
5) 使用hadoop命令拷貝資料到指定的位置(hive的shell中執行和linux的shell執行)
6) 由查詢語句載入資料
insert [overwrite | into] table tablename
select col1, col2
from table
where ...
例項:insert overwrite test_m
select name, address
from testtext
where name = 'test';
from table
insert [overwrite | into] table tablename
select col1, col2
where ...
例項:from testtext
insert overwrite test_m
select name, address
where name = 'test';
注意
1) 字段對應不同於一些關係型資料庫
2) 在hive shell下執行linux shell
> ! ls /home
2、外表資料載入1) 建立表時是指定資料的位置
create external table tablename() location ''
2) 查詢插入,同內錶
3) 使用hadoop命令拷貝資料到指定的位置(hive的shell中執行和linux的shell執行)
3、分割槽表資料載入
1) 內部分割槽表和外部分割槽表資料載入
內部分割槽表資料載入方式類似於內錶
外部分割槽表資料載入方式類似於外表
注意:資料存放的路徑層次要和表的分割槽一致;如果分割槽表沒有新增分割槽,即使目標路徑下已經沒有資料了,但依然查不到資料
2) 不同之處
載入資料指定目標表的不同,需要指定分割槽
3) 本地資料載入
load data local inpath 'localpath' [overwrite] into table tablename partition(pn = '')
4) 載入hdfs資料
load data inpath 'hdfspath' [overwrite] into table tablename partition(pn='')
5) 由查詢語句載入資料
insert [overwrite] into table tablename partition(pn='')
select col1, col2
from table
where ...
例項:
#建立內部分割槽表
create table test_p(
name string,
val string
)partitioned by (st string)
row format delimited fields terminated by '\t' lines terminated by '\n'
stored as textfile;
#本地資料載入
load data local inpath '/usr/local/src/data' into table test_p partition (st='20180602');
#載入hdfs資料
load data inpath '/data/data' into table test_p partition(st='20180602')
#由查詢語句載入資料
insert into table test_p partition(st='20180602')
select name, address
from lyz
where name = 'lyz';
#建立外部分割槽表
create table test_ep(
name string,
val string
)partitioned by (st string)
row format delimited fields terminated by '\t' lines terminated by '\n'
stored as textfile
location '/external/data';
hadoop fs -mkdir /external/data/st=20180602
hadoop fs -copyfromlocal /usr/local/src/data /external/data/st=20180602
alter table test_ep add partition(st='20180602'); #注意:利用hadoop命令將檔案拷貝到外部分割槽表指定分割槽下的目錄中,必須用此命令為表新增分割槽後才能查詢到表中的資料
show partitions test_ep;
select * from test_ep;
4、hive資料載入注意的問題1) 分隔符問題,且分隔符預設只有單個字元
比如有以下建表語句:
create table test_p(
name string,
val string
)partitioned by (st string)
row format delimited fields terminated by '#\t' lines terminated by '\n'
stored as textfile;
此時,hive只會根據#分隔每一列內容
2) 資料型別對應問題
load資料,字段型別不能互相轉化,查詢返回null
select查詢插入,字段型別不能互相轉化時,插入資料為null
3) select查詢插入資料,字段值順序要與表中字段順序一致,名稱可不一致
hive在資料載入時不做檢查,查詢時檢查
4) 外部分割槽表需要新增分割槽才能看到資料(重要)
hive資料操作
select from employees 在這種情況下可以簡單的讀取employees對應的儲存目錄下的檔案,然後輸出到格式化後的內容到控制台 對於where語句中的過濾條件只是分割槽字段這種情況 無論是否使用limit語句限制輸出記錄數 也無需mapreduce過程的 select from e...
hive資料操作
vi tb hive.txt 12 34 56 7 12 13 41 2 31 17 21 3 71 2 31 1 12 34 11 2 34 root namenode 82 hive w hive shell 建表結構 hive create table tb hive a int,b int,...
hive 資料操作
日常工作中,經常涉及到將本地檔案寫入hive表,已供查詢計算,或將hive表的資料匯出為本地檔案。1 第一步 建立hive 表 create table if not exists user.table user user id int act time string partitioned by ...