Hive: открытый исходный код Facebook для сбора статистики данных в массивных структурированных журналах.
Hive — это инструмент хранилища данных, основанный на Hadoop, который может отображать файлы структурированных данных в таблицу и предоставлять функции запросов, подобные SQL.
Суть такова: конвертировать HQL в программу MapReduce.
1) Данные, обработанные Hive, хранятся в HDFS.
2) Базовой реализацией данных анализа Hive является MapReduce.
3) Программа выполнения работает на Yarn.
преимущество
(1) Итерационные алгоритмы нельзя выразить
(2) Не силен в интеллектуальном анализе данных
(1) Задания MapReduce, автоматически создаваемые Hive, обычно недостаточно интеллектуальны.
(2) Настройка улья сложна и имеет грубую детализацию.
99% то же, что MySQL
(1) Стартовый улей
bin/hive
(2) Просмотр базы данных
hive> show databases;
(3) Откройте базу данных по умолчанию.
hive> use default;
(4) Отображение таблиц в базе данных по умолчанию.
hive> show tables;
(5) Создайте таблицу
hive> create table student(id int, name string);
(6) Отображение количества таблиц в базе данных.
hive> show tables;
(7) Просмотр структуры таблицы
hive> desc student;
(8) Вставьте данные в таблицу.
hive> insert into student values(1000,"ss");
(9) Запрос данных в таблице
hive> select * from student;
(10) Выход из улья
hive> quit;
bin/hive -e "select id from student;"
(1) Создайте файл hivef.sql.
touch hivef.sql
Запишите правильный оператор sql в файл
select *from student;
(2) Выполните оператор sql в файле.
bin/hive -f /opt/module/datas/hivef.sql
Типы данных улья | Типы данных Java | длина | пример |
---|---|---|---|
TINYINT | byte | 1-байтовое целое число со знаком | 20 |
SMALINT | short | 2-байтовое целое число со знаком | 20 |
INT | int | 4-байтовое целое число со знаком | 20 |
BIGINT | long | 8-байтовое целое число со знаком | 20 |
BOOLEAN | boolean | Логический тип, true или false | TRUE FALSE |
FLOAT | float | Число одинарной точности с плавающей запятой | 3.14159 |
DOUBLE | double | Число двойной точности с плавающей запятой | 3.14159 |
STRING | string | Серия персонажей. Набор символов можно указать. Вы можете использовать одинарные или двойные кавычки. | ‘now is the time’ “for all good men” |
TIMESTAMP | тип времени | ||
BINARY | массив байтов |
Тип String Hive эквивалентен типу varchar базы данных. Этот тип представляет собой переменную строку, но он не может объявить максимальное количество символов, которые он может хранить. Теоретически он может хранить 2 ГБ символов.
тип данных | описывать | грамматика Пример |
---|---|---|
STRUCT | Структура языка C аналогична,Доступ к содержимому элемента можно получить через «точечную» нотацию. Например,Если столбецтип данныхдаSTRUCT{first STRING, last STRING}, то на первый элемент можно ссылаться через поле .first. | struct() |
MAP | MAP — это набор кортежей пар ключ-значение.,Доступ к данным можно получить с использованием нотации массива. Например,Если тип данных столбца — MAP,где ключ->值对да’first’->’John’и’last’->’Doe’,Затем вы можете получить последний элемент через имя поля ['last'] | map() |
ARRAY | Массив — это совокупность переменных одного типа и имени. Эти переменные называются элементами массива, и каждый элемент массива имеет номер, начиная с нуля. Например, если значением массива является ['Джон', 'Доу'], то на второй элемент можно ссылаться через имя массива [1]. | Array() |
Улей имеет три типа сложности. данныхARRAY、MAP и СТРУКТУРА. ARRAYиMAP похож на ArrayиMap в Java, а STRUCT похож на Struct в языке C. Он инкапсулирует набор именованных полей, что является сложным. данных допускает любой уровень вложенности.
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
Объяснение поля:
row format delimited fields terminated by ',' -- Разделитель столбцов
collection items terminated by '_' --MAP STRUCT и ARRAY разделитель (разделитель данных)
map keys terminated by ':' -- Разделитель между ключом и значением в MAP
lines terminated by '\n'; -- разделитель строк
select friends[1],children['xiao song'],address.city from test
where name="songsong";
1. Правила неявного преобразования типов следующие:
(1) Любой целочисленный тип можно неявно преобразовать в более широкий тип, например, TINYINT можно преобразовать в INT, а INT можно преобразовать в BIGINT.
(2) Все целочисленные типы и типы FLOATиSTRING могут быть неявно преобразованы в DOUBLE.
(3) TINYINT, SMALLINT и INT можно преобразовать в FLOAT.
(4) Тип BOOLEAN нельзя преобразовать в любой другой тип.
2. Преобразование типа данных можно выполнить с помощью дисплея операции CAST.
Например, CAST('1' AS INT) преобразует строку '1' в целое число 1; если принудительное преобразование типа не удалось, например, при выполнении CAST('X' AS INT), выражение возвращает нулевое значение NULL.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
Объяснение поля:
Поля с разделителями формата строки, оканчивающиеся символом ',' -- разделитель столбца
collection items terminated by '_' --MAP STRUCT и ARRAY разделитель (разделитель данных)
ключи карты оканчиваются знаком ':' — разделителем между ключом и значением в MAP.
строки, заканчивающиеся '\n' — разделителем строк;
1.грамматика
hive> load data [local] inpath '/opt/module/datas/student.txt' overwrite into | into table student [partition (partcol1=val1,…)];
(1) данные загрузки: означает загрузку данных
(2) локальный: означает загрузку данных из локальной таблицы в таблицу куста, в противном случае — загрузку данных из HDFS в таблицу куста;
(3) inpath: указывает путь для загрузки данных.
(4) перезаписать: означает перезапись существующих данных в таблице, в противном случае это означает добавление
(5) в таблицу: указывает, какую таблицу загрузить в
(6) ученик: представляет конкретную таблицу
(7) раздел: указывает на загрузку в указанный раздел.
Сортировать по: Глобальная сортировка, Редуктор
ASC (по возрастанию): порядок возрастания (по умолчанию).
DESC (по убыванию): в порядке убывания.
В каждое сокращение могут быть включены только разделы, поэтому Распространяйте при совместном использовании.
Распределить по: аналогично разделению в MR, разделение выполняется и используется в сочетании с сортировкой по.
Обратите внимание, что Hive требует, чтобы инструкция DISTRIBUTE BY была написана перед инструкцией SORT BY.
При тестировании распределения по вы должны выделить для обработки несколько редьюсеров, иначе вы не сможете увидеть эффект от распределения.
Вам также необходимо установить параметр, значение по умолчанию — -1.
Установите настройки бизнес-логики
set mapreduce.job.reduces=3;
По разделу дептно установить эмпносортировать в разделе
insert overwrite local directory
'/opt/module/datas/distribute-result'
select * from emp distribute by deptno sort by empno desc;
когдараспределять byиsorts Если поля по одинаковым, вы можете использовать кластер кстати.
cluster byВ дополнение к распространению Помимо функции by, он также имеет сортировку byфункция。但дасортировать只能да升序сортировать,не может быть указаносортировать ПравилоASCилиDESC。
set mapreduce.job.reduces=3;
hive (default)> select * from emp cluster by deptno;
Эквивалент
hive (default)> select * from emp distribute by deptno sort by deptno;
NVL: присвойте данным значение NULL. Его формат — NVL (строка1, replace_with). Его функция заключается в том, что если строка1 равна NULL, функция NVL возвращает значение replace_with, в противном случае она возвращает значение строки1, а если оба параметра равны NULL, она возвращает NULL.
select nvl(comm,-1) from emp;
select nvl(comm,deptid) from emp;
select
dept_id,
sum(case sex when 'мужской' then 1 else 0 end) male_count,
sum(case sex when 'женский' then 1 else 0 end) female_count
from
emp_sex
group by
dept_id;
CONCAT(строка A/столбец, строка B/столбец...): возвращает результат объединения входных строк, поддерживает любое количество входных строк;
CONCAT_WS(separator, str1, str2,...): Это особая форма КОНКАТ(). Разделитель между первым параметром и остальными параметрами. Разделителем может быть та же строка, что и остальные параметры. Если разделитель NULL, возвращаемое значение также будет НУЛЕВОЙ. Эта функция пропустит любые NULL ипустая строка。Между объединяемыми строками будут добавлены разделители.;
COLLECT_SET(col): функция принимает только основные типы данных,Его основная функция — дедупликация и суммирование значений определенного поля.,Создайте поля типа массива.
name | constellation | blood_type |
---|---|---|
Сунь Укун | Овен | A |
море | Стрелец | A |
Песня Песня | Овен | B |
Чжу Бацзе | Овен | A |
Сестра Фэн | Стрелец | A |
Стрелец,A море|Сестра Фэн
Овен,A Сунь Укун|Чжу Бацзе
Овен,B Песня Песня
select
name,
concat(constellation, ",", blood_type) base
from
person_info
Выходная таблица t1
c_b name
Стрелец,A море
Стрелец,A Сестра Фэн
Овен,A Сунь Укун
Овен,A Чжу Бацзе
Овен,B Песня Песня
Кроме того, таблица выше t1
select c_b,COLLECT_SET(name) from t1 group by c_b;
Выходная таблица t2
Стрелец,A ["море","Сестра Фэн"]
Овен,A ["Сунь Укун","Баджие"]
Овен,B ["Песня Песня"]
Кроме того, таблица выше t2
select
c_b,
CONCAT_WS("|" , COLLECT_SET(name) )
from
t2
group by c_b;
Результат получен
EXPLODE(col): разбить сложный массив или структуру карты в одном столбце куста на несколько строк.
LATERAL VIEW
Пример: LATERAL VIEW udtf(expression) tableAlias AS columnsAlias
Пояснение: используется для разделения, При использовании вместе с UDTF, например с разнесением, он может разбить столбец данных на несколько строк данных, и на этой основе разделенные данные могут быть агрегированы.
movie category
«Отслеживание подозреваемых» саспенс, боевик, научная фантастика, драма
《Lie to me》 Саспенс, полиция и грабители, боевик, психология, драма
«Воин-Волк 2» война,действие,катастрофа
«Отслеживание подозреваемых» ожидание
«Отслеживание подозреваемых» действие
«Отслеживание подозреваемых» научная фантастика
«Отслеживание подозреваемых» сюжет
《Lie to me》 ожидание
《Lie to me》 Полицейские и грабители
《Lie to me》 действие
《Lie to me》 психология
《Lie to me》 сюжет
«Воин-Волк 2» война
«Воин-Волк 2» действие
«Воин-Волк 2» катастрофа
create table movie_info(
movie string,
category array<string>)
row format delimited fields terminated by "\t"
collection items terminated by ",";
load data local inpath "/opt/module/datas/movie.txt" into table movie_info;
select
movie,
category_name
from
movie_info
lateral view explode(category) table_tmp as category_name;
1.Соответствующее описание функции
OVER(): определяет размер окна данных, в котором работает функция анализа. Размер этого окна данных может меняться при изменении строк.
ТЕКУЩАЯ СТРОКА: текущая строка
n ПРЕДЫДУЩИЙ: перейти вперед к n строкам данных
n СЛЕДУЮЩЕЕ: n строк данных в будущем
UNBOUNDED: начальная точка, UNBOUNDED PRECEDING означает начало спереди, UNBOUNDED FOLLOWING означает переход к конечной точке сзади.
LAG(col,n): n-я строка данных вперед
LEAD(col,n): n-я строка данных из следующей
NTILE(n): распределить строки в упорядоченном разделе по указанной группе данных. Каждая группа имеет номер, начиная с 1. Для каждой строки NTILE возвращает номер группы, к которой принадлежит строка. Примечание. n должен иметь тип int.
Сортировка RANK() будет повторяться, если они одинаковы, и общее количество не изменится.
DENSE_RANK() сортировка будет повторяться, если одно и то же, и общее количество будет уменьшено.
ROW_NUMBER() будет рассчитываться в соответствии с порядком
1) Эта статья так плохо написана
2) hive упрощает Mapreduce и добавляет некоторые функции hql
3) Изучение hive может оказаться таким же скучным занятием, как и изучение SQL.
4)строка в столбец、Столбец для строки、оконная функция等да重点,Суммируя,Запрос – это ключ