Невозможно выполнить запросы HIVE

У меня есть table, созданный с использованием запроса HIVE в Cloudera VM, ниже мой DDL для создания таблицы с именем incremental_tweets.

CREATE EXTERNAL TABLE incremental_tweets (
id BIGINT,
created_at STRING,
source STRING,
favorited BOOLEAN,
retweet_count INT,
retweeted_status STRUCT<
  text:STRING,
  user:STRUCT<screen_name:STRING,name:STRING>>,
entities STRUCT<
  urls:ARRAY<STRUCT<expanded_url:STRING>>,
  user_mentions:ARRAY<STRUCT<screen_name:STRING,name:STRING>>,
  hashtags:ARRAY<STRUCT<text:STRING>>>,
text STRING,
user STRUCT<
  screen_name:STRING,
  name:STRING,
  friends_count:INT,
  followers_count:INT,
  statuses_count:INT,
  verified:BOOLEAN,
  utc_offset:INT,
  time_zone:STRING>,
in_reply_to_screen_name STRING
)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/twitteranalytics/incremental/';

После выполнения этого на HUE HIVE Editor таблица будет успешно создана. Теперь проблема в том, что я не могу выполнить оператор SELECT, который выдает следующую ошибку.

SELECT Statement

 Select id, entities.user_mentions.name FROM incremental_tweets;

ERROR

  Error while processing statement: FAILED: Execution Error, return code 2 
  from org.apache.hadoop.hive.ql.exec.mr.MapRedTask

Кроме того, поскольку HUE editor предоставляет функцию автоматического завершения, ниже был приведен оператор и ошибка, которую он выдал.

Statement

Select id, entities.`,user_mentions`.name FROM incremental_tweets;

ERROR

Error while compiling statement: FAILED: RuntimeException cannot find field 
,user_mentions(lowercase form: ,user_mentions) in [urls, user_mentions, 
hashtags]   

Что правильно SELECT statement ? Я пропустил какой-либо синтаксис?


person ANmike    schedule 05.05.2018    source источник


Ответы (1)


user_mentions представляет собой массив структур. Вы можете обратиться к внутреннему элементу структуры, только указав индекс массива:

entities.user_mentions[0].name --get name from first array element

Или используйте explode() + lateral view, если вы хотите выбрать все элементы массива:

select id, user_mention.name
from incremental_tweets 
     lateral view outer explode(entities.user_mentions) s as user_mention
;
person leftjoin    schedule 05.05.2018
comment
Спасибо за ответ, я пробовал с explode() + lateral view, но получил ту же ошибку. Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask - person ANmike; 06.05.2018
comment
@ANmike Вам нужно проверить журналы отслеживания вакансий, чтобы найти причину и реальное исключение. Это исключение, которое печатается на консоли, не является информативным. - person leftjoin; 06.05.2018
comment
@ANmike Синтаксис правильный, я проверил. Скорее всего проблема в данных. Не могли бы вы предоставить пример данных и журналы отслеживания вакансий. - person leftjoin; 07.05.2018