Некоторые полезные команды для Hive
Привет! Сегодня я расскажу вам о командах, которыми пользуюсь в Hive почти каждый день.
🔸 Описать создание таблицы, получить её DDL или полезные свойства вроде локации файлов:
DESCRIBE [EXTENDED|FORMATTED] TABLE my_table;
SHOW CREATE TABLE my_table;
SHOW LOCATION TABLE my_table;
🔸 Создание таблицы:
CREATE TABLE `schema.partitioned_user`( `firstname` string, `lastname` string, `address` string, `age` int, `first_login_dttm` timestamp)
PARTITIONED BY ( `country` string, `state` string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 'hdfs://nameservice2/raw_data/schema.db/partitioned_user';
🔸 Переключить таблицу на данные из другой директории:
ALTER TABLE my_table SET LOCATION '/new/hdfs/path';
🔸 Превратить Internal таблицу в External, чтобы можно было её удалить без влияния на данные:
ALTER TABLE my_table SET TBLPROPERTIES('EXTERNAL'='TRUE');🔸 Обновить метаданные (metastore check) — подтягивает новые партиции из hdfs, которые были добавлены туда на уровне файловой системы, не через Hive. Также обновляет пути до отдельных файлов, если они были переименованы
Важно! Не удаляет партиции, их нужно отдельно дропать через alter ... drop partition :
MSCK REPAIR TABLE my_table;
🔸 Import/export:
EXPORT TABLE my_table TO '/backup/path';
IMPORT TABLE my_table FROM '/backup/path';
🔸 Вставка многих партиций, которые рассчитываются на основе селекта (по умолчанию отключено в настройках Hive):
INSERT INTO TABLE partitioned_user
PARTITION (country, state)
SELECT
firstname ,
lastname ,
address ,
... ,
country ,
state
FROM temp_user;
🔸 Перезапись конкретной партиции в таблице на основе селекта:
INSERT OVERWRITE TABLE partitioned_user
PARTITION (country = 'US', state = 'AL')
SELECT * FROM another_user au
WHERE au.country = 'US' AND au.state = 'AL';
🔸 Также партицию можно вставить в файловую систему в любое место, а потом прицепить к внешней таблице:
ALTER TABLE partitioned_user ADD PARTITION (country = 'US', state = 'CA')
LOCATION '/hive/external/tables/user/country=us/state=ca'
Если хочешь узнать о том, а что такое эти ваши External и Internal таблицы в Hive, читай вторую часть поста на канале дата инженеретта. А если нравится такой стиль изложения, посмотри и другие её посты ;)