2017-03-04 52 views
1

如何使用HQL获取配置单元列计数名称?我知道我们可以使用describe.tablename来获取列的名称。我们如何获得计数?配置单元 - 获取表格的列名称数

+0

的[蜂巢可能的复制,我该怎么办检索所有数据库的表列](http://stackoverflow.com/questions/29239565/hive-how-do-i-retrieve-all-the-databases-tables-columns) –

+0

@GordonLinoff - definitly不同的问题 –

回答

0
create table mytable(i int,str string,dt date, ai array<int>,strct struct<k:int,j:int>); 

select count(*) 
from (select transform ('') 
       using 'hive -e "desc mytable"' 
       as col_name,data_type,comment 
     ) t 
; 

一些额外的玩耍:

create table mytable (id int,first_name string,last_name string); 
insert into mytable values (1,'Dudu',null); 

select size(array(*)) from mytable limit 1; 

这不是防弹的,因为并非所有列类型的组合都可以组合成一个数组。
它还要求表格至少包含1行。


这里是一个更复杂也更强大的解决方案(类型也一样),而且还要求该表将包含至少1排

select size(str_to_map(val)) from (select transform (struct(*)) using 'sed -r "s/.(.*)./\1/' as val from mytable) t; 
+0

我稍后将对其进行编辑以支持分区。我也可以用STRUCT解决方案克服1行限制。 –