在Hive中计算列数

6

我正在寻找一种在Hive中计算表格列数的方法。

我知道下面的代码在Microsoft SQL Server中可行。是否有Hive等效的代码?

SELECT COUNT(*),
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_CATALOG = 'database_name'
   AND TABLE_SCHEMA = 'schema_name'
   AND TABLE_NAME = 'table_name'
5个回答

11

试试这个

SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name]

1
在 SHOW COLUMNS 命令的末尾,它显示返回的行数,这表示列数,因此此答案是正确的。 - J Maurer
即使是“描述db_name.table_name;”也会以类似的方式给出计数。 - Srekk

5

试试这个,它会显示您的表的列:

DESCRIBE schemaName.tableName;

1
但不返回数量。 - sAguinaga

1

我不知道直接计算列数的方法,但是我通过以下方式间接地解决了我的需求问题:

echo 'table1name:, '`hive -e 'describe schemaname.table1name;' | grep -v 'col_name' | wc -l > num_columns.csv
echo 'table2name:, '`hive -e 'describe schemaname.table2name;' | grep -v 'col_name' | wc -l >> num_columns.csv
...

我需要使用grep -v这一部分是因为默认情况下我启用了标题; 如果没有它,wc -l步骤中会多计算一行。


0

你需要检查你的HIVE是否包含HIVE-287,因为在不包含HIVE-287的HIVE版本中,你需要使用COUNT(1)代替COUNT(*)。


谢谢您的回复!您是说在Hive中使用COUNT(1)来计算列吗?那么剩下的代码应该是什么呢?上面的代码不起作用。 - Gyan Veda
我是说如果你的HIVE版本不包括HIVE-287,那么你需要使用COUNT(1)。然后你必须从https://issues.apache.org/jira/browse/HIVE-287下载此补丁。 如果你不想下载补丁或者你有HIVE-287但代码不起作用,可以使用类似这样的语句: SELECT col1,col2,count(1) FROM table GROUP BY col1,col2 - user3095691
谢谢您的澄清,但是您的建议输出了我的表中的行数。我正在尝试找到列数。 - Gyan Veda

0

只需执行描述操作,它将显示所有列,然后在底部您可以看到它获取的行数,即列数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接