Hive 如何查看表使用了哪种存储格式

问题描述

在 Hive 中,我们可以使用多种不同的存储格式来存储数据,比如文本格式、Parquet 格式、ORC 格式等。但是有时候,我们可能会忘记某个表使用了哪种存储格式。那么如何通过 Hive 命令或者 Hive 元数据来查看表使用了哪种存储格式呢?

解决方案

下面将介绍两种不同的方法来解决这个问题。

方法一:使用 Hive 命令

Hive 提供了一个 DESCRIBE FORMATTED 命令,可以用来查看表的详细信息,包括存储格式。下面是一个示例:

DESCRIBE FORMATTED table_name;

其中,table_name 是要查看的表的名称。执行这个命令后,会返回表的详细信息,包括存储格式。在输出结果中,可以找到 Storage Properties 这一部分,其中的 InputFormatOutputFormat 字段就表示了表的存储格式。例如,对于使用 ORC 格式存储的表,可以在输出结果中找到以下信息:

Table Parameters:
  ...
  transient_lastDdlTime               ...,
  ...
  
# Storage Information
SerDe Library:               
InputFormat:  org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
Compressed:   No
Num Buckets:  -1
Bucket Columns:    []
Sort Columns:      []
...

从上面的输出中可以看到,该表的 InputFormatOutputFormat 分别为 org.apache.hadoop.hive.ql.io.orc.OrcInputFormatorg.apache.hadoop.hive.ql.io.orc.OrcOutputFormat,表示该表使用了 ORC 格式进行存储。

方法二:使用 Hive 元数据

Hive 的元数据存储在一个名为 metastore 的数据库中,我们可以通过查询这个数据库来获取表的详细信息,包括存储格式。下面是一个示例:

SELECT 
  TBL_NAME, 
  INPUT_FORMAT, 
  OUTPUT_FORMAT 
FROM 
  TBLS 
JOIN 
  SDS 
ON 
  TBLS.SD_ID = SDS.SD_ID 
WHERE 
  TBL_NAME = 'table_name';

其中,table_name 是要查看的表的名称。执行这个查询后,会返回一行结果,包括表的名称、输入格式和输出格式。对于使用 ORC 格式存储的表,可以在输出结果中找到以下信息:

TBL_NAME   | INPUT_FORMAT                          | OUTPUT_FORMAT
-----------|---------------------------------------|----------------------------------------
table_name | org.apache.hadoop.hive.ql.io.orc.OrcInputFormat | org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

从上面的输出中可以看到,该表的 INPUT_FORMATOUTPUT_FORMAT 分别为 org.apache.hadoop.hive.ql.io.orc.OrcInputFormatorg.apache.hadoop.hive.ql.io.orc.OrcOutputFormat,表示该表使用了 ORC 格式进行存储。

示例

下面是一个使用 ORC 格式存储的表的示例:

-- 创建表
CREATE TABLE sales (
  order_id INT,
  date STRING,
  amount DOUBLE
)
STORED AS ORC;

-- 查看表的存储格式
DESCRIBE FORMATTED sales;

执行上面的代码后,可以在输出结果中找到以下信息:

Table Parameters:
  ...
  transient_lastDdlTime               ...,
  ...
  
# Storage Information
SerDe Library:               
InputFormat:  org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
Compressed:   No
Num Buckets:  -1
Bucket Columns:    []
Sort Columns:      []
...

从上面的输出中可以看到,该表使用了 ORC 格式进行存储。

总结

通过使用 Hive 命令或者查询 Hive 元数据,我们可以轻松地查看表使用了哪种存储格式。这对于管理和优化 Hive 表非常有用。

erDiagram
  CUSTOMER ||--o{ ORDER : places
  ORDER ||--|{ LINE-ITEM