Как архивировать таблицы улья?

Есть ли способ проверить внешние таблицы куста, созданные за 90 дней до этого, и удалить эти таблицы вместе с базовыми данными hdfs. Можно ли этого добиться в unix-скрипте?

Конечно, мы можем реализовать это с помощью сценария оболочки, вы можете выполнить hadoop fs -ls /path/your_hive_table_path/, чтобы получить время записи данных, а затем выполнить hadoop fs -rm , чтобы удалить данные, созданные за 90 дней.

Shawn.X 29.05.2019 09:52

Мне также нужно бросить таблицу, как это можно сделать

user2672739 29.05.2019 11:00

Что ж, добавьте код для выполнения HiveQL drop table.

Shawn.X 29.05.2019 11:01

Можете ли вы помочь, как я могу это сделать

user2672739 30.05.2019 04:58

OK. Я приведу несколько примеров.

Shawn.X 30.05.2019 05:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
319
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Посмотрите, если путь к таблицам куста /path/your_hive_table_path/, как показано ниже:

hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/

drwxrwxrwx+  - h_mifi supergroup          0 2019-01-24 10:33 /path/your_hive_table_path//mifidw_car_insurance_expire_month_data
drwxrwxrwx+  - h_mifi supergroup          0 2019-01-24 10:39 /path/your_hive_table_path//mifidw_car_owner
drwxr-xr-x+  - h_mifi supergroup          0 2019-05-30 03:01 /path/your_hive_table_path//push_credit_card_mine_result_new
drwxr-xr-x+  - h_mifi supergroup          0 2019-05-30 03:41 /path/your_hive_table_path//push_live_payment_bill_mine_result_new

Мы можем получить дату последнего обновления файла таблицы, как показано ниже:

hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/ | awk -F'[ ]+' '{print $6}'
2019-01-24
2019-01-24
2019-05-30
2019-05-30

Нам нужен loop, чтобы проверить каждую таблицу на наличие более 90 дней и выполнить операции remove и drop. Полный сценарий оболочки приведен ниже, я протестировал его, он работает хорошо, надеюсь, он поможет вам.

hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/ | grep '/path/your_hive_table_path/' | while read line
do
   #Get the update date of hive table
   date_str=`echo $line | awk -F'[ ]+' '{print $6}'`
   #get the path of hive table
   table_path=`echo $line | awk -F'[ ]+' '{print $8}'`
   #Get the table name of hive table
   table_name=`echo $table_path | awk -F'/' '{print $7}' `

   today_date_stamp=`date +%s`
   table_date_stamp=`date -d $date_str +%s`
   stamp_diff=`expr $today_date_stamp - $table_date_stamp`

   #Get the diff days from now
   days_diff=`expr $stamp_diff / 86400`

   #if diff days is greater than 90, rm and drop.
   if [ $days_diff -gt 90 ];then
      #remove the hdfs file
      hadoop --cluster your-hadoop-cluster fs -rm $table_path
      #drop the hive table
      hive -e"drop table $table_name"
   fi
done

Я думаю, что лучший способ - изменить файл свойств на внутренний и удалить таблицу. Будет ли это хорошей идеей

user2672739 30.05.2019 05:58

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

Shawn.X 30.05.2019 06:02

Только будьте осторожны, мы поддерживаем наше хранилище данных улья с помощью shell script в нашей повседневной работе, и это удобно.

Shawn.X 30.05.2019 06:07

Если вам удобно, дайте мне vote up пожалуйста, так как я потратил более получаса на редактирование этого ответа утром этого рабочего дня. Большое спасибо! :) .

Shawn.X 30.05.2019 06:17

Другие вопросы по теме