Как создать n внешних таблиц с одним путем hdfs, используя Hive - PullRequest
0 голосов
/ 04 января 2019

Можно ли создать n внешних таблиц, указывающих на один путь hdfs с помощью Hive.Если да, каковы преимущества и ограничения.

1 Ответ

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

Можно создать множество таблиц (как управляемых, так и внешних одновременно) поверх одного и того же места в HDFS.

Создание таблиц с абсолютно одинаковой схемой поверх одних и тех же данных вообще бесполезно, но вы можете создавать разные таблицы, например, с разным количеством столбцов или столбцами с разным синтаксическим анализом, используя RegexSerDe, поэтому у вас могут быть разные схемы в этих таблицах. И вы можете иметь разные разрешения для этих таблиц в Hive. Также таблица может быть создана поверх подпапки некоторой другой папки таблиц, в этом случае она будет содержать подмножество данных. Лучше использовать разделы в одной таблице для одного и того же.

И недостаток в том, что это сбивает с толку, потому что вы можете переписать одни и те же данные, используя более одной таблицы, а также можете случайно удалить их, думая, что эти данные относятся к единственной таблице, и вы можете удалить данные, потому что вам это не нужно стол больше

А это несколько тестов:

Создать таблицу со столбцом INT:

create table T(id int);
OK
Time taken: 1.033 seconds

Проверьте местоположение и другие свойства:

hive> describe formatted T;
OK
# col_name              data_type               comment

id                      int

# Detailed Table Information
Database:               my
Owner:                  myuser
CreateTime:             Fri Jan 04 04:45:03 PST 2019
LastAccessTime:         UNKNOWN
Protect Mode:           None
Retention:              0
Location:               hdfs://myhdp/user/hive/warehouse/my.db/t
Table Type:             MANAGED_TABLE
Table Parameters:
        transient_lastDdlTime   1546605903

# Storage Information
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat:            org.apache.hadoop.mapred.TextInputFormat
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Compressed:             No
Num Buckets:            -1
Bucket Columns:         []
Sort Columns:           []
Storage Desc Params:
        serialization.format    1
Time taken: 0.134 seconds, Fetched: 26 row(s)
                                                                                                  sts)

Создать вторую таблицу поверх того же местоположения, но с колонкой STRING:

hive> create table T2(id string) location 'hdfs://myhdp/user/hive/warehouse/my.db/t';
OK
Time taken: 0.029 seconds

Вставить данные:

hive> insert into table T values(1);
OK
Time taken: 33.266 seconds

Проверка данных:

hive> select * from T;
OK
1
Time taken: 3.314 seconds, Fetched: 1 row(s)

Включить во вторую таблицу:

hive> insert into table T2 values( 'A');
OK
Time taken: 23.959 seconds

Проверка данных:

hive> select * from T2;
OK
1
A
Time taken: 0.073 seconds, Fetched: 2 row(s)

Выберите из первой таблицы:

hive> select * from T;
OK
1
NULL
Time taken: 0.079 seconds, Fetched: 2 row(s)

Строка была выбрана как NULL, поскольку в этой таблице определен столбец INT

А теперь вставьте STRING в первую таблицу (столбец INT):

insert into table T values( 'A');
OK
Time taken: 84.336 seconds

Сюрприз, это не сбои!

Что было вставлено?

hive> select * from T2;
OK
1
A
NULL
Time taken: 0.067 seconds, Fetched: 3 row(s)

NULL был вставлен, потому что во время предыдущей вставки строка была преобразована в int, и это привело к NULL

Теперь давайте попробуем отбросить одну таблицу и выбрать другую:

hive> drop table T;
OK
Time taken: 4.996 seconds
hive> select * from T2;
OK
Time taken: 6.978 seconds

Возвращено 0 строк, поскольку первая таблица была УПРАВЛЕНА, а удаленная таблица также удаляла общее расположение.

КОНЕЦ,

данные удалены. Нужна ли нам таблица T2 без данных?

drop table T2;
OK

Вторая таблица удалена, вы видите, это были только метаданные. Таблица также была управляемой, и drop table должен также удалять местоположение с данными, но в HDFS его уже нечего удалять, только метаданные были удалены.

...