Hive ETL: завантаження JSON, XML, приклади текстових даних

⚡ Розумний підсумок

Hive ETL перетворює текстові, XML та JSON-файли на таблиці, до яких можна запитувати, завантажуючи їх у Hive та ex.tracобробляючи значення за допомогою xpath() та get_json_object(), надаючи аналітикам SQL-інтерфейс для роботи з напівструктурованими даними Hadoop.

  • 🧱 Структуровані навантаження: Текстовий файл з роздільниками стає таблицею з РОЗДІЛЕНИМИ РЯДКАМИ (ROW FORMAT DELIMITED), ПОЛЯМИ, ЩО ЗАКІНЧУЮТЬСЯ НА (FIELDS TERMINATED BY), а потім ЗАВАНТАЖИТИ ЛОКАЛЬНИЙ ВХІДНИЙ ШЛЯХ (LOAD DATA LOCAL INPATH).
  • 🏷️ XML-прикладtracції: Кожен XML-документ міститься в одному стовпці типу STRING, а xpath() витягує значення з іменованих тегів.
  • 🔑 JSON extracції: get_json_object() зчитує один вираз JSONPath за виклик, тому кожне поле потребує окремого виклику.
  • 🪜 Вкладені корисні навантаження: Складний JSON завантажується точно так само, а ієрархія обходиться за допомогою крапкових виразів JSONPath.
  • 📍 Правила маршруту: Ключове слово LOCAL зчитує дані з файлової системи Linux, а його пропуск визначає шлях на HDFS.
  • 🎯 Де це підходить: Hive підходить для пакетного зберігання даних та напівструктурованого ETL, а не для пошуку записів з низькою затримкою.

Hive ETL: Завантаження JSON, XML та текстових даних

Hive як інструмент ETL та сховища даних поверх Hadoop екосистема надає такі функції, як моделювання даних, маніпулювання даними, обробка даних та запити даних. Data extracПід цим підходом розуміється створення таблиць у Hive та завантаження структурованих і напівструктурованих даних, а також запит даних відповідно до вимог.

Для пакетної обробки ми збираємося написати власні скрипти, використовуючи власні скрипти map та reduce мовою сценаріїв. Це забезпечує SQL як середовище та підтримка для легкого запиту.

Робота зі структурованими даними за допомогою Hive

Структуровані дані означають, що дані мають правильний формат рядків і стовпців. Це більше схоже на СУБД дані з відповідними рядками та стовпцями.

Тут ми завантажимо структуровані дані, що містяться в текстових файлах Hive.

Крок 1) На цьому кроці ми створюємо таблицю «employees_guru» з такими назвами стовпців, як Id, Name, Age, Address, Salary та Department, із типами даних співробітників.

Створення таблиці employees_guru та завантаження Employees.txt у Hive

З наведеного вище скріншоту ми можемо спостерігати наступне:

  1. Створення таблиці “employees_guru”
  2. Завантаження даних з Employees.txt у таблицю “employees_guru”

Крок 2) На цьому кроці ми відображаємо вміст, що зберігається в цій таблиці, за допомогою команди «Вибрати». Ми можемо спостерігати вміст таблиці на наступному знімку екрана.

Вивід запиту Select, що відображає рядки таблиці Hive employees_guru

Зразок фрагмента коду

Запити для виконання

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

Робота з напівструктурованими даними за допомогою Hive (XML, JSON)

Hive виконує функціональність ETL в екосистемі Hadoop, діючи як Інструмент ETLВиконання MapReduce у деяких типах програм може бути складним; Hive може зменшити цю складність та забезпечити найкраще рішення для ІТ-програм у секторі сховищ даних.

Напівструктуровані дані, такі як XML та JSON, можна обробляти з меншою складністю за допомогою Hive. Спочатку ми побачимо, як можна використовувати Hive для... XML.

XML до таблиці куща

У цьому випадку ми збираємося завантажити дані XML у таблиці Hive і отримати значення, що зберігаються в тегах XML.

Крок 1) Створення таблиці “xmlsample_guru” зі стовпцем типу str рядкового типу.

Створення таблиці xmlsample_guru та завантаження test.xml у Hive

З наведеного вище скріншоту ми можемо спостерігати наступне:

  1. Створення таблиці “xmlsample_guru”
  2. Завантаження даних з test.xml у таблицю “xmlsample_guru”

Крок 2) Використання XPath За допомогою методу xpath() ми зможемо отримати дані, що зберігаються всередині тегів XML.

Запит xpath() повертає значення ename та esal зі стовпця XML

З наведеного вище скріншоту ми можемо спостерігати наступне:

  1. Використовуючи метод xpath(), ми отримуємо значення, що зберігаються в /emp/esal/ та /emp/ename/.
  2. Значення, що містяться всередині тегів XML. На цьому кроці ми відображаємо фактичні значення, що зберігаються під тегами XML у таблиці «xmlsample_guru».

Зверніть увагу, що xpath() повертає масив рядків; xpath_string(), xpath_int() та xpath_double() повертають одне типізоване значення.

Крок 3) На цьому кроці ми отримаємо та відобразимо необроблений XML-файл таблиці “xmlsample_guru”.

Необроблені XML-документи, що зберігаються у стовпці str елемента xmlsample_guru

З наведеного вище скріншоту ми можемо спостерігати наступне:

  • Фактичні дані XML відображаються з тегами
  • Якщо ми спостерігаємо один тег, то він має батьківський тег «emp» та дочірні теги «ename» та «esal».

Code фрагмент:

Запити для виконання

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

JSON (JavaНотація об’єкта сценарію)

Дані соціальних мереж та веб-сайтів зазвичай зберігаються у форматі JSON. Щоразу, коли ми намагаємося отримати дані з онлайн-серверів, система повертає файли JSON. Використовуючи Hive як сховище даних, ми можемо завантажувати дані JSON у таблиці Hive, створюючи схеми.

JSON до таблиці Hive

У цьому випадку ми завантажимо дані JSON у таблиці Hive та отримаємо значення, що зберігаються у схемі JSON.

Крок 1) На цьому кроці ми створимо таблицю JSON з назвою «json_guru». Після створення ми завантажимо та відобразимо вміст фактичної схеми.

Створення json_guru, завантаження test.json та відображення схеми JSON

З наведеного вище скріншоту ми можемо спостерігати наступне:

  1. Створення таблиці “json_guru”
  2. Завантаження даних з test.json у таблицю “json_guru”
  3. Відображення фактичної схеми JSON-файлу, що зберігається в таблиці json_guru

Крок 2) Використовуючи метод get_json_object(), ми можемо отримати значення даних, що зберігаються в ієрархії JSON.

get_json_object() виводить список ecode, ename та salary з json_guru

З наведеного вище скріншоту ми можемо спостерігати наступне:

  1. Використовуючи get_json_object(str,'$.ecode'), можна отримати значення ecode з таблиці json_guru. Аналогічно, використовуючи get_json_object(str,'$.ename') та get_json_object(str,'$.sal'), можна отримати значення ename та sal з таблиці json_guru.
  2. Значення, що зберігаються всередині ієрархії JSON в json_guru

Оскільки get_json_object() аналізує документ один раз за виклик, json_tuple() є дешевшим, коли потрібно кілька ключів, а JSON SerDe відображає документ на типізовані стовпці під час завантаження.

Code уривок

Запити для виконання

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

Складний JSON у таблицю Hive

У цьому випадку ми завантажимо складні JSON-дані в таблиці Hive та отримаємо значення, що зберігаються в схемі JSON.

Крок 1) Створення complexjson_guru з одним полем стовпця.

Створення complexjson_guru та завантаження emp.json у таблицю Hive

З наведеного вище скріншоту ми можемо спостерігати наступне:

  1. Створення таблиці complexjson_guru з одним стовпцем поля як рядковим типом даних
  2. Завантаження даних у complexjson_guru з emp.json complex JSON-файлу

Крок 2) Використовуючи get_json_object, ми можемо отримати фактичний вміст, який зберігається в ієрархії JSON-файлів.

На наступному скріншоті ми можемо побачити вивід даних, що зберігаються в complexjson_guru.

Extracted ecode та вкладені значення ключів зі складного JSON-документа

Крок 3) На цьому кроці, використовуючи команду «Select», ми можемо побачити складні JSON-дані, що зберігаються в таблиці «complexjson_guru».

Виберіть вивід, що показує необроблені складні рядки JSON у complexjson_guru

Зразок фрагмента коду

Запити для виконання

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

Hive у проектах реального часу – коли і де використовувати

Коли і де використовувати Hive в екосистемі Hadoop:

Коли

  • Під час роботи з потужними та сильними статистичними функціями в екосистемі Hadoop
  • Під час роботи зі структурованою та напівструктурованою обробкою даних
  • Як інструмент сховища даних з Hadoop
  • Отримання даних у режимі реального часу за допомогою HBase, де можна використовувати Hive

де

  • Для зручності використання як інструменту ETL та сховища даних
  • Забезпечити середовище типу SQL та виконувати запити, подібні до SQL, за допомогою HiveQL
  • Використання та розгортання спеціалізованих скриптів map та reducer для конкретних вимог клієнта

Поширені запитання

LOCAL копіює файл з файлової системи клієнтської машини. Без LOCAL Hive розглядає шлях як HDFS та переміщує файл, тому відносний шлях розташовується в домашній файловій системі користувача HDFS.

json_tuple() зазвичай швидший: він аналізує документ один раз і повертає кілька ключів разом, тоді як get_json_object() повторно аналізує рядок для кожного поля. Використовуйте get_json_object() для одного значення.

Ні. Один стовпець STRING плюс функції JSON працюють. SerDe, такий як org.apache.hive.hcatalog.data.JsonSerDe, підходить для повторюваних виробничих запитів, mapping ключі до типізованих стовпців один раз, а не під час кожного читання.

Зазвичай це гарно надрукований файл: Hive очікує один повний JSON-документ на рядок, тому документ, розділений на рядки, стає недійсним рядком. Ключ з помилкою або неправильний регістр у JSONPath робить те саме.

xpath() завжди повертає масив рядків. Використовуйте замість цього типізований варіант: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() або xpath_boolean(). Кожен повертає один скаляр цього типу.

Зовнішній захист безпечніший для необроблених даних про посадку, оскільки падінняping Таблиця залишає файли на місці. Керована таблиця видаляє свій каталог даних під час операції DROP — зручно для тимчасових таблиць, але руйнівно для спільних файлів.

Інструменти машинного навчання профілюють файли зразків, щоб виводити типи, позначати розріджені ключі та пропонувати стовпці розділів на основі шаблонів запитів. Розглядайте результат як чернетку — типи та розділи все ще потребують перевірки на відповідність реальним томам.

Він створює оператори CREATE TABLE, команди LOAD DATA та вирази JSONPath зі зразка запису, вставленого в редактор. Він не бачить кластер, тому спочатку потрібно перевірити імена, шляхи та написання ключових слів.

Підсумуйте цей пост за допомогою: