Улей — Введение
Термин «Большие данные» используется для сбора больших наборов данных, которые включают огромный объем, высокую скорость и разнообразные данные, число которых увеличивается день ото дня. Используя традиционные системы управления данными, трудно обрабатывать большие данные. Поэтому Apache Software Foundation представил платформу Hadoop для решения задач управления и обработки больших данных.
Hadoop
Hadoop — это среда с открытым исходным кодом для хранения и обработки больших данных в распределенной среде. Он содержит два модуля: один — MapReduce, а другой — распределенную файловую систему Hadoop (HDFS).
-
MapReduce: это модель параллельного программирования для обработки больших объемов структурированных, полуструктурированных и неструктурированных данных на больших кластерах товарного оборудования.
-
HDFS: распределенная файловая система Hadoop является частью инфраструктуры Hadoop, используемой для хранения и обработки наборов данных. Он обеспечивает отказоустойчивую файловую систему для работы на обычном оборудовании.
MapReduce: это модель параллельного программирования для обработки больших объемов структурированных, полуструктурированных и неструктурированных данных на больших кластерах товарного оборудования.
HDFS: распределенная файловая система Hadoop является частью инфраструктуры Hadoop, используемой для хранения и обработки наборов данных. Он обеспечивает отказоустойчивую файловую систему для работы на обычном оборудовании.
Экосистема Hadoop содержит различные подпроекты (инструменты), такие как Sqoop, Pig и Hive, которые используются для помощи модулям Hadoop.
-
Sqoop: используется для импорта и экспорта данных между HDFS и RDBMS.
-
Свинья: Это процедурная языковая платформа, используемая для разработки скрипта для операций MapReduce.
-
Hive: это платформа, используемая для разработки сценариев типа SQL для выполнения операций MapReduce.
Sqoop: используется для импорта и экспорта данных между HDFS и RDBMS.
Свинья: Это процедурная языковая платформа, используемая для разработки скрипта для операций MapReduce.
Hive: это платформа, используемая для разработки сценариев типа SQL для выполнения операций MapReduce.
Примечание. Существуют различные способы выполнения операций MapReduce:
- Традиционный подход с использованием программы Java MapReduce для структурированных, полуструктурированных и неструктурированных данных.
- Подход сценариев для MapReduce для обработки структурированных и полуструктурированных данных с использованием Pig.
- Язык запросов Hive (HiveQL или HQL) для MapReduce для обработки структурированных данных с использованием Hive.
Что такое улей
Hive — это инструмент инфраструктуры хранилища данных для обработки структурированных данных в Hadoop. Он находится на вершине Hadoop для суммирования больших данных и упрощает запросы и анализ.
Изначально Hive разрабатывался Facebook, позже Apache Software Foundation взялся за него и развивал его как открытый исходный код под названием Apache Hive. Используется разными компаниями. Например, Amazon использует его в Amazon Elastic MapReduce.
Улей нет
- Реляционная база данных
- Проект для обработки транзакций OnLine (OLTP)
- Язык запросов в реальном времени и обновлений на уровне строк
Особенности Улья
- Он хранит схему в базе данных и обрабатывает данные в HDFS.
- Он предназначен для OLAP.
- Он предоставляет язык типов SQL для запросов, называемых HiveQL или HQL.
- Это знакомо, быстро, масштабируемо и расширяемо.
Архитектура улья
Следующая диаграмма компонентов изображает архитектуру Hive:
Эта диаграмма компонентов содержит различные единицы. Следующая таблица описывает каждую единицу:
Название объекта | операция |
---|---|
Пользовательский интерфейс | Hive — это программное обеспечение инфраструктуры хранилища данных, которое может создавать взаимодействие между пользователем и HDFS. Пользовательские интерфейсы, которые поддерживает Hive: веб-интерфейс Hive, командная строка Hive и Hive HD Insight (на сервере Windows). |
Мета Магазин | Hive выбирает соответствующие серверы баз данных для хранения схемы или метаданных таблиц, баз данных, столбцов в таблице, их типов данных и сопоставления HDFS. |
HiveQL Process Engine | HiveQL аналогичен SQL для запроса информации о схеме в Metastore. Это одна из замен традиционного подхода к программе MapReduce. Вместо того, чтобы писать программу MapReduce на Java, мы можем написать запрос для задания MapReduce и обработать его. |
Двигатель исполнения | Соединительной частью HiveQL Process Engine и MapReduce является Hive Execution Engine. Механизм выполнения обрабатывает запрос и генерирует результаты так же, как и результаты MapReduce. Он использует аромат MapReduce. |
HDFS или HBASE | Распределенная файловая система Hadoop или HBASE — это методы хранения данных для хранения данных в файловой системе. |
Работа Улей
На следующей диаграмме показан рабочий процесс между Hive и Hadoop.
Следующая таблица определяет, как Hive взаимодействует с платформой Hadoop:
Шаг № | операция |
---|---|
1 | Выполнить запрос
Интерфейс Hive, такой как командная строка или веб-интерфейс, отправляет запрос драйверу (любой драйвер базы данных, такой как JDBC, ODBC и т. Д.) Для выполнения. |
2 | Получить план
Драйвер пользуется помощью компилятора запросов, который анализирует запрос, чтобы проверить синтаксис и план запроса или требование запроса. |
3 | Получить метаданные
Компилятор отправляет запрос метаданных в Metastore (любую базу данных). |
4 | Отправить метаданные
Metastore отправляет метаданные как ответ компилятору. |
5 | Отправить план
Компилятор проверяет требование и отправляет план водителю. На этом разбор и компиляция запроса завершены. |
6 | Выполнить план
Драйвер отправляет план выполнения в механизм выполнения. |
7 | Выполнить работу
Внутренне процесс выполнения задания является заданием MapReduce. Механизм выполнения отправляет задание в JobTracker, который находится в узле Name, и назначает это задание в TaskTracker, который находится в узле Data. Здесь запрос выполняет задание MapReduce. |
7,1 | Метаданные Ops
Между тем во время выполнения механизм исполнения может выполнять операции метаданных с Metastore. |
8 | Получить результат
Механизм выполнения получает результаты от узлов данных. |
9 | Отправить результаты
Механизм выполнения отправляет эти результирующие значения драйверу. |
10 | Отправить результаты
Драйвер отправляет результаты в интерфейсы Hive. |
Интерфейс Hive, такой как командная строка или веб-интерфейс, отправляет запрос драйверу (любой драйвер базы данных, такой как JDBC, ODBC и т. Д.) Для выполнения.
Драйвер пользуется помощью компилятора запросов, который анализирует запрос, чтобы проверить синтаксис и план запроса или требование запроса.
Компилятор отправляет запрос метаданных в Metastore (любую базу данных).
Metastore отправляет метаданные как ответ компилятору.
Компилятор проверяет требование и отправляет план водителю. На этом разбор и компиляция запроса завершены.
Драйвер отправляет план выполнения в механизм выполнения.
Внутренне процесс выполнения задания является заданием MapReduce. Механизм выполнения отправляет задание в JobTracker, который находится в узле Name, и назначает это задание в TaskTracker, который находится в узле Data. Здесь запрос выполняет задание MapReduce.
Между тем во время выполнения механизм исполнения может выполнять операции метаданных с Metastore.
Механизм выполнения получает результаты от узлов данных.
Механизм выполнения отправляет эти результирующие значения драйверу.
Драйвер отправляет результаты в интерфейсы Hive.
Улей — Установка
Все подпроекты Hadoop, такие как Hive, Pig и HBase, поддерживают операционную систему Linux. Следовательно, вам нужно установить любую ОС Linux. Для установки Hive выполняются следующие простые шаги:
Шаг 1: Проверка установки JAVA
Java должна быть установлена в вашей системе перед установкой Hive. Давайте проверим установку Java, используя следующую команду:
$ java –version
Если Java уже установлена в вашей системе, вы увидите следующий ответ:
java version "1.7.0_71" Java(TM) SE Runtime Environment (build 1.7.0_71-b13) Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
Если java не установлен в вашей системе, следуйте приведенным ниже инструкциям для установки java.
Установка Java
Шаг I:
Загрузите java (JDK <последняя версия> — X64.tar.gz), перейдя по следующей ссылке http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html.
Затем jdk-7u71-linux-x64.tar.gz будет загружен в вашу систему.
Шаг II:
Обычно вы найдете загруженный файл Java в папке Downloads. Проверьте его и извлеките файл jdk-7u71-linux-x64.gz, используя следующие команды.
$ cd Downloads/ $ ls jdk-7u71-linux-x64.gz $ tar zxf jdk-7u71-linux-x64.gz $ ls jdk1.7.0_71 jdk-7u71-linux-x64.gz
Шаг III:
Чтобы сделать Java доступным для всех пользователей, вы должны переместить его в папку «/ usr / local /». Откройте root и введите следующие команды.
$ su password: # mv jdk1.7.0_71 /usr/local/ # exit
Шаг IV:
Для настройки переменных PATH и JAVA_HOME добавьте следующие команды в файл ~ / .bashrc.
export JAVA_HOME=/usr/local/jdk1.7.0_71 export PATH=PATH:$JAVA_HOME/bin
Теперь проверьте установку, используя команду java -version из терминала, как описано выше.
Шаг 2: Проверка установки Hadoop
Hadoop должен быть установлен в вашей системе перед установкой Hive. Давайте проверим установку Hadoop с помощью следующей команды:
$ hadoop version
Если Hadoop уже установлен в вашей системе, вы получите следующий ответ:
Hadoop 2.4.1 Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768 Compiled by hortonmu on 2013-10-07T06:28Z Compiled with protoc 2.5.0 From source with checksum 79e53ce7994d1628b240f09af91e1af4
Если Hadoop не установлен в вашей системе, выполните следующие действия:
Загрузка Hadoop
Загрузите и извлеките Hadoop 2.4.1 из Apache Software Foundation, используя следующие команды.
$ su password: # cd /usr/local # wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/ hadoop-2.4.1.tar.gz # tar xzf hadoop-2.4.1.tar.gz # mv hadoop-2.4.1/* to hadoop/ # exit
Установка Hadoop в псевдо-распределенном режиме
Следующие шаги используются для установки Hadoop 2.4.1 в псевдораспределенном режиме.
Шаг I: Настройка Hadoop
Вы можете установить переменные среды Hadoop, добавив следующие команды в файл ~ / .bashrc .
export HADOOP_HOME=/usr/local/hadoop export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
Теперь примените все изменения в текущей работающей системе.
$ source ~/.bashrc
Шаг II: настройка Hadoop
Вы можете найти все файлы конфигурации Hadoop в папке «$ HADOOP_HOME / etc / hadoop». Вам необходимо внести соответствующие изменения в эти файлы конфигурации в соответствии с вашей инфраструктурой Hadoop.
$ cd $HADOOP_HOME/etc/hadoop
Чтобы разрабатывать программы Hadoop с использованием java, необходимо сбросить переменные среды java в файле hadoop-env.sh , заменив значение JAVA_HOME местоположением java в вашей системе.
export JAVA_HOME=/usr/local/jdk1.7.0_71
Ниже приведен список файлов, которые вы должны отредактировать для настройки Hadoop.
ядро-site.xml
Файл core-site.xml содержит такую информацию, как номер порта, используемый для экземпляра Hadoop, память, выделенная для файловой системы, лимит памяти для хранения данных и размер буферов чтения / записи.
Откройте файл core-site.xml и добавьте следующие свойства между тегами <configuration> и </ configuration>.
<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration>
HDFS-site.xml
Файл hdfs-site.xml содержит такую информацию, как значение данных репликации, путь namenode и путь datanode в ваших локальных файловых системах. Это означает место, где вы хотите хранить Hadoop инфра.
Допустим, следующие данные.
dfs.replication (data replication value) = 1 (In the following path /hadoop/ is the user name. hadoopinfra/hdfs/namenode is the directory created by hdfs file system.) namenode path = //home/hadoop/hadoopinfra/hdfs/namenode (hadoopinfra/hdfs/datanode is the directory created by hdfs file system.) datanode path = //home/hadoop/hadoopinfra/hdfs/datanode
Откройте этот файл и добавьте следующие свойства между тегами <configuration>, </ configuration> в этом файле.
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.name.dir</name> <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value> </property> <property> <name>dfs.data.dir</name> <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value > </property> </configuration>
Примечание. В приведенном выше файле все значения свойств определяются пользователем, и вы можете вносить изменения в соответствии с инфраструктурой Hadoop.
Пряжа-site.xml
Этот файл используется для настройки пряжи в Hadoop. Откройте файл yarn-site.xml и добавьте следующие свойства между тегами <configuration>, </ configuration> в этом файле.
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
mapred-site.xml
Этот файл используется, чтобы указать, какую платформу MapReduce мы используем. По умолчанию Hadoop содержит шаблон yarn-site.xml. Прежде всего, вам нужно скопировать файл из mapred-site, xml.template в файл mapred-site.xml, используя следующую команду.
$ cp mapred-site.xml.template mapred-site.xml
Откройте файл mapred-site.xml и добавьте следующие свойства между тегами <configuration>, </ configuration> в этом файле.
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
Проверка правильности установки Hadoop
Следующие шаги используются для проверки установки Hadoop.
Шаг I: Настройка узла имени
Настройте namenode с помощью команды «hdfs namenode -format» следующим образом.
$ cd ~ $ hdfs namenode -format
Ожидаемый результат заключается в следующем.
10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = localhost/192.168.1.11 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 2.4.1 ... ... 10/24/14 21:30:56 INFO common.Storage: Storage directory /home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted. 10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0 10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11 ************************************************************/
Шаг II: Проверка Hadoop dfs
Следующая команда используется для запуска dfs. Выполнение этой команды запустит вашу файловую систему Hadoop.
$ start-dfs.sh
Ожидаемый результат выглядит следующим образом:
10/24/14 21:37:56 Starting namenodes on [localhost] localhost: starting namenode, logging to /home/hadoop/hadoop-2.4.1/logs/hadoop-hadoop-namenode-localhost.out localhost: starting datanode, logging to /home/hadoop/hadoop-2.4.1/logs/hadoop-hadoop-datanode-localhost.out Starting secondary namenodes [0.0.0.0]
Шаг III: Проверка скрипта пряжи
Следующая команда используется для запуска скрипта пряжи. Выполнение этой команды запустит ваши демоны пряжи.
$ start-yarn.sh
Ожидаемый результат выглядит следующим образом:
starting yarn daemons starting resourcemanager, logging to /home/hadoop/hadoop-2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out localhost: starting nodemanager, logging to /home/hadoop/hadoop-2.4.1/logs/yarn-hadoop-nodemanager-localhost.out
Шаг IV: доступ к Hadoop в браузере
Номер порта по умолчанию для доступа к Hadoop — 50070. Используйте следующий URL-адрес, чтобы получить службы Hadoop в вашем браузере.
http://localhost:50070/
Шаг V: Проверьте все приложения для кластера
Номер порта по умолчанию для доступа ко всем приложениям кластера — 8088. Используйте следующий URL для посещения этой службы.
http://localhost:8088/
Шаг 3: Загрузка Hive
Мы используем hive-0.14.0 в этом уроке. Вы можете загрузить его, посетив следующую ссылку http://apache.petsads.us/hive/hive-0.14.0/. Предположим, что он загружается в каталог / Downloads. Здесь мы загружаем архив Hive с именем «apache-hive-0.14.0-bin.tar.gz» для этого урока. Следующая команда используется для проверки загрузки:
$ cd Downloads $ ls
При успешной загрузке вы увидите следующий ответ:
apache-hive-0.14.0-bin.tar.gz
Шаг 4: Установка куста
Следующие шаги необходимы для установки Hive в вашей системе. Предположим, что архив Hive загружен в каталог / Downloads.
Извлечение и проверка архива Hive
Следующая команда используется для проверки загрузки и извлечения архива куста:
$ tar zxvf apache-hive-0.14.0-bin.tar.gz $ ls
При успешной загрузке вы увидите следующий ответ:
apache-hive-0.14.0-bin apache-hive-0.14.0-bin.tar.gz
Копирование файлов в каталог / usr / local / hive
Нам нужно скопировать файлы от суперпользователя «su -». Следующие команды используются для копирования файлов из извлеченного каталога в каталог / usr / local / hive.
$ su - passwd: # cd /home/user/Download # mv apache-hive-0.14.0-bin /usr/local/hive # exit
Настройка среды для Hive
Вы можете настроить среду Hive, добавив следующие строки в файл ~ / .bashrc :
export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin export CLASSPATH=$CLASSPATH:/usr/local/Hadoop/lib/*:. export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:.
Следующая команда используется для выполнения файла ~ / .bashrc.
$ source ~/.bashrc
Шаг 5: Настройка Hive
Чтобы настроить Hive с Hadoop, вам нужно отредактировать файл hive-env.sh , который находится в каталоге $ HIVE_HOME / conf . Следующие команды перенаправляют в папку конфигурации Hive и копируют файл шаблона:
$ cd $HIVE_HOME/conf $ cp hive-env.sh.template hive-env.sh
Отредактируйте файл hive-env.sh , добавив следующую строку:
export HADOOP_HOME=/usr/local/hadoop
Улей установка успешно завершена. Теперь вам требуется внешний сервер базы данных для настройки Metastore. Мы используем базу данных Apache Derby.
Шаг 6: Загрузка и установка Apache Derby
Следуйте приведенным ниже инструкциям, чтобы загрузить и установить Apache Derby:
Загрузка Apache Derby
Следующая команда используется для загрузки Apache Derby. Загрузка занимает некоторое время.
$ cd ~ $ wget http://archive.apache.org/dist/db/derby/db-derby-10.4.2.0/db-derby-10.4.2.0-bin.tar.gz
Следующая команда используется для проверки загрузки:
$ ls
При успешной загрузке вы увидите следующий ответ:
db-derby-10.4.2.0-bin.tar.gz
Извлечение и проверка архива Derby
Следующие команды используются для извлечения и проверки архива Derby:
$ tar zxvf db-derby-10.4.2.0-bin.tar.gz $ ls
При успешной загрузке вы увидите следующий ответ:
db-derby-10.4.2.0-bin db-derby-10.4.2.0-bin.tar.gz
Копирование файлов в каталог / usr / local / derby
Нам нужно скопировать от суперпользователя «su -». Следующие команды используются для копирования файлов из извлеченного каталога в каталог / usr / local / derby:
$ su - passwd: # cd /home/user # mv db-derby-10.4.2.0-bin /usr/local/derby # exit
Настройка среды для Derby
Вы можете настроить среду Derby, добавив следующие строки в файл ~ / .bashrc :
export DERBY_HOME=/usr/local/derby export PATH=$PATH:$DERBY_HOME/bin Apache Hive 18 export CLASSPATH=$CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar
Следующая команда используется для выполнения файла ~ / .bashrc :
$ source ~/.bashrc
Создать каталог для хранения Metastore
Создайте каталог с именем data в каталоге $ DERBY_HOME для хранения данных Metastore.
$ mkdir $DERBY_HOME/data
Установка Derby и настройка среды завершены.
Шаг 7: Настройка Метасторка Улья
Настройка Metastore означает указание Hive, где хранится база данных. Вы можете сделать это, отредактировав файл hive-site.xml, который находится в каталоге $ HIVE_HOME / conf. Прежде всего, скопируйте файл шаблона с помощью следующей команды:
$ cd $HIVE_HOME/conf $ cp hive-default.xml.template hive-site.xml
Отредактируйте файл hive-site.xml и добавьте следующие строки между тегами <configuration> и </ configuration>:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby://localhost:1527/metastore_db;create=true </value> <description>JDBC connect string for a JDBC metastore </description> </property>
Создайте файл с именем jpox.properties и добавьте в него следующие строки:
javax.jdo.PersistenceManagerFactoryClass = org.jpox.PersistenceManagerFactoryImpl org.jpox.autoCreateSchema = false org.jpox.validateTables = false org.jpox.validateColumns = false org.jpox.validateConstraints = false org.jpox.storeManagerType = rdbms org.jpox.autoCreateSchema = true org.jpox.autoStartMechanismMode = checked org.jpox.transactionIsolation = read_committed javax.jdo.option.DetachAllOnCommit = true javax.jdo.option.NontransactionalRead = true javax.jdo.option.ConnectionDriverName = org.apache.derby.jdbc.ClientDriver javax.jdo.option.ConnectionURL = jdbc:derby://hadoop1:1527/metastore_db;create = true javax.jdo.option.ConnectionUserName = APP javax.jdo.option.ConnectionPassword = mine
Шаг 8: Проверка установки куста
Перед запуском Hive необходимо создать папку / tmp и отдельную папку Hive в HDFS. Здесь мы используем папку / user / hive / warehouse . Вам необходимо установить разрешение на запись для этих вновь созданных папок, как показано ниже:
chmod g+w
Теперь установите их в HDFS перед проверкой Hive. Используйте следующие команды:
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp $ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse $ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp $ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
Следующие команды используются для проверки установки Hive:
$ cd $HIVE_HOME $ bin/hive
При успешной установке Hive вы увидите следующий ответ:
Logging initialized using configuration in jar:file:/home/hadoop/hive-0.9.0/lib/hive-common-0.9.0.jar!/hive-log4j.properties Hive history file=/tmp/hadoop/hive_job_log_hadoop_201312121621_1494929084.txt …………………. hive>
Следующая примерная команда выполняется для отображения всех таблиц:
hive> show tables; OK Time taken: 2.798 seconds hive>
Улей — Типы данных
В этой главе рассказывается о различных типах данных в Hive, которые участвуют в создании таблицы. Все типы данных в Hive подразделяются на четыре типа:
- Типы столбцов
- литералы
- Нулевые значения
- Сложные типы
Типы столбцов
Тип столбца используется в качестве типа данных столбца Hive. Они заключаются в следующем:
Интегральные типы
Данные целочисленного типа могут быть указаны с использованием целочисленных типов данных, INT. Когда диапазон данных превышает диапазон INT, вам нужно использовать BIGINT, а если диапазон данных меньше, чем INT, вы используете SMALLINT. TINYINT меньше SMALLINT.
В следующей таблице представлены различные типы данных INT:
Тип | постфикс | пример |
---|---|---|
TINYINT | Y | 10Y |
SMALLINT | S | 10S |
INT | — | 10 |
BIGINT | L | 10L |
Типы строк
Типы данных типа String могут быть указаны с помощью одинарных кавычек (») или двойных кавычек («»). Он содержит два типа данных: VARCHAR и CHAR. Улей следует за escape-символами C-типов.
В следующей таблице представлены различные типы данных CHAR:
Тип данных | длина |
---|---|
VARCHAR | 1 до 65355 |
CHAR | 255 |
Отметка
Он поддерживает традиционную метку времени UNIX с дополнительной точностью до наносекунды. Он поддерживает формат java.sql.Timestamp «ГГГГ-ММ-ДД ЧЧ: ММ: СС.fffffffff» и формат «гггг-мм-дд чч: мм: сс.фффффффффф».
Даты
Значения ДАТЫ описываются в формате год / месяц / день в форме {{ГГГГ-ММ-ДД}}.
Десятичные
Тип DECIMAL в Hive такой же, как и в формате Big Decimal в Java. Он используется для представления неизменяемой произвольной точности. Синтаксис и пример следующие:
DECIMAL(precision, scale) decimal(10,0)
Типы Союза
Союз представляет собой набор разнородных типов данных. Вы можете создать экземпляр, используя create union . Синтаксис и пример следующие:
UNIONTYPE<int, double, array<string>, struct<a:int,b:string>> {0:1} {1:2.0} {2:["three","four"]} {3:{"a":5,"b":"five"}} {2:["six","seven"]} {3:{"a":8,"b":"eight"}} {0:9} {1:10.0}
литералы
В Hive используются следующие литералы:
Типы с плавающей точкой
Типы с плавающей точкой — это не что иное, как числа с десятичными точками. Как правило, этот тип данных состоит из типа данных DOUBLE.
Десятичный тип
Данные десятичного типа — это не что иное, как значение с плавающей запятой с более высоким диапазоном, чем тип данных DOUBLE. Диапазон десятичного типа составляет примерно от -10 -308 до 10 308 .
Нулевое значение
Недостающие значения представлены специальным значением NULL.
Сложные типы
Сложные типы данных Hive:
Массивы
Массивы в Hive используются так же, как в Java.
Синтаксис: ARRAY <тип_данных>
Карты
Карты в Hive похожи на Java Maps.
Синтаксис: MAP <primitive_type, data_type>
Структуры
Структура в Hive похожа на использование сложных данных с комментариями.
Синтаксис: STRUCT <col_name: data_type [COMMENT col_comment], …>
Улей — Создать базу данных
Hive — это технология баз данных, которая может определять базы данных и таблицы для анализа структурированных данных. Тема анализа структурированных данных — хранить данные в табличной форме и передавать запросы для их анализа. В этой главе объясняется, как создать базу данных Hive. Hive содержит базу данных по умолчанию с именем default .
Создать заявление базы данных
Создать базу данных — это инструкция, используемая для создания базы данных в Hive. База данных в Hive — это пространство имен или набор таблиц. Синтаксис этого оператора следующий:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>
Здесь IF NOT EXISTS является необязательным предложением, которое уведомляет пользователя о том, что база данных с таким именем уже существует. В этой команде мы можем использовать SCHEMA вместо базы данных. Следующий запрос выполняется для создания базы данных с именем userdb :
hive> CREATE DATABASE [IF NOT EXISTS] userdb;
или же
hive> CREATE SCHEMA userdb;
Следующий запрос используется для проверки списка баз данных:
hive> SHOW DATABASES; default userdb
Программа JDBC
Программа JDBC для создания базы данных приведена ниже.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; 4. CREATE DATABASE import java.sql.Statement; import java.sql.DriverManager; public class HiveCreateDb { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/default", "", ""); Statement stmt = con.createStatement(); stmt.executeQuery("CREATE DATABASE userdb"); System.out.println(“Database userdb created successfully.”); con.close(); } }
Сохраните программу в файле с именем HiveCreateDb.java. Следующие команды используются для компиляции и выполнения этой программы.
$ javac HiveCreateDb.java $ java HiveCreateDb
Выход:
Database userdb created successfully.
Hive — Drop Database
В этой главе описывается, как удалить базу данных в Hive. Использование SCHEMA и DATABASE одинаково.
Удалить базу данных
Drop Database — это оператор, который удаляет все таблицы и удаляет базу данных. Его синтаксис выглядит следующим образом:
DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
Следующие запросы используются для удаления базы данных. Предположим, что имя базы данных — userdb .
hive> DROP DATABASE IF EXISTS userdb;
Следующий запрос удаляет базу данных с помощью CASCADE . Это означает удаление соответствующих таблиц перед удалением базы данных.
hive> DROP DATABASE IF EXISTS userdb CASCADE;
Следующий запрос удаляет базу данных, используя SCHEMA .
hive> DROP SCHEMA userdb;
Этот пункт был добавлен в Улей 0.6.
Программа JDBC
Программа JDBC для удаления базы данных приведена ниже.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; 5. DROP DATABASE public class HiveDropDb { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/default", "", ""); Statement stmt = con.createStatement(); stmt.executeQuery("DROP DATABASE userdb"); System.out.println(“Drop userdb database successful.”); con.close(); } }
Сохраните программу в файле с именем HiveDropDb.java. Ниже приведены команды для компиляции и выполнения этой программы.
$ javac HiveDropDb.java $ java HiveDropDb
Выход:
Drop userdb database successful.
Улей — Создать таблицу
В этой главе объясняется, как создать таблицу и как вставить в нее данные. Соглашения о создании таблицы в HIVE очень похожи на создание таблицы с использованием SQL.
Создать таблицу Заявление
Создать таблицу — это инструкция, используемая для создания таблицы в Hive. Синтаксис и пример следующие:
Синтаксис
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [ROW FORMAT row_format] [STORED AS file_format]
пример
Предположим, вам нужно создать таблицу с именем employee с помощью оператора CREATE TABLE . В следующей таблице перечислены поля и их типы данных в таблице сотрудников:
Sr.No | Имя поля | Тип данных |
---|---|---|
1 | Ид | ИНТ |
2 | название | строка |
3 | Оплата труда | терка |
4 | обозначение | строка |
Следующие данные представляют собой поля комментариев, форматированных строк, таких как терминатор полей, терминатор строк и тип хранимого файла.
COMMENT ‘Employee details’ FIELDS TERMINATED BY ‘\t’ LINES TERMINATED BY ‘\n’ STORED IN TEXT FILE
Следующий запрос создает таблицу с именем employee, используя приведенные выше данные.
hive> CREATE TABLE IF NOT EXISTS employee ( eid int, name String, > salary String, destination String) > COMMENT ‘Employee details’ > ROW FORMAT DELIMITED > FIELDS TERMINATED BY ‘\t’ > LINES TERMINATED BY ‘\n’ > STORED AS TEXTFILE;
Если вы добавите опцию ЕСЛИ НЕ СУЩЕСТВУЕТ, Hive игнорирует оператор, если таблица уже существует.
После успешного создания таблицы вы увидите следующий ответ:
OK Time taken: 5.905 seconds hive>
Программа JDBC
Программа JDBC для создания таблицы приведена в качестве примера.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveCreateTable { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("CREATE TABLE IF NOT EXISTS " +" employee ( eid int, name String, " +" salary String, destignation String)" +" COMMENT ‘Employee details’" +" ROW FORMAT DELIMITED" +" FIELDS TERMINATED BY ‘\t’" +" LINES TERMINATED BY ‘\n’" +" STORED AS TEXTFILE;"); System.out.println(“ Table employee created.”); con.close(); } }
Сохраните программу в файле с именем HiveCreateDb.java. Следующие команды используются для компиляции и выполнения этой программы.
$ javac HiveCreateDb.java $ java HiveCreateDb
Выход
Table employee created.
Заявление о загрузке данных
Как правило, после создания таблицы в SQL мы можем вставить данные с помощью оператора Insert. Но в Hive мы можем вставить данные, используя оператор LOAD DATA.
При вставке данных в Hive лучше использовать LOAD DATA для хранения массовых записей. Есть два способа загрузки данных: один из локальной файловой системы, а второй из файловой системы Hadoop.
Синтекс
Синтаксис для загрузки данных выглядит следующим образом:
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
- LOCAL — это идентификатор для указания локального пути. Это необязательно.
- ПЕРЕЗАПИСАТЬ необязательно для перезаписи данных в таблице.
- РАЗДЕЛ необязательно.
пример
Мы вставим следующие данные в таблицу. Это текстовый файл с именем sample.txt в каталоге / home / user .
1201 Gopal 45000 Technical manager 1202 Manisha 45000 Proof reader 1203 Masthanvali 40000 Technical writer 1204 Krian 40000 Hr Admin 1205 Kranthi 30000 Op Admin
Следующий запрос загружает данный текст в таблицу.
hive> LOAD DATA LOCAL INPATH '/home/user/sample.txt' > OVERWRITE INTO TABLE employee;
При успешной загрузке вы увидите следующий ответ:
OK Time taken: 15.905 seconds hive>
Программа JDBC
Ниже приведена программа JDBC для загрузки данных в таблицу.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveLoadData { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("LOAD DATA LOCAL INPATH '/home/user/sample.txt'" +"OVERWRITE INTO TABLE employee;"); System.out.println("Load Data into employee successful"); con.close(); } }
Сохраните программу в файле с именем HiveLoadData.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveLoadData.java $ java HiveLoadData
Выход:
Load Data into employee successful
Улей — Таблица Изменения
В этой главе объясняется, как изменить атрибуты таблицы, например изменить имя таблицы, изменить имена столбцов, добавить столбцы и удалить или заменить столбцы.
Изменить таблицу
Он используется для изменения таблицы в Улей.
Синтаксис
Оператор принимает любой из следующих синтаксисов в зависимости от того, какие атрибуты мы хотим изменить в таблице.
ALTER TABLE name RENAME TO new_name ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...]) ALTER TABLE name DROP [COLUMN] column_name ALTER TABLE name CHANGE column_name new_name new_type ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
Переименовать в … Заявление
Следующий запрос переименовывает таблицу из сотрудника в emp .
hive> ALTER TABLE employee RENAME TO emp;
Программа JDBC
Программа JDBC для переименования таблицы выглядит следующим образом.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveAlterRenameTo { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("ALTER TABLE employee RENAME TO emp;"); System.out.println("Table Renamed Successfully"); con.close(); } }
Сохраните программу в файле с именем HiveAlterRenameTo.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveAlterRenameTo.java $ java HiveAlterRenameTo
Выход:
Table renamed successfully.
Изменить заявление
В следующей таблице приведены поля таблицы сотрудников и показаны поля, которые необходимо изменить (жирным шрифтом).
Имя поля | Преобразовать из типа данных | Изменить имя поля | Преобразовать в тип данных |
---|---|---|---|
Ид | ИНТ | Ид | ИНТ |
название | строка | ENAME | строка |
оплата труда | терка | оплата труда | двойной |
обозначение | строка | обозначение | строка |
Следующие запросы переименовывают имя столбца и тип данных столбца, используя приведенные выше данные:
hive> ALTER TABLE employee CHANGE name ename String; hive> ALTER TABLE employee CHANGE salary salary Double;
Программа JDBC
Ниже приведена программа JDBC для изменения столбца.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveAlterChangeColumn { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("ALTER TABLE employee CHANGE name ename String;"); stmt.executeQuery("ALTER TABLE employee CHANGE salary salary Double;"); System.out.println("Change column successful."); con.close(); } }
Сохраните программу в файле с именем HiveAlterChangeColumn.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveAlterChangeColumn.java $ java HiveAlterChangeColumn
Выход:
Change column successful.
Добавить столбец Заявление
Следующий запрос добавляет столбец с именем dept к таблице сотрудников.
hive> ALTER TABLE employee ADD COLUMNS ( > dept STRING COMMENT 'Department name');
Программа JDBC
Программа JDBC для добавления столбца в таблицу приведена ниже.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveAlterAddColumn { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("ALTER TABLE employee ADD COLUMNS " +" (dept STRING COMMENT 'Department name');"); System.out.prinln("Add column successful."); con.close(); } }
Сохраните программу в файле с именем HiveAlterAddColumn.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveAlterAddColumn.java $ java HiveAlterAddColumn
Выход:
Add column successful.
Заменить заявление
Следующий запрос удаляет все столбцы из таблицы employee и заменяет их столбцами emp и name :
hive> ALTER TABLE employee REPLACE COLUMNS ( > eid INT empid Int, > ename STRING name String);
Программа JDBC
Ниже приведена программа JDBC для замены столбца eid на empid, а столбец ename — на имя .
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveAlterReplaceColumn { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("ALTER TABLE employee REPLACE COLUMNS " +" (eid INT empid Int," +" ename STRING name String);"); System.out.println(" Replace column successful"); con.close(); } }
Сохраните программу в файле с именем HiveAlterReplaceColumn.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveAlterReplaceColumn.java $ java HiveAlterReplaceColumn
Выход:
Replace column successful.
Hive — Drop Table
В этой главе описывается, как удалить таблицу в Hive. Когда вы удаляете таблицу из Hive Metastore, она удаляет данные таблицы / столбца и их метаданные. Это может быть обычная таблица (хранящаяся в Metastore) или внешняя таблица (хранящаяся в локальной файловой системе); Улей относится к обоим одинаково, независимо от их типа.
Выписка со стола
Синтаксис выглядит следующим образом:
DROP TABLE [IF EXISTS] table_name;
Следующий запрос удаляет таблицу с именем employee :
hive> DROP TABLE IF EXISTS employee;
При успешном выполнении запроса вы увидите следующий ответ:
OK Time taken: 5.3 seconds hive>
Программа JDBC
Следующая программа JDBC удаляет таблицу сотрудников.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveDropTable { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement stmt.executeQuery("DROP TABLE IF EXISTS employee;"); System.out.println("Drop table successful."); con.close(); } }
Сохраните программу в файле с именем HiveDropTable.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveDropTable.java $ java HiveDropTable
Выход:
Drop table successful
Следующий запрос используется для проверки списка таблиц:
hive> SHOW TABLES; emp ok Time taken: 2.1 seconds hive>
Улей — Разделение
Улей организует таблицы в разделы. Это способ разделения таблицы на связанные части на основе значений разделенных столбцов, таких как дата, город и отдел. Используя раздел, легко запросить часть данных.
Таблицы или разделы подразделяются на сегменты, чтобы обеспечить дополнительную структуру данных, которые могут использоваться для более эффективного запроса. Группировка работает на основе значения хеш-функции некоторого столбца таблицы.
Например, таблица с именем Tab1 содержит данные о сотрудниках, такие как id, name, dept и yoj (т. Е. Год присоединения). Предположим, вам нужно получить сведения обо всех сотрудниках, присоединившихся в 2012 году. Запрос ищет всю информацию во всей таблице. Однако если вы разделите данные о сотрудниках по году и сохраните их в отдельном файле, это сократит время обработки запроса. В следующем примере показано, как разделить файл и его данные:
Следующий файл содержит таблицу сотрудников.
/ Tab1 / employeedata / файл1
id, name, dept, yoj
1, Гопал, ТП, 2012
2, Киран, HR, 2012
3, Калее, СК, 2013
4, Prasanth, SC, 2013
Приведенные выше данные разбиты на два файла с использованием года.
/ Tab1 / employeedata / 2012 / file2
1, Гопал, ТП, 2012
2, Киран, HR, 2012
/ Tab1 / employeedata / 2013 / file3
3, Калее, СК, 2013
4, Prasanth, SC, 2013
Добавление раздела
Мы можем добавить разделы в таблицу, изменив таблицу. Предположим, у нас есть таблица с именем employee, в которой есть такие поля, как Id, Name, Salary, Designation, Dept и yoj.
Синтаксис:
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...; partition_spec: : (p_column = p_col_value, p_column = p_col_value, ...)
Следующий запрос используется для добавления раздела в таблицу сотрудников.
hive> ALTER TABLE employee > ADD PARTITION (year=’2012’) > location '/2012/part2012';
Переименование раздела
Синтаксис этой команды следующий.
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
Следующий запрос используется для переименования раздела:
hive> ALTER TABLE employee PARTITION (year=’1203’) > RENAME TO PARTITION (Yoj=’1203’);
Отбрасывание раздела
Следующий синтаксис используется для удаления раздела:
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;
Следующий запрос используется для удаления раздела:
hive> ALTER TABLE employee DROP [IF EXISTS] > PARTITION (year=’1203’);
Hive — встроенные операторы
В этой главе описываются встроенные операторы Hive. В Hive есть четыре типа операторов:
- Операторы отношений
- Арифметические Операторы
- Логические Операторы
- Комплексные операторы
Операторы отношений
Эти операторы используются для сравнения двух операндов. В следующей таблице описаны реляционные операторы, доступные в Hive:
оператор | Операнд | Описание |
---|---|---|
A = B | все примитивные типы | TRUE, если выражение A эквивалентно выражению B, иначе FALSE. |
A! = B | все примитивные типы | TRUE, если выражение A не эквивалентно выражению B, иначе FALSE. |
A <B | все примитивные типы | TRUE, если выражение A меньше, чем выражение B, иначе FALSE. |
A <= B | все примитивные типы | TRUE, если выражение A меньше или равно выражению B, иначе FALSE. |
A> B | все примитивные типы | TRUE, если выражение A больше, чем выражение B, иначе FALSE. |
A> = B | все примитивные типы | TRUE, если выражение A больше или равно выражению B, иначе FALSE. |
ЕСТЬ НУЛЬ | все типы | TRUE, если выражение A оценивается как NULL, иначе FALSE. |
A НЕ НУЛЬ | все типы | FALSE, если выражение A оценивается как NULL, иначе TRUE. |
Как Б | Струны | TRUE, если строковый шаблон A соответствует B, иначе FALSE. |
A RLIKE B | Струны | NULL, если A или B — NULL, TRUE, если любая подстрока A соответствует регулярному выражению Java B, иначе FALSE. |
РЕГЭКСП Б | Струны | Так же, как RLIKE. |
пример
Предположим, что таблица сотрудника состоит из полей с именами Id, Name, Salary, Designation и Dept, как показано ниже. Создайте запрос для получения сведений о сотруднике, чей идентификатор равен 1205.
+-----+--------------+--------+---------------------------+------+ | Id | Name | Salary | Designation | Dept | +-----+--------------+------------------------------------+------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | |1205 | Kranthi | 30000 | Op Admin | Admin| +-----+--------------+--------+---------------------------+------+
Следующий запрос выполняется для получения сведений о сотруднике с использованием приведенной выше таблицы:
hive> SELECT * FROM employee WHERE Id=1205;
При успешном выполнении запроса вы увидите следующий ответ:
+-----+-----------+-----------+----------------------------------+ | ID | Name | Salary | Designation | Dept | +-----+---------------+-------+----------------------------------+ |1205 | Kranthi | 30000 | Op Admin | Admin | +-----+-----------+-----------+----------------------------------+
Следующий запрос выполняется для получения сведений о сотруднике, чья зарплата больше или равна 40000 рупий.
hive> SELECT * FROM employee WHERE Salary>=40000;
При успешном выполнении запроса вы увидите следующий ответ:
+-----+------------+--------+----------------------------+------+ | ID | Name | Salary | Designation | Dept | +-----+------------+--------+----------------------------+------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali| 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | +-----+------------+--------+----------------------------+------+
Арифметические Операторы
Эти операторы поддерживают различные общие арифметические операции над операндами. Все они возвращают типы чисел. В следующей таблице описаны арифметические операторы, доступные в Hive:
операторы | Операнд | Описание |
---|---|---|
А + Б | все типы номеров | Дает результат добавления A и B. |
A — B | все типы номеров | Дает результат вычитания B из A. |
A * B | все типы номеров | Дает результат умножения A и B. |
A / B | все типы номеров | Дает результат деления B на A. |
% B | все типы номеров | Дает напоминание в результате деления А на Б. |
A & B | все типы номеров | Дает результат побитового И А и Б. |
A | В | все типы номеров | Дает результат побитового ИЛИ A и B. |
A ^ B | все типы номеров | Дает результат побитового XOR для A и B. |
~ A | все типы номеров | Дает результат побитового НЕ А |
пример
Следующий запрос добавляет два числа, 20 и 30.
hive> SELECT 20+30 ADD FROM temp;
При успешном выполнении запроса вы увидите следующий ответ:
+--------+ | ADD | +--------+ | 50 | +--------+
Логические Операторы
Операторы являются логическими выражениями. Все они возвращают либо ИСТИНА, либо ЛОЖЬ.
операторы | Операнды | Описание |
---|---|---|
А И Б | логический | TRUE, если A и B TRUE, иначе FALSE. |
A && B | логический | То же, что А и Б. |
А ИЛИ Б | логический | TRUE, если либо A, либо B, либо оба имеют значение TRUE, иначе FALSE. |
A || В | логический | То же, что А И Б. |
НЕ А | логический | ИСТИНА, если А ЛОЖЬ, иначе ЛОЖЬ. |
! | логический | То же, что НЕ А. |
пример
Следующий запрос используется для получения сведений о сотрудниках, чей отдел TP и оклад более 40000 рупий.
hive> SELECT * FROM employee WHERE Salary>40000 && Dept=TP;
При успешном выполнении запроса вы увидите следующий ответ:
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | +------+--------------+-------------+-------------------+--------+
Комплексные операторы
Эти операторы предоставляют выражение для доступа к элементам сложных типов.
оператор | Операнд | Описание |
---|---|---|
А [п] | A это массив, а n это int | Возвращает n-й элемент массива A. Первый элемент имеет индекс 0. |
M [ключ] | M — это карта <K, V>, а ключ имеет тип K | Возвращает значение, соответствующее ключу на карте. |
Sx | S это структура | Возвращает поле х S. |
Hiveql Выбрать … Где
Hive Query Language (HiveQL) — это язык запросов для Hive для обработки и анализа структурированных данных в Metastore. В этой главе объясняется, как использовать оператор SELECT с предложением WHERE.
Оператор SELECT используется для извлечения данных из таблицы. Предложение WHERE работает аналогично условию. Он фильтрует данные, используя условие и дает вам конечный результат. Встроенные операторы и функции генерируют выражение, которое удовлетворяет условию.
Синтаксис
Ниже приведен синтаксис запроса SELECT:
SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [HAVING having_condition] [CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]] [LIMIT number];
пример
Давайте возьмем пример для предложения SELECT… WHERE. Предположим, у нас есть таблица сотрудников, как указано ниже, с полями ИД, Имя, Зарплата, Обозначение и Отдел. Создайте запрос для получения сведений о сотруднике, который получает зарплату более 30000 рупий.
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | |1205 | Kranthi | 30000 | Op Admin | Admin | +------+--------------+-------------+-------------------+--------+
Следующий запрос извлекает сведения о сотруднике с использованием приведенного выше сценария:
hive> SELECT * FROM employee WHERE salary>30000;
При успешном выполнении запроса вы увидите следующий ответ:
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | +------+--------------+-------------+-------------------+--------+
Программа JDBC
Программа JDBC для применения условия where для данного примера выглядит следующим образом.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveQLWhere { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement Resultset res = stmt.executeQuery("SELECT * FROM employee WHERE salary>30000;"); System.out.println("Result:"); System.out.println(" ID \t Name \t Salary \t Designation \t Dept "); while (res.next()) { System.out.println(res.getInt(1)+" "+ res.getString(2)+" "+ res.getDouble(3)+" "+ res.getString(4)+" "+ res.getString(5)); } con.close(); } }
Сохраните программу в файле с именем HiveQLWhere.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveQLWhere.java $ java HiveQLWhere
Выход:
ID Name Salary Designation Dept 1201 Gopal 45000 Technical manager TP 1202 Manisha 45000 Proofreader PR 1203 Masthanvali 40000 Technical writer TP 1204 Krian 40000 Hr Admin HR
Hiveql Выбрать … Сортировать по
В этой главе объясняется, как использовать предложение ORDER BY в операторе SELECT. Предложение ORDER BY используется для извлечения подробностей на основе одного столбца и сортировки результирующего набора в порядке возрастания или убывания.
Синтаксис
Ниже приведен синтаксис предложения ORDER BY:
SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [HAVING having_condition] [ORDER BY col_list]] [LIMIT number];
пример
Давайте возьмем пример для предложения SELECT … ORDER BY. Предположим таблицу сотрудников, как указано ниже, с полями ИД, Имя, Зарплата, Назначение и Отдел. Создайте запрос для получения сведений о сотруднике по порядку, используя имя отдела.
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | |1205 | Kranthi | 30000 | Op Admin | Admin | +------+--------------+-------------+-------------------+--------+
Следующий запрос извлекает сведения о сотруднике с использованием приведенного выше сценария:
hive> SELECT Id, Name, Dept FROM employee ORDER BY DEPT;
При успешном выполнении запроса вы увидите следующий ответ:
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1205 | Kranthi | 30000 | Op Admin | Admin | |1204 | Krian | 40000 | Hr Admin | HR | |1202 | Manisha | 45000 | Proofreader | PR | |1201 | Gopal | 45000 | Technical manager | TP | |1203 | Masthanvali | 40000 | Technical writer | TP | +------+--------------+-------------+-------------------+--------+
Программа JDBC
Вот программа JDBC для применения предложения Order By для данного примера.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveQLOrderBy { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement Resultset res = stmt.executeQuery("SELECT * FROM employee ORDER BY DEPT;"); System.out.println(" ID \t Name \t Salary \t Designation \t Dept "); while (res.next()) { System.out.println(res.getInt(1)+" "+ res.getString(2)+" "+ res.getDouble(3)+" "+ res.getString(4)+" "+ res.getString(5)); } con.close(); } }
Сохраните программу в файле с именем HiveQLOrderBy.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveQLOrderBy.java $ java HiveQLOrderBy
Выход:
ID Name Salary Designation Dept 1205 Kranthi 30000 Op Admin Admin 1204 Krian 40000 Hr Admin HR 1202 Manisha 45000 Proofreader PR 1201 Gopal 45000 Technical manager TP 1203 Masthanvali 40000 Technical writer TP 1204 Krian 40000 Hr Admin HR
Hiveql Group By
В этой главе объясняются детали предложения GROUP BY в операторе SELECT. Предложение GROUP BY используется для группировки всех записей в наборе результатов с использованием определенного столбца коллекции. Он используется для запроса группы записей.
Синтаксис
Синтаксис предложения GROUP BY следующий:
SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [HAVING having_condition] [ORDER BY col_list]] [LIMIT number];
пример
Давайте рассмотрим пример предложения SELECT… GROUP BY. Предположим, что таблица сотрудников указана ниже с полями Id, Name, Salary, Designation и Dept. Создайте запрос, чтобы узнать количество сотрудников в каждом отделе.
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 45000 | Proofreader | PR | |1205 | Kranthi | 30000 | Op Admin | Admin | +------+--------------+-------------+-------------------+--------+
Следующий запрос извлекает сведения о сотруднике с использованием приведенного выше сценария.
hive> SELECT Dept,count(*) FROM employee GROUP BY DEPT;
При успешном выполнении запроса вы увидите следующий ответ:
+------+--------------+ | Dept | Count(*) | +------+--------------+ |Admin | 1 | |PR | 2 | |TP | 3 | +------+--------------+
Программа JDBC
Ниже приведена программа JDBC для применения предложения Group By для данного примера.
import java.sql.SQLException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; public class HiveQLGroupBy { private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver"; public static void main(String[] args) throws SQLException { // Register driver and create driver instance Class.forName(driverName); // get connection Connection con = DriverManager. getConnection("jdbc:hive://localhost:10000/userdb", "", ""); // create statement Statement stmt = con.createStatement(); // execute statement Resultset res = stmt.executeQuery(“SELECT Dept,count(*) ” +“FROM employee GROUP BY DEPT; ”); System.out.println(" Dept \t count(*)"); while (res.next()) { System.out.println(res.getString(1)+" "+ res.getInt(2)); } con.close(); } }
Сохраните программу в файле с именем HiveQLGroupBy.java. Используйте следующие команды для компиляции и выполнения этой программы.
$ javac HiveQLGroupBy.java $ java HiveQLGroupBy
Выход:
Dept Count(*) Admin 1 PR 2 TP 3
Hiveql присоединяется
JOINS — это предложение, которое используется для объединения определенных полей из двух таблиц с использованием значений, общих для каждой из них. Он используется для объединения записей из двух или более таблиц в базе данных.
Синтаксис
join_table: table_reference JOIN table_factor [join_condition] | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition | table_reference LEFT SEMI JOIN table_reference join_condition | table_reference CROSS JOIN table_reference [join_condition]
пример
Мы будем использовать следующие две таблицы в этой главе. Рассмотрим следующую таблицу с именем CUSTOMERS.
+----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+
Рассмотрим другую таблицу ORDERS следующим образом:
+-----+---------------------+-------------+--------+ |OID | DATE | CUSTOMER_ID | AMOUNT | +-----+---------------------+-------------+--------+ | 102 | 2009-10-08 00:00:00 | 3 | 3000 | | 100 | 2009-10-08 00:00:00 | 3 | 1500 | | 101 | 2009-11-20 00:00:00 | 2 | 1560 | | 103 | 2008-05-20 00:00:00 | 4 | 2060 | +-----+---------------------+-------------+--------+
Существуют различные типы соединений, представленные следующим образом:
- ПРИСОЕДИНИТЬСЯ
- ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ
- ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ
- ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ
ПРИСОЕДИНИТЬСЯ
Предложение JOIN используется для объединения и извлечения записей из нескольких таблиц. JOIN аналогичен OUTER JOIN в SQL. Условие JOIN должно быть создано с использованием первичных ключей и внешних ключей таблиц.
Следующий запрос выполняет JOIN для таблиц CUSTOMER и ORDER и извлекает записи:
hive> SELECT c.ID, c.NAME, c.AGE, o.AMOUNT > FROM CUSTOMERS c JOIN ORDERS o > ON (c.ID = o.CUSTOMER_ID);
При успешном выполнении запроса вы увидите следующий ответ:
+----+----------+-----+--------+ | ID | NAME | AGE | AMOUNT | +----+----------+-----+--------+ | 3 | kaushik | 23 | 3000 | | 3 | kaushik | 23 | 1500 | | 2 | Khilan | 25 | 1560 | | 4 | Chaitali | 25 | 2060 | +----+----------+-----+--------+
ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ
HiveQL LEFT OUTER JOIN возвращает все строки из левой таблицы, даже если в правой таблице нет совпадений. Это означает, что если предложение ON соответствует 0 (нулю) записей в правой таблице, JOIN по-прежнему возвращает строку в результате, но с NULL в каждом столбце из правой таблицы.
LEFT JOIN возвращает все значения из левой таблицы, а также совпадающие значения из правой таблицы или NULL в случае отсутствия соответствующего предиката JOIN.
Следующий запрос демонстрирует LEFT OUTER JOIN между таблицами CUSTOMER и ORDER:
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE > FROM CUSTOMERS c > LEFT OUTER JOIN ORDERS o > ON (c.ID = o.CUSTOMER_ID);
При успешном выполнении запроса вы увидите следующий ответ:
+----+----------+--------+---------------------+ | ID | NAME | AMOUNT | DATE | +----+----------+--------+---------------------+ | 1 | Ramesh | NULL | NULL | | 2 | Khilan | 1560 | 2009-11-20 00:00:00 | | 3 | kaushik | 3000 | 2009-10-08 00:00:00 | | 3 | kaushik | 1500 | 2009-10-08 00:00:00 | | 4 | Chaitali | 2060 | 2008-05-20 00:00:00 | | 5 | Hardik | NULL | NULL | | 6 | Komal | NULL | NULL | | 7 | Muffy | NULL | NULL | +----+----------+--------+---------------------+
ПРАВО НАРУЖНОЕ СОЕДИНЕНИЕ
HiveQL RIGHT OUTER JOIN возвращает все строки из правой таблицы, даже если в левой таблице нет совпадений. Если предложение ON соответствует 0 (нулю) записей в левой таблице, JOIN по-прежнему возвращает строку в результате, но с NULL в каждом столбце левой таблицы.
RIGHT JOIN возвращает все значения из правой таблицы, а также совпадающие значения из левой таблицы или NULL в случае отсутствия соответствующего предиката соединения.
Следующий запрос демонстрирует ПРАВИЛЬНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ между таблицами CUSTOMER и ORDER.
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE > FROM CUSTOMERS c > RIGHT OUTER JOIN ORDERS o > ON (c.ID = o.CUSTOMER_ID);
При успешном выполнении запроса вы увидите следующий ответ:
+------+----------+--------+---------------------+ | ID | NAME | AMOUNT | DATE | +------+----------+--------+---------------------+ | 3 | kaushik | 3000 | 2009-10-08 00:00:00 | | 3 | kaushik | 1500 | 2009-10-08 00:00:00 | | 2 | Khilan | 1560 | 2009-11-20 00:00:00 | | 4 | Chaitali | 2060 | 2008-05-20 00:00:00 | +------+----------+--------+---------------------+
ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ
HiveQL FULL OUTER JOIN объединяет записи как левой, так и правой внешних таблиц, которые удовлетворяют условию JOIN. Объединенная таблица содержит либо все записи из обеих таблиц, либо заполняет значения NULL для пропущенных совпадений с обеих сторон.
Следующий запрос демонстрирует FULL OUTER JOIN между таблицами CUSTOMER и ORDER:
hive> SELECT c.ID, c.NAME, o.AMOUNT, o.DATE > FROM CUSTOMERS c > FULL OUTER JOIN ORDERS o > ON (c.ID = o.CUSTOMER_ID);
При успешном выполнении запроса вы увидите следующий ответ:
+------+----------+--------+---------------------+ | ID | NAME | AMOUNT | DATE | +------+----------+--------+---------------------+ | 1 | Ramesh | NULL | NULL | | 2 | Khilan | 1560 | 2009-11-20 00:00:00 | | 3 | kaushik | 3000 | 2009-10-08 00:00:00 | | 3 | kaushik | 1500 | 2009-10-08 00:00:00 | | 4 | Chaitali | 2060 | 2008-05-20 00:00:00 | | 5 | Hardik | NULL | NULL | | 6 | Komal | NULL | NULL | | 7 | Muffy | NULL | NULL | | 3 | kaushik | 3000 | 2009-10-08 00:00:00 | | 3 | kaushik | 1500 | 2009-10-08 00:00:00 | | 2 | Khilan | 1560 | 2009-11-20 00:00:00 | | 4 | Chaitali | 2060 | 2008-05-20 00:00:00 | +------+----------+--------+---------------------+
Улей — встроенные функции
В этой главе описываются встроенные функции, доступные в Hive. Функции выглядят очень похоже на функции SQL, за исключением их использования.
Встроенные функции
Hive поддерживает следующие встроенные функции:
Тип возврата | Подпись | Описание |
---|---|---|
BIGINT | круглый (двойной) | Возвращает округленное значение BIGINT для double. |
BIGINT | этаж (двойной) | Возвращает максимальное значение BIGINT, которое равно или меньше двойного. |
BIGINT | потолок (двойной) | Возвращает минимальное значение BIGINT, которое равно или больше, чем double. |
двойной | rand (), rand (int seed) | Возвращает случайное число, которое меняется от строки к строке. |
строка | concat (строка A, строка B, …) | Возвращает строку, полученную в результате объединения B после A. |
строка | substr (строка A, начало int) | Возвращает подстроку A, начиная с начальной позиции и до конца строки A. |
строка | substr (строка A, начало int, длина int) | Возвращает подстроку A, начиная с начальной позиции заданной длины. |
строка | верхний (строка А) | Возвращает строку, полученную в результате преобразования всех символов A в верхний регистр. |
строка | Ucase (строка A) | То же, что и выше. |
строка | ниже (строка А) | Возвращает строку, полученную в результате преобразования всех символов B в нижний регистр. |
строка | lcase (строка A) | То же, что и выше. |
строка | отделка (строка A) | Возвращает строку, полученную в результате обрезки пробелов с обоих концов A. |
строка | Итрим (строка А) | Возвращает строку, полученную из пробелов в начале (слева) от A. |
строка | тртрим (строка А) | rtrim (строка A) Возвращает строку, полученную из пробелов в конце (справа) от A. |
строка | regexp_replace (строка A, строка B, строка C) | Он возвращает строку, полученную в результате замены всех подстрок в B, которые соответствуют синтаксису регулярного выражения Java, на C. |
ИНТ | размер (Map <KV>) | Возвращает количество элементов в типе карты. |
ИНТ | Размер (Array <Т>) | Возвращает количество элементов в типе массива. |
значение <тип> | приведение (<expr> как <тип>) | Он преобразует результаты выражения expr в <тип>, например, cast (‘1’ как BIGINT) преобразует строку ‘1’ в ее интегральное представление. NULL возвращается, если преобразование не удалось. |
строка | from_unixtime (int unixtime) | преобразовать количество секунд из эпохи Unix (1970-01-01 00:00:00 UTC) в строку, представляющую метку времени этого момента в текущем системном часовом поясе в формате «1970-01-01 00:00: 00″ |
строка | to_date (строка времени) | Возвращает часть даты строки метки времени: to_date («1970-01-01 00:00:00») = «1970-01-01» |
ИНТ | год (строковая дата) | Возвращает часть года даты или строку метки времени: year («1970-01-01 00:00:00») = 1970, year («1970-01-01») = 1970 |
ИНТ | месяц (строковая дата) | Возвращает часть месяца даты или строку метки времени: month («1970-11-01 00:00:00») = 11, month («1970-11-01») = 11 |
ИНТ | день (строковая дата) | Возвращает дневную часть даты или строку метки времени: день («1970-11-01 00:00:00») = 1, день («1970-11-01») = 1 |
строка | get_json_object (строка json_string, путь строки) | Он извлекает объект json из строки json на основе указанного пути json и возвращает строку json извлеченного объекта json. Возвращает NULL, если входная строка json неверна. |
пример
Следующие запросы демонстрируют некоторые встроенные функции:
функция round ()
hive> SELECT round(2.6) from temp;
При успешном выполнении запроса вы увидите следующий ответ:
3.0
функция пола ()
hive> SELECT floor(2.6) from temp;
При успешном выполнении запроса вы увидите следующий ответ:
2.0
функция ceil ()
hive> SELECT ceil(2.6) from temp;
При успешном выполнении запроса вы увидите следующий ответ:
3.0
Агрегатные функции
Hive поддерживает следующие встроенные агрегатные функции . Использование этих функций такое же, как и у агрегатных функций SQL.
Тип возврата | Подпись | Описание |
---|---|---|
BIGINT | count (*), count (expr), | count (*) — возвращает общее количество найденных строк. |
DOUBLE | sum (col), сумма (DISTINCT col) | Возвращает сумму элементов в группе или сумму отдельных значений столбца в группе. |
DOUBLE | avg (col), avg (DISTINCT col) | Возвращает среднее значение элементов в группе или среднее значение различных значений столбца в группе. |
DOUBLE | мин (COL) | Возвращает минимальное значение столбца в группе. |
DOUBLE | макс (COL) | Возвращает максимальное значение столбца в группе. |
Улей — Просмотр и индексы
В этой главе описывается, как создавать и управлять представлениями. Представления создаются на основе требований пользователя. Вы можете сохранить любые данные набора результатов в виде представления. Использование представления в Hive такое же, как использование представления в SQL. Это стандартная концепция РСУБД. Мы можем выполнить все операции DML в представлении.
Создание представления
Вы можете создать представление во время выполнения оператора SELECT. Синтаксис выглядит следующим образом:
CREATE VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ] [COMMENT table_comment] AS SELECT ...
пример
Давайте возьмем пример для просмотра. Предположим таблицу сотрудников, как указано ниже, с полями Id, Name, Salary, Designation и Dept. Создайте запрос для получения сведений о сотруднике, который получает зарплату более 30000 рупий. Мы сохраняем результат в представлении emp_30000.
+------+--------------+-------------+-------------------+--------+ | ID | Name | Salary | Designation | Dept | +------+--------------+-------------+-------------------+--------+ |1201 | Gopal | 45000 | Technical manager | TP | |1202 | Manisha | 45000 | Proofreader | PR | |1203 | Masthanvali | 40000 | Technical writer | TP | |1204 | Krian | 40000 | Hr Admin | HR | |1205 | Kranthi | 30000 | Op Admin | Admin | +------+--------------+-------------+-------------------+--------+
Следующий запрос извлекает сведения о сотруднике с использованием приведенного выше сценария:
hive> CREATE VIEW emp_30000 AS > SELECT * FROM employee > WHERE salary>30000;
Отбрасывание просмотра
Используйте следующий синтаксис для удаления представления:
DROP VIEW view_name
Следующий запрос отбрасывает представление с именем emp_30000:
hive> DROP VIEW emp_30000;
Создание индекса
Индекс — это не что иное, как указатель на определенный столбец таблицы. Создание индекса означает создание указателя на определенный столбец таблицы. Его синтаксис выглядит следующим образом:
CREATE INDEX index_name ON TABLE base_table_name (col_name, ...) AS 'index.handler.class.name' [WITH DEFERRED REBUILD] [IDXPROPERTIES (property_name=property_value, ...)] [IN TABLE index_table_name] [PARTITIONED BY (col_name, ...)] [ [ ROW FORMAT ...] STORED AS ... | STORED BY ... ] [LOCATION hdfs_path] [TBLPROPERTIES (...)]
пример
Давайте возьмем пример для индекса. Используйте ту же таблицу сотрудников, которую мы использовали ранее с полями Id, Name, Salary, Designation и Dept. Создайте индекс index_salary для столбца salary таблицы employee.
Следующий запрос создает индекс:
hive> CREATE INDEX inedx_salary ON TABLE employee(salary) > AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';
Это указатель на столбец зарплаты. Если столбец изменен, изменения сохраняются с использованием значения индекса.
Отбрасывание индекса
Следующий синтаксис используется для удаления индекса:
DROP INDEX <index_name> ON <table_name>
Следующий запрос удаляет индекс с именем index_salary: