如何生成hive的建表語句
hivesql sql
— 獲取指定hive表或指定文件中所有hive表的DDL,如果有按天的分區則默認執行最近7天的分區DDL。同時,table支持符合sql語法的正則表達式,如果有多個表匹配,則提示用戶選擇(使用file則自動關閉該交互功能)。
hivesql synctab
— 基本同上,但是會將得到的DDL提交到當前的hive環境,可用來在不同的hive環境中復制表結構。
如果需要多天分區DDL還可以這樣用(前提是分區中含有日期信息,如pt=20100720):
hivesql sql s_table 20100702 — 除建表語句外,獲得自20100702以來的分區DDL
hivesql sql s_table 20100702 20100725 — ………………………..自20100702-20100725的分區DDL
hivesql sql s_table 20100702 10 — ………………………..自20100702起10天的分區DDL
hivesql synctab和hivesql sql一樣支持上述日期限定功能。
此外,還提供了兩個附加的功能(也很有用呃)
hivesql loc — 根據關鍵字查找能夠匹配到的hive表或對應的數據路徑
hivesql hdfswc — 獲取指定數據目錄下所有數據的總行數,支持普通文本,TextFile和SequenceFile的壓縮格式,類似于linux下的wc -l
hive是怎么建表中用到其他表時怎么用
1.創建表的語句:Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], 。)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], 。)] [CLUSTERED BY (col_name, col_name, 。) [SORTED BY (col_name [ASC|DESC], 。)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path]
稍微解釋下
CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXIST 選項來忽略這個異常。EXTERNAL 關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION),Hive 創建內部表時,會將數據移動到數據倉庫指向的路徑;若創建外部表,僅記錄數據所在的路徑,不對數據的位置做任何改變。在刪除表的時候,內部表的元數據和數 據會被一起刪除,而外部表只刪除元數據,不刪除數據。如果文件數據是純文本,可以使用 STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCE 。有 分區的表可以在創建的時候使用 PARTITIONED BY 語句。一個表可以擁有一個或者多個分區,每一個分區單獨存在一個目錄下。而且,表和分區都可以對某個列進行 CLUSTERED BY 操作,將若干個列放入一個桶(bucket)中。也可以利用SORT BY 對數據進行排序。這樣可以為特定應用提高性能。
創建普通的表:create table test_table (id int,name string,no int) row format delimited fields terminated by ',' stored as textfile;
//指定了字段的分隔符為逗號,所以load數據的時候,load的文本也要為逗號,否則加載后為NULL。hive只支持單個字符的分隔符,hive默認的分隔符是\001
4
創建帶有partition的表:create table test_part (id int,name string,no int) partitioned by (dt string) row format delimited fields terminated by '\t' stored as textfile ;
用創建用\t作分隔符的表,PT為分區字段,
加載如下:
load data local inpath '/home/zhangxin/hive/test_*' overwrite into table test_part partition (dt='2012-03-05');
//local是本地文件,注意不是你電腦上的文件,是hadoop所在的本地文件
//如果是在hdfs里的文件,則不需要local。 overwrite into是覆蓋表分區,僅僅是這個分區的數據內容,如果是追加,則不需要overwrite
5
創建external表:(外部表)create external table test_external (id int,name string,no int) row format delimited fields terminated by ',' location '/home/zhangxin/hive/test_*';
//用逗號分隔的表,且無分區, location后是外部表數據的存放路徑
6
創建與已知表相同結構的表 Like:只復制表的結構,而不復制表的內容。create table test_like_table like test_bucket;
hive中建表我想問一下,這種格式的數據在Hive中應該如何建表 愛問知
可以考慮用sed將雙引號替換掉,然后加載到hive里建表可以用以下語句create table t_name(t1 String,t2 String,t3 String,t4 String,t5 String,t6 String,t7 String,t8 String,t9 String,t10 String)row format delimited fields terminated by ',' --逗號分隔shell中的sed替換,你可以百度一下,最后一個逗號沒有關系,逗號后面可以當作一個空字段解析出來create table t_name(t1 String,t2 String,t3 String,t4 String,t5 String,t6 String,t7 String,t8 String,t9 String,t10 String,t11 String)row format delimited fields terminated by ','。