В этом эксперименте Hadoop 2.7.1 используется для развертывания трех платформ обработки больших данных. Как показано на рисунке 1-2.
Рисунок 1-2 Распределенная среда Hadoop
Уведомление:Версия операционной системы на каждом хосте должна быть согласованной。В процессе установкиhadoopПод пользователем,В этом учебнике пароли используются единообразно.:password(Обратите внимание на капитализацию)
Используйте команду tar, чтобы извлечь установочный пакет в указанный каталог и переименовать его.
[root@master ~]# cd /opt/software/
[root@master Software]# tar -zxvf apache-hive-2.0.0-bin.tar.gz -C /usr/local/src/ # Извлечь в единый каталог установки
[root@master software]# cd /usr/local/src
[root@master src]# mv /usr/local/src/apache-hive-2.0.0-bin /usr/local/src/hive
[root@master src]# chown -R hadoop:hadoop hive
Отредактируйте файл /etc/profile.
[root@master src]# cd
[root@master ~]# vi /etc/profile
Добавьте следующую информацию о конфигурации в конец файла /etc/profile.
# set Hive environment
экспорт HIVE_HOME=/usr/local/src/hive # Каталог установки Hive
Export PATH=$HIVE_HOME/bin:$PATH #Добавить каталог bin Hive
экспортировать HIVE_CONF_DIR=$HIVE_HOME/conf #переменные среды Hive
Выполните команду source /etc/profile, чтобы настроенные переменные среды вступили в силу в глобальной области системы.
[root@master ~]# source /etc/profile
Вышеуказанные команды необходимо выполнять только на том узле, где установлен Hive. В этой статье Hive развертывается на главном узле.
Сначала проверьте mariadb в системе
[root@master ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.52-2.el7.x86_64
затем удалите
[root@master ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
ps:
rpm -qa выводит список всех установленных пакетов
rpm -e имя_пакета удалить пакет
rpm -e --nodeps имя_пакета Принудительно удалить программное обеспечение и зависимые пакеты.
rpm -q имя пакета Запросить, установлен ли пакет
rpm -ivh имя пакета Установочный пакет
Порядок установки такой:
[root@master ~]# cd /opt/software/mysql-5.7.18
[root@master mysql-5.7.18]# rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
[root@master mysql-5.7.18]# rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
[root@master mysql-5.7.18]# rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
[root@master mysql-5.7.18]# rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
Затем проверьте установку MySQL с помощью #rpm -qa grep mysql |
[root@master mysql-5.7.18]# vi /etc/my.cnf
#Измените существующие конфигурации и добавьте новые, если нет.
default-storage-engine=innodb
innodb_file_per_table
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server=utf8
Запустите службу MySQL и просмотрите ее статус.
[root@master mysql-5.7.18]# systemctl start mysqld
[root@master mysql-5.7.18]# systemctl status mysqld
[root@master mysql-5.7.18]# cat /var/log/mysqld.log | grep password
Получите первоначальный пароль MySQL:
[root@master mysql-5.7.18]# mysql_secure_installation #Сбросить пароль и конфигурацию
Установленный вами пароль должен соответствовать правилам безопасностиPassword123$
Примечание. Для параметра «Разрешить удаленное подключение» установлено значение n, что означает, что удаленное подключение разрешено, остальные настройки — «y».
[root@master mysql-5.7.18]# mysql -uroot -pPassword123$
Создайте в MySQL новую базу данных с именем hive_db для хранения метаданных Hive. Создайте нового пользователя куста с паролем Password123$ и предоставьте все разрешения.
mysql>create database hive_db;
mysql>create user hive identified by 'Password123$';
mysql>grant all privileges on *.* to hive@'%' identified by 'Password123$' with grant option ;
mysql>grant all privileges on *.* to 'root'@'%'identified by 'Password123$' with grant option;
mysql>flush privileges;
создать базу данных hive_db: создать новую базу данных hive_db в качестве адреса хранения метаданных Hive.
создать куст пользователя, идентифицируемый «Password123$». Создайте пользователя доступа к Hive с кустом имени пользователя и кустом паролей.
предоставить все привилегии на *.* для hive@'%', идентифицированного как 'Password123$', с опцией предоставления: предоставить разрешение 1, разрешение 2,... разрешение n на имя таблицы базы данных для имени пользователя@адрес пользователя. Предоставьте пользователю куста все разрешения для всех таблиц во всех базах данных, и любой адрес может установить соединение «%» с правами предоставления.
привилегии очистки: обновление таблиц, связанных с системными разрешениями MySQL.
Предоставьте пользователю куста все разрешения для всех таблиц во всех базах данных, и любой адрес может установить соединение «%» с правами предоставления.
Рис. 1-6. Создание пользователя Hive для работы с MySQL.
Скопируйте исходный файл hive-default.xml.template и измените его на hive-site.xml. Измените значение соответствующего параметра.
[root@master ~]# su - hadoop
[hadoop@master ~]$ cp /usr/local/src/hive/conf/hive-default.xml.template /usr/local/src/hive/conf/hive-site.xml
[hadoop@master ~]$ vi /usr/local/src/hive/conf/hive-site.xml
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive_db?createDatabaseIfNotExist=true</value> </property> <!--mysqlимя пользователя--> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value>
</property>
<!--mysqlсерединаhiveПароль пользователя--> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Password123$</value> </property> <!--mysqlводить машину--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/usr/local/src/hive/tmp</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/usr/local/src/hive/tmp/${hive.session.id}_resources</value> </property> <property> <name>hive.querylog.location</name> <value>/usr/local/src/hive/tmp</value> </property> <property> <name>hive.server2.logging.operation.log.location</name> <value>/usr/local/src/hive/tmp/operation_logs</value> </property> <property> <name>hive.server2.webui.host</name> <value>master</value> </property> <property> <name>hive.server2.webui.port</name> <value>10002</value> </property> </configuration>
javax.jdo.option.ConnectionURL: строка подключения JDBC, которая по умолчанию соответствует встроенной базе данных Metastore_db. Теперь MySQL используется в качестве адреса хранения метаданных. Необходимо установить соединение JDBC, а hive_db — это база данных MySQL, созданная в эксперименте 2. для хранения метаданных.
javax.jdo.option.ConnectionUserName: Пользователь операции куста, который подключается к MySQL, созданный в эксперименте 2.
javax.jdo.option.ConnectionPassword: пароль пользователя операции куста для подключения к MySQL, созданный в эксперименте 2.
javax.jdo.option.ConnectionDriverName: Настройте драйвер подключения к базе данных.
hive.downloaded.resources.dir: временный каталог для загрузки удаленных ресурсов.
hive.server2.webui.host: адрес доступа к странице веб-интерфейса hiveserver2.
hive.server2.webui.port: порт доступа к странице веб-интерфейса hiveserver2.
Кроме того, файл конфигурации Hive по умолчанию — hive-default.xml.template. Если пользователь не изменяет соответствующие параметры конфигурации, Hive прочитает параметры файла конфигурации по умолчанию для запуска. Другая важная информация о конфигурации, такая как:
hive.metastore.warehouse.dir: каталог, в котором хранится хранилище данных конфигурации в HDFS.
hive.exec.scratchdir: каталог, используемый hive для хранения планов выполнения карты/сокращения на разных этапах, а также для хранения промежуточных результатов вывода.
Для получения других подробных параметров обратитесь к официальному файлу конфигурации илиhive-default.xml.templateВниз<description>Этикетка Внизописание информации,В этой статье используются параметры по умолчанию,Необходимо создать новую папку хранилища данных Hive на HDFS.,и предоставить разрешения на чтение и запись.
[hadoop@master ~]$ hadoop fs -mkdir -p /user/hive/warehouse
[hadoop@master ~]$ hadoop fs -chmod g+w /user/hive/warehouse
[hadoop@master ~]$ mkdir /usr/local/src/hive/tmp
Здесь устанавливаются переменные среды Hive и Hadoop, которые можно использовать для управления выполнением Hive.
[hadoop@master ~]$ cp /usr/local/src/hive/conf/hive-env.sh.template /usr/local/src/hive/conf/hive-env.sh
[hadoop@master ~]$ vi /usr/local/src/hive/conf/hive-env.sh
# Set JAVA
export JAVA_HOME=/usr/local/src/java
# Set HADOOP_HOME to point to a specific hadoop install directory
export HADOOP_HOME=/usr/local/src/hadoop
# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/usr/local/src/hive/conf
# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/src/hive/lib
Выйдите из сохранения, инициализируйте базу данных и убедитесь, что MySQL в это время находится в состоянии запуска, и выполните команду. Обратите внимание, что файл драйвера для Hive для подключения к MySQL необходимо загрузить в папку lib Hive. Для этой статьи выбрана версия драйвера: mysql-connector-java-5.1.26.jar.
[hadoop@master ~]$ cp /opt/software/mysql-connector-java-5.1.46.jar /usr/local/src/hive/lib/
[hadoop@master ~]$ schematool -initSchema -dbType mysql
Рисунок 1-8. Драйвер Hive подключается к MySQL.
Когда отображается сообщение «chemTool завершено», инициализация прошла успешно и Hive устанавливает соединение с MySQL. После запуска проверьте базу данных hive_db под MySQL и обнаружите, что там много новых таблиц (55).
Рисунок 1-9. Создание таблиц в базе данных Hive_db.
После запуска кластера Hadoop и MySQL введите hive в поле команды.
[hadoop@master ~]$ hive
Рисунок 1-10 Страница оболочки Hive
Создайте новую таблицу и проверьте MySQL.
hive> show databases;
hive> create database hive_test_db;
hive> use hive_test_db;
hive> create table t_user(id int, name string);
hive> show tables;
Рис. 1-11. Hive создает таблицу.
Откройте базу данных MySQL и используйте базу данных hive_db, настроенную в эксперименте 2. Обратите внимание, что все таблицы, созданные hive, находятся в таблице TBLS базы данных hive_db. Когда созданная таблица существует, создается компонент Hive, хранящий метаданные на основе MySQL.
mysql> use hive_db;
mysql> select * from TBLS;
Рисунок 1-12 Проверка MySQL
Чтобы использовать интерфейс командной строки Beeline для доступа к Hive, вам необходимо предоставить разрешения прокси-пользователя Hive в кластере Hadoop.
[hadoop@master ~]$ cd /usr/local/src/hadoop/etc/hadoop
[hadoop@master hadoop]$ vi core-site.xml
[hadoop@slave1 ~]$ vi /usr/local/src/hadoop/etc/hadoop/core-site.xml
[hadoop@slave2 ~]$ vi /usr/local/src/hadoop/etc/hadoop/core-site.xml
#Добавляем следующую конфигурацию
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
Примечание. Серые имена хостов, отмеченные в Hadoop.proxyuser.hadoop.hosts и Hadoop.proxyuser.hadoop.groups, представляют собой имена пользователей прокси-сервера Hadoop, к которым осуществляется доступ. После предоставления соответствующих разрешений операции доступа можно будет выполнять через службу hiveserver2. «*» — это фиксированный метод записи. Первый указывает, что все узлы в кластере Hadoop могут использовать пользователя прокси-сервера Hadoop для доступа к Hive, а второй указывает на все группы.
Запустите службу hiveserver2. Подождите некоторое время. Не закрывайте эту страницу.
[hadoop@master hadoop]$ cd
[hadoop@master ~]$ stop-all.sh
[hadoop@master ~]$ start-all.sh
[hadoop@master ~]$ hiveserver2
Рис. 1-13. Запуск службы hiveserver2.
Предполагая удаленный доступ к узлу подчиненных1, сначала необходимо добавить компонент Hive на узле подчиненных1 и скопировать его с главного узла.
[root@master ~]# scp -r /usr/local/src/hive root@slave1:/usr/local/src/
[root@slave1 ~]# chown -R hadoop:hadoop /usr/local/src/hive
Slavs1 настраивает переменные пользовательской среды Hadoop, вы можете использовать команды Hive.
[root@slave1 ~]# vi /etc/profile
#hive
export HIVE_HOME=/usr/local/src/hive
export HIVE_CONF_DIR=$HIVE_HOME/conf
export PATH=$HIVE_HOME/bin:$PATH
[root@slave1 ~]# su - hadoop
[hadoop@ slave1 ~]$ source /etc/profile
Вы можете управлять Hive, подключившись к Beeline через jdbc. Выполните следующую команду от имени пользователя Hadoop узла Slaves1.
[hadoop@slave1 ~]$ beeline -u jdbc:hive2://master:10000
Рисунок 1-14 Удаленное подключение других узлов
В то же время вы можете просмотреть посещенных клиентов на странице Hive WebUI. Как показано на рисунке ниже, узел 192.168.90.110 (главный) и узел 192.168.90.181 (подчиненный1) одновременно получают доступ к Hive.
Рисунок 1-15. Просмотр узлов доступа на веб-странице Hive.
После завершения лабораторной работы вы сможете:
Здесь записываются инструкции Hive DDL, в том числе:
CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEX
DROP DATABASE/SCHEMA, TABLE, VIEW, INDEX
TRUNCATE TABLE
ALTER DATABASE/SCHEMA, TABLE, VIEW
MSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)
SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLE
DESCRIBE DATABASE/SCHEMA, table_name, view_name, materialized_view_name
Кластер серверов | Более 3 узлов, сетевое соединение между узлами, минимальная конфигурация каждого узла: двухъядерный процессор, 8 ГБ памяти, жесткий диск 100 ГБ. |
---|---|
Операционная среда | CentOS 7.2 |
Имя пользователя/пароль | root/password hadoop/password |
Услуги и компоненты | HDFS、Yarn、MapReduce |
Создайте базу данных школы в Hive.
[hadoop@master ~]$ hive
hive > create database school;
Рис. 1-16. Hive создает базу данных.
Формат: CREATE (DATABASE|SCHEMA) [ЕСЛИ НЕ СУЩЕСТВУЕТ] имя_базы_данных
[COMMENT data_comment] //Описание блоков данных
[LOCATION hdfs_path] //Указываем место хранения базы данных в HDFS
[WITH DBPROPERTIES (property_name=property_value, ...)];
hive> alter database school set dbproperties('creater'='H3C');
hive> desc database extended school;
Добавьте пользовательские атрибуты, созданные H3C.
Рис. 1-17. Hive изменяет свойства базы данных.
hive> alter database school set owner user root;
hive> desc database extended school;
Измените владельца базы данных на root.
Рис. 1-18. Hive меняет владельца базы данных.
Синтаксис: desc Database [расширенное] имя_базы_данных;
hive> drop database school;
hive> show databases;
Синтаксис: показать <database_name>
drop database <database_name>
Рис. 1-19 Hive удаляет базу данных и отображает ее.
Для других операций, таких как переключение баз данных, синтаксис: используйте имя_базы_данных. Удалить базу данных, содержащую таблицу. Синтаксис: удалить базу данных, если существует каскад имя_базы_данных. Проверьте, какая библиотека используется. Синтаксис: выберите current_database(). Для получения информации о других операциях обратитесь к официальной документации.
Создайте таблицу учителей в базе данных школы, которая имеет четыре атрибута: номер работы, имя, предмет и уровень преподавания. Перед созданием вам необходимо использовать язык использования для переключения рабочей базы данных.
hive> create database school;
hive> use school;
hive> create table teacher(
> num int,
> name string,
> email map<string,int>,
> class array<string>);
Рисунок 1-20. Hive создает таблицу.
грамматика: создать [внешнюю] таблицу [если она не существует] имя_таблицы
[(col_name data_type [comment col_comment], ...)] ----Укажите имя таблицы и конкретную информацию о столбце таблицы.
[comment table_comment] ---Описательная информация таблицы.
[разделено по (имя_столбца тип_данных [комментарий_комментарий_столбца], ...)] ---Информация о разделении таблицы.
[clustered by (col_name, col_name, ...)
[сортировано по (col_name [asc|desc], ...)] в сегментах num_buckets] --- Информация о сегментах таблицы.
[формат строки row_format] ---Информация о сегментации данных и информация о форматировании таблицы.
[хранится как file_format] --- Информация о сериализации хранения данных таблицы.
[location hdfs_path] ---Информация об адресе папки хранения данных
Обычные таблицы, созданные Hive по умолчанию, называются управляемыми таблицами или внутренними таблицами. Данные таблицы единообразно управляются Hive и по умолчанию хранятся в каталоге хранилища данных. Его можно изменить с помощью файла конфигурации Hive hive-site.xml. Результаты создания можно просмотреть через веб-интерфейс Hadoop.
Рисунок 1-21 Просмотр результатов создания HDFS
Помимо внутренних таблиц по умолчанию, Hive также может создавать внешние таблицы, используя ключевое слово «EXTERNAL». Данные внешней таблицы могут храниться вне хранилища данных, либо адрес, хранящийся в HDFS, можно изменить вручную.
Таблица разделов: цель — избежать грубого сканирования.,Раздел — это независимая папка в HDFS; раздел Hive — это раздел каталога HDFS;,Столбцы таблицы, указанные при создании таблицы, не должны содержать столбцы секционирования.,Для секционирования столбцов требуются ключевые словаpartitioned byУкажите это отдельно позже。
hive> create table teacher(
> num int,
> name string,
> email map<string,int>,
> class array<string>)
> partitioned by (age int)
> row format delimited fields terminated by ",";
Таблица сегментов: таблицы или разделы можно дополнительно преобразовать в сегменты.,Это более детальное разделение данных.,Чтобы получить более высокую эффективность запроса. Разница между сегментами и разделением при хранении данных заключается в том, что,Раздел хранится в каталоге, и файлы данных хранятся в этом каталоге.,И ведро будет храниться как файл,Содержимое данных хранится в файлах. Обратите внимание, что,При создании таблицы сегментов указанный столбец сегмента необходимо создать заранее.,Используйте ключевые словаclustered byУкажите это отдельно позже,И укажите на сколько ведер разделить(buckets)。
hive> create table teacher(
> num int,
> name string,
> email map<string,int>,
> class array<string>)
> clustered by (num) into 4 buckets
> row format delimited fields terminated by ",";
hive> show tables; hive> desc teacher; hive> desc formatted teacher; Синтаксис:описание <table_name>
Рис. 1-22. Подробности таблицы представления Hive.
Вы также можете скопировать существующую таблицу.
hive> create table teacher2 like teacher;
Синтаксис: создать <table_name> like <table_copy_name>;
Измените имя таблицы.
hive> alter table teacher rename to new_teacher;
Синтаксис: изменить table <table_name> rename to <new_table_name>
Измените имя столбца, тип данных, комментарий к столбцу и расположение столбца в таблице. FIRST поместит столбец в первый столбец, а AFTER имя_столбца поместит столбец на один столбец после имени_столбца. Следующий оператор изменяет имя столбца num на число, изменяет тип данных на строку, добавляет комментарий и, наконец, помещает этот столбец после имени.
hive> alter table new_teacher change num number string comment 'the num of teacher, change datatype to string ' after name;
Синтаксис: изменить table <table_name> change [cloumn] <col_old_name> <col_new_name> column_type [conmment col_conmment] [first|after column_name];
Добавление/обновление столбцов. Добавление столбцов позволяет пользователям добавлять новые столбцы в конце текущего столбца и перед столбцом раздела. Заменить столбцы позволяет пользователям обновлять столбцы. Процесс обновления заключается в том, чтобы сначала удалить текущий столбец, а затем добавить новый столбец. .
hive> alter table new_teacher add columns(age int);
Синтаксис: изменить table <table_name> add|replace columns (<col_name> data_type [conmment col_comment], ...);
Рисунок 1-23 Изменение операции
Удалить таблицу. hive> drop table teacher2; Синтаксис: отбросить table <table_name> Очистите стол. hive> truncate table new_teacher; Синтаксис: обрезать table <table_name> hive> exit;
Рисунок 1-24 Очистка данных и удаление таблиц
После завершения лабораторной работы вы сможете:
Рисунок 1-25. Выбор простой операции.
Кластер серверов | Более 3 узлов, сетевое соединение между узлами, минимальная конфигурация каждого узла: двухъядерный процессор, 8 ГБ памяти, жесткий диск 100 ГБ. |
---|---|
Операционная среда | CentOS 7.2 |
Имя пользователя/пароль | root/password hadoop/password |
Услуги и компоненты | HDFS、Yarn、MapReduce |
Создайте новую таблицу учащихся с номером ученика, именем, классом, информацией о росте и весе, а также оценками. Вставьте один фрагмент данных для тестирования. Вставка сложных типов требует дампа с помощью команды select. Оператор запроса соответствует оператору языка MySQL.
Синтаксис: вставить into <table_name> select <data,map(), array()>
Синтаксис: выбрать * from <table_name>;
hive> create table student(
> num int,
> name string,
> class string,
> body map<string,int>,
> exam array<string>)
> row format delimited
> fields terminated by '|'
> collection items terminated by ','
> map keys terminated by ':'
> lines terminated by '\n';
hive> create table lib(
> num int,
> book string)
> row format delimited
> fields terminated by '|'
> collection items terminated by ','
> map keys terminated by ':'
> lines terminated by '\n';
hive> create table price(
> book string,
> price int)
> row format delimited
> fields terminated by '|'
> collection items terminated by ','
> map keys terminated by ':'
> lines terminated by '\n';
hive> insert into student (num,name,class,body,exam) select 20200101,'Wlen','grade 2',map('height',175,'weight',60),array('80','70');
Рисунок 1-26. Вставьте один фрагмент информации.
Вызов операции MR во время процесса вставки данных неэффективен, а данные Hive обычно импортируются пакетами с помощью функции Load. Подготовьте данные. Данные можно хранить локально или в HDFS.
Данные хранятся в текстовом формате с символом «» между атрибутами. |”отдельный,Следует отметить, что при создании таблицы,поля должны быть установлены terminated by '|', в противном случае по умолчанию используется значение ",". Поскольку таблицы содержат сложные форматы данных, простые разделители часто теряют свою эффективность. Данные следующие:
Рисунок 1-27 Подробности импорта информации
Используйте функцию загрузки для пакетного импорта данных.
hive> load data local inpath '/opt/software/student.txt' into table student;
hive> load data local inpath '/opt/software/lib.txt' into table lib;
hive> load data local inpath '/opt/software/price.txt' into table price;
Синтаксис: загрузить data local inpath <address> [overwrite] into table < table_name>;
Если адресом хранения данных является HDFS, это эквивалентно переносу данных в HDFS.
Синтаксис: загрузить data inpath <address> [overwrite] into table <table_name>;
Рисунок 1-28 Импорт данных
Базовый синтаксис SELECT в Hive по сути такой же, как и стандартный синтаксис SQL, и поддерживает WHERE, DISTINCT, GROUP BY, ORDER BY, HAVING, LIMIT, подзапрос и т. д., во всех системах баз данных чаще всего используется оператор SELECT; используемый и самый сложный.
Ответ: ВЫБРАТЬ [ВСЕ | РАЗЛИЧНЫЕ] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMIT number]
Обычные запросы точно такие же, как запросы MySQL.
hive> select * from student;
Рисунок 1-29. Выбор запроса.
1.где заявление
Оператор Where представляет собой логическое выражение, которое можно связать с помощью «и» и «или» для выполнения сложных запросов. Обратите внимание на то, как осуществляется поиск по специальным полям.
hive> select * from student where class = 'grade 4';
hive> select * from student where exam[0] = 96 or exam[1]=77;
hive> select * from student where body['height'] = 170;
Рисунок 1-30 Условный запрос
2. отдельные и все утверждения
Целью отличия является удаление повторяющихся элементов. Если параметры не добавлены, по умолчанию используются все. Когда отдельный параметр выполняется, MR вызывается для сортировки, что более эффективно для крупномасштабных данных.
hive> select class from student;
hive> select distinct class from student;
Рисунок 1-31 Удаление дубликатов
3. группировать и иметь утверждения
group by — это групповой запрос для столбцов, и его можно использовать для группировки byРезультаты дополнительно фильтруются。HavingиwhereРазница в том,,whereГруппировку нельзя записать позжефункция,И после этого вы можете использовать функцию группировки.
Следующий оператор сначала фильтрует и подсчитывает общее количество оценок, а затем отфильтровывает количество учащихся во втором классе или выше.
hive> select class ,count(*) from student group by class;
hive> select class ,count(*) num from student group by class having num >=2;
Где num — результат сохранения count(*).
Рисунок 1-32 Групповой запрос
грамматика: Select * from <table_name> limit <up,down> select UNION [ALL | DISTINCT] select UNION [ALL | DISTINCT] select …
Ограничение ограничивает диапазон описания запроса. Если при запросе больших данных слишком много строк, запрос необходимо ограничить. Union отображает результаты нескольких выборов и может связывать несколько таблиц.
hive> select * from student limit 2,4; hive> select class from student union select num from student;
Рисунок 1-33 Запрос ограничения
Порядок по — это глобальная сортировка. Позже можно выполнить сортировку по нескольким столбцам. По умолчанию используется сортировка по словарю. Эффективность порядка очень низка для крупномасштабных наборов данных. Во многих случаях глобальная сортировка не требуется и можно использовать сортировку по. Результаты отсортированы ниже, хотя результаты те же. При обнаружении крупномасштабных данных функция сортировки по может создать файл сортировки для каждого редуктора, изменив количество редукторов. Каждый Редюсер выполняет внутреннюю сортировку, а не сортировку глобального набора результатов. Order by вызывает для расчета только один Редуктор.
hive> set mapreduce.job.reduces=3; hive> select * from student sort by exam[0]; hive> select * from student order by exam[0];
Рисунок 1-34 Сортировка
Синтаксис: выбрать <clo> from <table_name> join <table_name> on <table.clo>=< table.clo > join <table_name> on <table.clo>=< table.clo >…
Соединение может соединять несколько таблиц для совместного запроса. Условия запроса должны находиться в двух последовательных таблицах, а для соединения n таблиц требуется как минимум n-1 условий соединения. Например: для объединения трех таблиц требуется как минимум два условия соединения. В этом примере есть две таблицы: таблица студентов содержит номер студента num, а таблица библиотеки содержит номер студента и название взятой напрокат книги.
hive> select * from student join lib on student.num =lib.num;
Запросите название книги, которую взял напрокат каждый человек.
Рисунок 1-35 Запрос из двух таблиц
hive> select * from student left outer join lib on student.num =lib.num;
слева присоединяйтесь, Запросите название книги, которую взял напрокат каждый человек.Отличие в том, что отображается вся информация в левой таблице.,Например: в средней школе с номерами 20200103 и 20200106 на рисунке ниже нет записей о взятии книг напрокат.,Отображается как NULL.
Рисунок 1-36 Запрос левого соединения
hive> select * from student right outer join lib on student.num =lib.num;
Левому объединению соответствует правое объединение, и отображаются все правые таблицы.
Рисунок 1-37 Запрос правого соединения
hive> select * from student full outer join lib on student.num =lib.num; Полное соединение — это комплексное использование левого и правого соединения, отображающее всю информацию из двух таблиц. Если связанного элемента нет, он будет помещен в конец и отображен как NULL.
Рисунок 1-38 Запрос полного соединения
hive> select * from student left semi join lib on student.num =lib.num;
Полуобъединение отображает только содержимое левой таблицы, то есть содержимое левой таблицы, связанное с объединенной правой таблицей.
Рисунок 1-39 Запрос полусоединения
hive> select * from student join lib on student.num =lib.num join price on lib.book=price.book;
Запрос с несколькими таблицами (более двух), например: запрос книг, взятых напрокат студентами, и цены на книги. В большинстве случаев Hive запускает задачу MapReduce для каждой пары объектов соединения jion.
Рисунок 1-40 Многотабличный запрос