Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика 3.docx
Скачиваний:
4
Добавлен:
09.07.2025
Размер:
6.35 Mб
Скачать

5. Парсинг входных данных с помощью регулярных выражений

Создаём новую таблицу.

USE smirnov_test;

DROP TABLE IF EXISTS SerDeExample;

CREATE EXTERNAL TABLE SerDeExample ( ip STRING )

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' # использование класса для работы с парсингом

WITH SERDEPROPERTIES ( "input.regex" = '^(\\S*)\\t.*$' )

STORED AS TEXTFILE

LOCATION '/data/user_logs/user_logs_M';

select * from SerDeExample limit 10;

Рисунок 18 – Создание таблицы, используя парсинг

Данное регулярное выражение описывает строку, где первая колонка содержит непустую последовательность символов, а вторая колонка игнорируется. Регулярное выражение "input.regex" = '^(\\S*)\\t.*$'

- '^' - начало строки

- '(\\S*)' - группа без пробелов (непустая последовательность символов), которая будет считываться в первой колонке

- '\\t' - символ табуляции, разделяющий первую и вторую колонки

- '.*' - любая последовательность символов

- '$' - конец строки

Получаем на выходе (рисунок 19):

Рисунок 19 – Вывод таблицы с парсингом

Изменяем регулярное выражение под две колонки:

USE smirnov_test;

DROP TABLE IF EXISTS SerDeExample;

CREATE EXTERNAL TABLE SerDeExample (ip STRING, data STRING )

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

WITH SERDEPROPERTIES ( "input.regex" = '^(\\S*)\\t\\t\\t(\\S*)\\t.*$' )

STORED AS TEXTFILE

LOCATION '/data/user_logs/user_logs_M';

select * from SerDeExample limit 10;

Рисунок 20 – Создание новой таблицы с новым парсингом

Рисунок 21 – Вывод таблицы с новым парсингом

Регулярное выражение будет соответствовать строке, содержащей две группы непробельных символов, разделенных тремя символами табуляции. Регулярное выражение "^(\\S*)\\t\\t\\t(\\S*)\\t.*$" разбивается на несколько частей:

- "^" - это начала строки, что означает, что соответствие должно начинаться с начала строки.

- "(\\S*)" - это группа, которая соответствует любой непробельной символ(не включая символ табуляции), и "*" означает, что группа может повторяться любое количество раз (включая ноль раз).

- "\\t\\t\\t" - это символьный класс, который соответствует трём последовательным символам табуляции.

- "(\\S*)" - аналогично первой группе, соответствует любой непробельной символ(не включая символ табуляции).

- "\\t.*" - это символьный класс, который соответствует символу табуляции, за которым следует любое количество любых символов.

- "$" - конца строки, что означает, что соответствие должно заканчиваться на конце строки.

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

USE smirnov_test;

DROP TABLE IF EXISTS SerDeExample;

CREATE EXTERNAL TABLE SerDeExample ( ip STRING, data STRING, request STRING, responsecode STRING )

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'

WITH SERDEPROPERTIES ( "input.regex" = '^(\\S*)\\t\\t\\t(\\S*)\\t(\\S*)\\t\\d+\\t(\\S*)\\t.*$' )

STORED AS TEXTFILE

LOCATION '/data/user_logs/user_logs_M';

select * from SerDeExample limit 10;

Рисунок 22 – Создание новой таблицы с дописанным рег. выражением

Рисунок 23 – Вывод новой таблицы с дописанным рег. выражением

Чтобы вывести несколько значений, используем конструкцию:

^ - Начало строки

(\\S*) - Группа 1: Любой не-пробельный символ, повторяющийся 0 или более раз

\\t\\t\\t - 3 символа табуляции

(\\S*) - Группа 2: Любой не-пробельный символ, повторяющийся 0 или более раз

\\t - Символ табуляции

(\\S*) - Группа 3: Любой не-пробельный символ, повторяющийся 0 или более раз

\\t - Символ табуляции

\\d+ - Один или более цифровых символов

\\t - Символ табуляции

(\\S*) - Группа 4: Любой не-пробельный символ, повторяющийся 0 или более раз

\\t.*$ - Символ табуляции, за которым идет любое количество символов и конец строки

Выводим информации про таблицу, используя команду: DESCRIBE SerDeExample (рисунок 24).

Рисунок 24 – Вывод информации о новой таблицы с дописанным рег. выражением

Соседние файлы в предмете Большие данные