Hive PARTITIONED BY,列表索引超出范围错误?

Hive PARTITIONED BY, list index out of range error?

我是 运行 Cloudera 上的 Hive 和 Hue。 我将以下文本文件上传到 hdfs。我正在尝试在按 id 分区的配置单元中创建一个外部 table。无论出于何种原因,它都不起作用。

/user/test2/test.csv

id,name,age
1,sam,10
2,john,5
1,rick,4

蜂巢:

CREATE EXTERNAL TABLE IF NOT EXISTS testDB (
    name STRING,
    age  INT
)
COMMENT 'This is the test database'
PARTITIONED BY (id INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/test2/'
TBLPROPERTIES ("skip.header.line.count" = "1");

在 Hue 上,配置单元编辑器,当我试图查看示例数据时,它显示 list index out of range。不确定这是什么。如果我删除分区,外部 table 将正常工作。

您位于“/user/test2/test.csv”的数据结构为三列,但您为 table 'testDB' 定义的架构包含两列,这是正常的这个错误。 您必须通过添加 id 列来更新您的脚本:

CREATE EXTERNAL TABLE IF NOT EXISTS testDB (
    id INT,
    name STRING,
    age  INT
)
...

您没有对数据进行分区,因为您还没有创建它。您应该遵循 3 个步骤:

1- 装载指向 .csv 文件的数据。

 CREATE EXTERNAL TABLE TableName (id int, name string, age int) 
 ROW FORMAT DELIMITED    FIELDS TERMINATED BY ','  LINES TERMINATED BY '\n'
 STORED AS TEXTFILE LOCATION '/user/test2/';
  1. 创建分区数据
CREATE EXTERNAL TABLE IF NOT EXISTS testDB (
name STRING,
age  INT )   
COMMENT 'This is the test database'
PARTITIONED BY (id INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LOCATION '/user/other/location'   
TBLPROPERTIES ("skip.header.line.count" = "1");
  1. 将你之前的table的数据插入到最后的table。

    insert into table testDB partition (archive) select name, age from TableName;

希望对您有所帮助。

所以我终于解决了我的问题。以下是我的解决方案。

我正在使用 Cloudera vm - 5.4.2,当我启动 Hue 时,Hue 中的 Hive 设置指向 HiveServer2;但是我使用 Hive CLI 创建了 tables。所以基本上 table 只存在于 HiveServer1.

解决方法: 不要使用 Hive CLI,而是在直线中创建 table,然后 Hue 中的所有内容都应该可以工作。