配置单元分区依据,列表索引超出范围错误?

2w2cym1i  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(433)

我在cloudera上运行hive和hue。我有以下文本文件上传到hdfs。我正试图在按id分区的配置单元中创建一个外部表。不管出于什么原因,它都不起作用。
/用户/test2/test.csv

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

Hive:

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

在hue,hive编辑器上,当我试图查看示例数据时,它说 list index out of range . 不知道这是什么。如果我删除partitioned by,外部表将正常工作。

ia2d9nvy

ia2d9nvy1#

所以我终于解决了我的问题。下面是我的解决方案。
我使用的是clouderavm-5.4.2,当我启动hue时,hue中的hive设置指向hiveserver2;但是我使用hivecli创建了表。因此,该表基本上只存在于hiveserver1中。
解决方案:不要使用hivecli,而是用beeline创建表,然后hue中的所有内容都可以工作。

pdkcd3nj

pdkcd3nj2#

位于“/user/test2/test.csv”上的数据由三列构成,但为表“testdb”定义的架构包含两列,出现此错误是正常的。必须通过添加id列来更新脚本:

  1. CREATE EXTERNAL TABLE IF NOT EXISTS testDB (
  2. id INT,
  3. name STRING,
  4. age INT
  5. )
  6. ...
oknwwptz

oknwwptz3#

您没有对数据进行分区,因为您尚未创建它。您应该遵循3个步骤:
1-装载指向.csv文件的数据。

  1. CREATE EXTERNAL TABLE TableName (id int, name string, age int)
  2. ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
  3. STORED AS TEXTFILE LOCATION '/user/test2/';

创建分区数据

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

将上一个表中的数据插入到最后一个表中。
insert into table testdb partition(archive)从tablename中选择name、age;
希望这对你有帮助。

展开查看全部

相关问题