Не удалось создать таблицу в улье - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь создать таблицу в улье 3.0, используя следующую схему, которую я нашел в Интернете:

    CREATE TABLE tweets (
id BIGINT,
created_at STRING,
source STRING,
favorited BOOLEAN,
retweeted_status STRUCT< text : STRING, user : STRUCT<screen_name : STRING,name : STRING>, retweet_count : INT>,
entities STRUCT< urls : ARRAY<STRUT<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 'org.apache.hive.hcatalog.data.JSONSerDe';

enter image description here

, когда я нажимаю, введитеNoViableAltException.Я впервые использую улей, не имея опыта, может кто-нибудь сказать мне, что не так со схемой?

1 Ответ

0 голосов
/ 07 октября 2018

Пользователь равен Зарезервированное ключевое слово В случае, если мы используем ключевые слова в улье, нам нужно заключить ключевое слово с `(backticks)

Пример:

` user`

Попробуйте с приведенным ниже оператором создания таблицы

    CREATE TABLE tweets (
    id BIGINT,
    created_at STRING,
    source STRING,
    favorited BOOLEAN,
    retweeted_status STRUCT< text : STRING, `user` : STRUCT<screen_name : STRING,name : STRING>, retweet_count : INT>,
    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 'org.apache.hive.hcatalog.data.JsonSerDe'
    Location '/user/flume/tweets/';

Я могу создать таблицу с более высоким ddl:

desc tweets;
+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+--+
|         col_name         |                                                                     data_type                                                                     |      comment       |
+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+--+
| id                       | bigint                                                                                                                                            | from deserializer  |
| created_at               | string                                                                                                                                            | from deserializer  |
| source                   | string                                                                                                                                            | from deserializer  |
| favorited                | boolean                                                                                                                                           | from deserializer  |
| retweeted_status         | struct<text:string,user:struct<screen_name:string,name:string>,retweet_count:int>                                                                 | from deserializer  |
| entities                 | struct<urls:array<struct<expanded_url:string>>,user_mentions:array<struct<screen_name:string,name:string>>,hashtags:array<struct<text:string>>>   | from deserializer  |
| text                     | string                                                                                                                                            | from deserializer  |
| user                     | struct<screen_name:string,name:string,friends_count:int,followers_count:int,statuses_count:int,verified:boolean,utc_offset:int,time_zone:string>  | from deserializer  |
| in_reply_to_screen_name  | string                                                                                                                                            | from deserializer  |
+--------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+--+

ОБНОВЛЕНИЕ:

Hive работает как схема при чтении , когда мы запускаем оператор выбора hive ищет файлы в каталоге , куда указывает таблица (/ user / hive / warehouse / tweets /) , чтобы затем прочитать эти данные в соответствии с вашим оператором ddl , но в этом случае данныеотсутствует в каталоге, поэтому оператор select не возвращает никаких записей.

Чтобы исправить эту проблему:

Option1. Переместите данные из каталога /user/flume/tweets/ в /user/hive/warehouse/tweets/, после чего вы сможете выбратьct данные из таблицы.

`hadoop fs -mv /user/flume/tweets/  /user/hive/warehouse/tweets/`

(или)

Option2. Нам нужно создать таблицу кустов поверх /user/flume/tweets/ в этом каталоге вы сможете увидеть данные в таблице твитов (для этого используйте приведенный выше оператор создания таблицы).

...