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/';
- 创建分区数据
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");
将你之前的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 中的所有内容都应该可以工作。
我是 运行 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/';
- 创建分区数据
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");
将你之前的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 中的所有内容都应该可以工作。