Путаница с внешними столами в улье - PullRequest
0 голосов
/ 17 января 2019

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

 use hive2;

create external table depTable (depId int comment 'This is the unique id for each dep', depName string,location string) comment 'department table' row format delimited fields terminated by "," 
stored as textfile location '/dataDir/';  

Теперь, когда я просматриваю HDFS, я вижу БД, но внутри склада нет depTable.

[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
[cloudera@quickstart ~]$ 

Выше видно, что в этой БД не создано ни одной таблицы.Насколько я знаю, внешние таблицы не хранятся на складе улья. Так я прав?Если да, то где он хранится ??
Но если я сначала создаю внешнюю таблицу, а затем загружаю данные, я могу увидеть файл внутри hive2.db.

hive> create external table depTable (depId int comment 'This is the unique id for each dep', depName string,location string) comment 'department table' row format delimited fields terminated by "," stored as textfile;
OK
Time taken: 0.056 seconds
hive> load data inpath '/dataDir/department_data.txt' into table depTable;
Loading data to table default.deptable
Table default.deptable stats: [numFiles=1, totalSize=90]
OK
Time taken: 0.28 seconds
hive> select * from deptable;
OK
1001    FINANCE SYDNEY
2001    AUDIT   MELBOURNE
3001    MARKETING   PERTH
4001    PRODUCTION  BRISBANE

Теперь, если я запускаю запрос hadoop fs, я вижу эту таблицу в базе данных, как показано ниже:

[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
Found 1 items
drwxrwxrwx   - cloudera supergroup          0 2019-01-17 09:07 /user/hive/warehouse/hive2.db/deptable  

Если я все еще удаляю таблицу, я вижу таблицув HDFS, как показано ниже:

[cloudera@quickstart ~]$ hadoop fs -ls /user/hive/warehouse/hive2.db
Found 1 items
drwxrwxrwx   - cloudera supergroup          0 2019-01-17 09:11 /user/hive/warehouse/hive2.db/deptable  

Итак, каково точное поведение внешних таблиц?Когда я создаю с использованием ключевого слова LOCATION, где оно хранится, и когда я создаю с помощью оператора load, почему оно сохраняется в HDFS и после удаления почему оно не удаляется.

1 Ответ

0 голосов
/ 17 января 2019

Основное различие между таблицами EXTERNAL и MANAGED заключается в поведении удаления таблицы / раздела. Когда вы удаляете MANAGED таблицу / раздел, местоположение с файлами данных также удаляется. При удалении таблицы EXTERNAL местоположение с файлами данных остается без изменений.

EXTERNAL таблица, а также MANAGED хранится в месте, указанном в DDL . Вы можете создать таблицу поверх существующего местоположения с файлами данных, уже находящимися в этом местоположении, и она будет работать как для EXTERNAL, так и для MANAGED, не имеет значения.

Вы даже можете создать таблицы EXTERNAL и MANAGED поверх одного и того же местоположения, см. Этот ответ с более подробной информацией и тестами: https://stackoverflow.com/a/54038932/2700344

Если вы указали местоположение, данные будут храниться в этом месте для обоих типов таблиц. Если вы не указали расположение, данные будут в расположении по умолчанию: /user/hive/warehouse/database_name.db/table_name для управляемых и внешних таблиц.

См. Также официальные документы Hive по Управляемые и внешние таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...