在Hive中排除选择查询中的分区字段

4
假设我在Hive中有一个表定义如下(实际表有约65列):
CREATE EXTERNAL TABLE S.TEST (
    COL1 STRING,
    COL2 STRING
)
PARTITIONED BY (extract_date STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
LOCATION 'xxx';

创建表后,当我运行 hive -e "describe s.test" 命令时,可以看到 extract_date 是该表的一列。执行 select * from s.test 命令也会返回 extract_date 列的值。在 Hive 中查询时是否可能排除这个 虚拟(?)列呢?

为什么无法运行 select col1,col2 from test? - srinivasan Hariharan
1
就像我说的那样,我在HDFS中有450个表,其中一些表有接近65列。 - name_masked
你的查询语句是否全部用于 select * from <table>? - srinivasan Hariharan
是的,我们正在DB2和Hadoop之间进行数据验证(Db2是源数据库,我们将数据导出并导入到Hadoop)。因此,我们只需要在两个系统上运行“select * from..”并仅比较数据文件,这对我们来说会更容易许多。 - name_masked
你检查了我的答案吗? - srinivasan Hariharan
1个回答

9

更改此属性

 set hive.support.quoted.identifiers=none;

并运行查询如下:

SELECT `(extract_date)?+.+` FROM <table_name>;

我测试了它,工作正常。


虽然我无法执行以下命令:hive -e "set hive.support.quoted.identifiers=none; select \(extract_date)?+.+` from test"。我会收到错误提示:“无法识别'from'附近的输入...”只有当这两个命令都在文件中时,我才能使用以下命令:hive -f <hive.sql>`。 - name_masked

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