Hive - szybki przewodnik

Termin „duże zbiory danych” jest używany w odniesieniu do zbiorów dużych zbiorów danych, które obejmują ogromną ilość, dużą prędkość i różnorodność danych, których liczba rośnie z dnia na dzień. Przy użyciu tradycyjnych systemów zarządzania danymi trudno jest przetwarzać Big Data. Dlatego Apache Software Foundation wprowadziła platformę o nazwie Hadoop, aby rozwiązać problemy związane z zarządzaniem i przetwarzaniem Big Data.

Hadoop

Hadoop to platforma typu open source do przechowywania i przetwarzania Big Data w środowisku rozproszonym. Zawiera dwa moduły, jeden to MapReduce, a drugi to Hadoop Distributed File System (HDFS).

  • MapReduce: Jest to równoległy model programowania służący do przetwarzania dużych ilości ustrukturyzowanych, częściowo ustrukturyzowanych i nieustrukturyzowanych danych na dużych klastrach towarowego sprzętu.

  • HDFS:Hadoop Distributed File System jest częścią struktury Hadoop, używanej do przechowywania i przetwarzania zestawów danych. Zapewnia odporny na błędy system plików do uruchamiania na standardowym sprzęcie.

Ekosystem Hadoop zawiera różne podprojekty (narzędzia), takie jak Sqoop, Pig i Hive, które są używane do pomocy modułom Hadoop.

  • Sqoop: Służy do importowania i eksportowania danych tam iz powrotem między HDFS i RDBMS.

  • Pig: Jest to proceduralna platforma językowa służąca do tworzenia skryptu dla operacji MapReduce.

  • Hive: Jest to platforma służąca do tworzenia skryptów typu SQL do wykonywania operacji MapReduce.

Note: Istnieją różne sposoby wykonywania operacji MapReduce:

  • Tradycyjne podejście z wykorzystaniem programu Java MapReduce do danych ustrukturyzowanych, częściowo ustrukturyzowanych i nieustrukturyzowanych.
  • Podejście skryptowe dla MapReduce do przetwarzania ustrukturyzowanych i częściowo ustrukturyzowanych danych przy użyciu Pig.
  • Hive Query Language (HiveQL lub HQL) dla MapReduce do przetwarzania danych strukturalnych przy użyciu Hive.

Co to jest Hive

Hive to narzędzie infrastruktury hurtowni danych do przetwarzania ustrukturyzowanych danych na platformie Hadoop. Znajduje się na szczycie Hadoop, aby podsumować Big Data i ułatwia wykonywanie zapytań i analizowanie.

Początkowo Hive został opracowany przez Facebooka, później przejęła go Apache Software Foundation i dalej rozwijała jako open source pod nazwą Apache Hive. Jest używany przez różne firmy. Na przykład Amazon używa go w Amazon Elastic MapReduce.

Hive nie jest

  • Relacyjna baza danych
  • Projekt dla przetwarzania transakcji online (OLTP)
  • Język do zapytań w czasie rzeczywistym i aktualizacji na poziomie wiersza

Funkcje ula

  • Przechowuje schemat w bazie danych i przetwarza dane w HDFS.
  • Jest przeznaczony dla OLAP.
  • Udostępnia język typu SQL do wykonywania zapytań o nazwie HiveQL lub HQL.
  • Jest znany, szybki, skalowalny i rozszerzalny.

Architektura ula

Poniższy diagram składników przedstawia architekturę Hive:

Ten schemat komponentów zawiera różne jednostki. W poniższej tabeli opisano każdą jednostkę:

Nazwa jednostki Operacja
Interfejs użytkownika Hive to oprogramowanie infrastruktury hurtowni danych, które może tworzyć interakcje między użytkownikiem a systemem plików HDFS. Interfejsy użytkownika obsługiwane przez Hive to Hive Web UI, Hive Command Line i Hive HD Insight (na serwerze Windows).
Meta Store Hive wybiera odpowiednie serwery baz danych do przechowywania schematu lub metadanych tabel, baz danych, kolumn w tabeli, ich typów danych i mapowania HDFS.
Silnik procesów HiveQL HiveQL jest podobny do SQL do wykonywania zapytań dotyczących informacji o schemacie w Metastore. Jest to jeden z zamienników tradycyjnego podejścia do programu MapReduce. Zamiast pisać program MapReduce w Javie, możemy napisać zapytanie o zadanie MapReduce i przetworzyć je.
Silnik wykonawczy Częścią będącą połączeniem mechanizmu HiveQL Process Engine i MapReduce jest Hive Execution Engine. Silnik wykonawczy przetwarza zapytanie i generuje wyniki takie same, jak wyniki MapReduce. Wykorzystuje smak MapReduce.
HDFS lub HBASE Rozproszony system plików Hadoop lub HBASE to techniki przechowywania danych służące do przechowywania danych w systemie plików.

Działanie ula

Poniższy diagram przedstawia przepływ pracy między Hive i Hadoop.

W poniższej tabeli zdefiniowano, jak Hive współdziała z platformą Hadoop:

Krok nr Operacja
1 Execute Query

Interfejs Hive, taki jak wiersz poleceń lub interfejs użytkownika sieci Web, wysyła zapytanie do sterownika (dowolnego sterownika bazy danych, takiego jak JDBC, ODBC itp.) W celu wykonania.

2 Get Plan

Sterownik korzysta z pomocy kompilatora zapytań, który analizuje zapytanie w celu sprawdzenia składni i planu zapytania lub wymagań zapytania.

3 Get Metadata

Kompilator wysyła żądanie metadanych do Metastore (dowolnej bazy danych).

4 Send Metadata

Metastore wysyła metadane jako odpowiedź do kompilatora.

5 Send Plan

Kompilator sprawdza wymagania i ponownie przesyła plan do sterownika. Do tej pory analizowanie i kompilowanie zapytania zostało zakończone.

6 Execute Plan

Kierowca przesyła plan wykonania do silnika wykonawczego.

7 Execute Job

Wewnętrznie proces wykonania zadania jest zadaniem MapReduce. Silnik wykonawczy wysyła zadanie do JobTracker, który znajduje się w węźle Nazwa i przypisuje to zadanie do TaskTracker, który znajduje się w węźle danych. Tutaj zapytanie wykonuje zadanie MapReduce.

7.1 Metadata Ops

W międzyczasie silnik wykonawczy może wykonywać operacje na metadanych za pomocą Metastore.

8 Fetch Result

Silnik wykonawczy otrzymuje wyniki z węzłów danych.

9 Send Results

Silnik wykonawczy wysyła te wynikowe wartości do sterownika.

10 Send Results

Sterownik wysyła wyniki do interfejsów Hive.

Wszystkie podprojekty Hadoop, takie jak Hive, Pig i HBase, obsługują system operacyjny Linux. Dlatego musisz zainstalować dowolny system operacyjny o smaku Linux. Podczas instalacji programu Hive wykonywane są następujące proste kroki:

Krok 1: Weryfikacja instalacji JAVA

Java musi być zainstalowana w systemie przed zainstalowaniem Hive. Zweryfikujmy instalację Java za pomocą następującego polecenia:

$ java –version

Jeśli Java jest już zainstalowana w twoim systemie, zobaczysz następującą odpowiedź:

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)

Jeśli java nie jest zainstalowana w twoim systemie, wykonaj poniższe kroki, aby zainstalować java.

Instalowanie Java

I krok:

Pobierz java (JDK <najnowsza wersja> - X64.tar.gz), odwiedzając poniższe łącze http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html.

Następnie jdk-7u71-linux-x64.tar.gz zostanie pobrany do twojego systemu.

Etap II:

Pobrany plik java znajdziesz zwykle w folderze Pobrane. Sprawdź go i wyodrębnij plik jdk-7u71-linux-x64.gz, używając następujących poleceń.

$ 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

Krok III:

Aby udostępnić Javę wszystkim użytkownikom, musisz przenieść ją do lokalizacji „/ usr / local /”. Otwórz root i wpisz następujące polecenia.

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

Krok IV:

Aby ustawić zmienne PATH i JAVA_HOME, dodaj następujące polecenia do pliku ~ / .bashrc.

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin

Teraz sprawdź instalację, używając polecenia java -version z terminala, jak wyjaśniono powyżej.

Krok 2: weryfikacja instalacji Hadoop

Hadoop musi być zainstalowany w systemie przed zainstalowaniem Hive. Zweryfikujmy instalację Hadoop za pomocą następującego polecenia:

$ hadoop version

Jeśli Hadoop jest już zainstalowany w twoim systemie, otrzymasz następującą odpowiedź:

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

Jeśli Hadoop nie jest zainstalowany w Twoim systemie, wykonaj następujące czynności:

Pobieranie Hadoop

Pobierz i wyodrębnij Hadoop 2.4.1 z Apache Software Foundation, używając następujących poleceń.

$ 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

Instalowanie Hadoop w trybie pseudo rozproszonym

Poniższe kroki służą do instalowania Hadoop 2.4.1 w trybie pseudo rozproszonym.

Krok I: Konfigurowanie Hadoop

Możesz ustawić zmienne środowiskowe Hadoop, dołączając następujące polecenia do ~/.bashrc plik.

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

Teraz zastosuj wszystkie zmiany w aktualnie działającym systemie.

$ source ~/.bashrc

Krok II: Konfiguracja Hadoop

Wszystkie pliki konfiguracyjne Hadoop można znaleźć w lokalizacji „$ HADOOP_HOME / etc / hadoop”. Musisz wprowadzić odpowiednie zmiany w tych plikach konfiguracyjnych zgodnie z infrastrukturą Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Aby tworzyć programy Hadoop przy użyciu języka Java, musisz zresetować zmienne środowiskowe Java w programie hadoop-env.sh plik, zastępując JAVA_HOME wartość z lokalizacją Java w systemie.

export JAVA_HOME=/usr/local/jdk1.7.0_71

Poniżej znajduje się lista plików, które należy edytować, aby skonfigurować Hadoop.

core-site.xml

Plik core-site.xml plik zawiera informacje, takie jak numer portu używany dla wystąpienia Hadoop, pamięć przydzielona dla systemu plików, limit pamięci do przechowywania danych i rozmiar buforów do odczytu / zapisu.

Otwórz plik core-site.xml i dodaj następujące właściwości między tagami <configuration> i </configuration>.

<configuration>

   <property> 
      <name>fs.default.name</name> 
      <value>hdfs://localhost:9000</value> 
   </property>
   
</configuration>

hdfs-site.xml

Plik hdfs-site.xmlplik zawiera informacje, takie jak wartość danych replikacji, ścieżka do kodu nazwy i ścieżka do węzła danych lokalnych systemów plików. Oznacza to miejsce, w którym chcesz przechowywać Hadoop infra.

Załóżmy następujące dane.

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

Otwórz ten plik i dodaj następujące właściwości między tagami <configuration>, </configuration> w tym pliku.

<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>

Note: W powyższym pliku wszystkie wartości właściwości są zdefiniowane przez użytkownika i można wprowadzać zmiany zgodnie z infrastrukturą Hadoop.

yarn-site.xml

Ten plik służy do konfigurowania przędzy w Hadoop. Otwórz plik yarn-site.xml i dodaj następujące właściwości między tagami <configuration>, </configuration> w tym pliku.

<configuration>

   <property> 
      <name>yarn.nodemanager.aux-services</name> 
      <value>mapreduce_shuffle</value> 
   </property>
   
</configuration>

mapred-site.xml

Ten plik jest używany do określenia, której platformy MapReduce używamy. Domyślnie Hadoop zawiera szablon yarn-site.xml. Przede wszystkim musisz skopiować plik z mapred-site, xml.template do pliku mapred-site.xml za pomocą następującego polecenia.

$ cp mapred-site.xml.template mapred-site.xml

otwarty mapred-site.xml file i dodaj następujące właściwości między tagami <configuration>, </configuration> w tym pliku.

<configuration>

   <property> 
      <name>mapreduce.framework.name</name> 
      <value>yarn</value> 
   </property>

</configuration>

Weryfikacja instalacji Hadoop

Poniższe kroki służą do weryfikacji instalacji Hadoop.

Krok I: Konfiguracja nazwy węzła

Skonfiguruj namenode za pomocą polecenia „hdfs namenode -format” w następujący sposób.

$ cd ~ $ hdfs namenode -format

Oczekiwany wynik jest następujący.

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
 ************************************************************/

Krok II: weryfikacja plików dfs na platformie Hadoop

Następujące polecenie służy do uruchamiania dfs. Wykonanie tego polecenia spowoduje uruchomienie systemu plików Hadoop.

$ start-dfs.sh

Oczekiwany wynik jest następujący:

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]

Krok III: weryfikacja skryptu przędzy

Następujące polecenie służy do uruchamiania skryptu przędzy. Wykonanie tego polecenia spowoduje uruchomienie demonów przędzy.

$ start-yarn.sh

Oczekiwany wynik jest następujący:

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

Krok IV: Dostęp do Hadoop w przeglądarce

Domyślny numer portu dostępu do Hadoop to 50070. Użyj następującego adresu URL, aby pobrać usługi Hadoop w przeglądarce.

http://localhost:50070/

Krok V: Sprawdź wszystkie aplikacje dla klastra

Domyślny numer portu dostępu do wszystkich aplikacji klastra to 8088. Aby odwiedzić tę usługę, użyj następującego adresu URL.

http://localhost:8088/

Krok 3: Pobieranie Hive

W tym samouczku używamy hive-0.14.0. Możesz go pobrać, odwiedzając poniższy linkhttp://apache.petsads.us/hive/hive-0.14.0/.Załóżmy, że zostanie pobrany do katalogu / Downloads. Tutaj pobieramy archiwum Hive o nazwie „apache-hive-0.14.0-bin.tar.gz” na potrzeby tego samouczka. Poniższe polecenie służy do weryfikacji pobierania:

$ cd Downloads $ ls

Po pomyślnym pobraniu zobaczysz następującą odpowiedź:

apache-hive-0.14.0-bin.tar.gz

Krok 4: Instalowanie gałęzi

Poniższe kroki są wymagane do zainstalowania Hive w systemie. Załóżmy, że archiwum Hive jest pobierane do katalogu / Downloads.

Wyodrębnianie i weryfikowanie archiwum Hive

Następujące polecenie służy do weryfikacji pobierania i wyodrębniania archiwum gałęzi:

$ tar zxvf apache-hive-0.14.0-bin.tar.gz $ ls

Po pomyślnym pobraniu zobaczysz następującą odpowiedź:

apache-hive-0.14.0-bin apache-hive-0.14.0-bin.tar.gz

Kopiowanie plików do katalogu / usr / local / hive

Musimy skopiować pliki od superużytkownika „su -”. Poniższe polecenia służą do kopiowania plików z wyodrębnionego katalogu do katalogu / usr / local / hive ”.

$ su -
passwd:

# cd /home/user/Download
# mv apache-hive-0.14.0-bin /usr/local/hive
# exit

Konfigurowanie środowiska dla Hive

Możesz skonfigurować środowisko Hive, dołączając następujące wiersze do ~/.bashrc plik:

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/*:.

Następujące polecenie służy do wykonania pliku ~ / .bashrc.

$ source ~/.bashrc

Krok 5: Konfigurowanie gałęzi

Aby skonfigurować Hive z Hadoop, musisz edytować plik hive-env.sh plik, który jest umieszczony w $HIVE_HOME/confinformator. Następujące polecenia przekierowują do Hiveconfig folder i skopiuj plik szablonu:

$ cd $HIVE_HOME/conf $ cp hive-env.sh.template hive-env.sh

Edytuj plik hive-env.sh plik, dołączając następujący wiersz:

export HADOOP_HOME=/usr/local/hadoop

Instalacja ula została zakończona pomyślnie. Teraz do skonfigurowania Metastore potrzebny jest zewnętrzny serwer bazy danych. Korzystamy z bazy danych Apache Derby.

Krok 6: Pobieranie i instalowanie Apache Derby

Wykonaj poniższe czynności, aby pobrać i zainstalować Apache Derby:

Pobieranie Apache Derby

Następujące polecenie służy do pobierania Apache Derby. Pobieranie zajmuje trochę czasu.

$ cd ~ $ wget http://archive.apache.org/dist/db/derby/db-derby-10.4.2.0/db-derby-10.4.2.0-bin.tar.gz

Poniższe polecenie służy do weryfikacji pobierania:

$ ls

Po pomyślnym pobraniu zobaczysz następującą odpowiedź:

db-derby-10.4.2.0-bin.tar.gz

Wyodrębnianie i weryfikacja archiwum Derby

Następujące polecenia służą do wyodrębniania i weryfikacji archiwum Derby:

$ tar zxvf db-derby-10.4.2.0-bin.tar.gz
$ ls

Po pomyślnym pobraniu zobaczysz następującą odpowiedź:

db-derby-10.4.2.0-bin db-derby-10.4.2.0-bin.tar.gz

Kopiowanie plików do katalogu / usr / local / derby

Musimy skopiować od superużytkownika „su -”. Poniższe polecenia służą do kopiowania plików z wyodrębnionego katalogu do katalogu / usr / local / derby:

$ su -
passwd:
# cd /home/user
# mv db-derby-10.4.2.0-bin /usr/local/derby
# exit

Konfigurowanie środowiska dla Derby

Środowisko Derby można skonfigurować, dołączając następujące wiersze do ~/.bashrc plik:

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

Następujące polecenie służy do wykonania ~/.bashrc plik:

$ source ~/.bashrc

Utwórz katalog do przechowywania Metastore

Utwórz katalog o nazwie data w katalogu $ DERBY_HOME do przechowywania danych Metastore.

$ mkdir $DERBY_HOME/data

Instalacja Derby i konfiguracja środowiska zostały zakończone.

Krok 7: Konfigurowanie Metastore of Hive

Skonfigurowanie Metastore oznacza określenie w Hive, gdzie jest przechowywana baza danych. Możesz to zrobić, edytując plik hive-site.xml, który znajduje się w katalogu $ HIVE_HOME / conf. Przede wszystkim skopiuj plik szablonu za pomocą następującego polecenia:

$ cd $HIVE_HOME/conf
$ cp hive-default.xml.template hive-site.xml

Edytować hive-site.xml i dołącz następujące wiersze między tagami <configuration> i </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>

Utwórz plik o nazwie jpox.properties i dodaj do niego następujące wiersze:

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

Krok 8: weryfikacja instalacji gałęzi

Przed uruchomieniem Hive musisz utworzyć plik /tmpfolder i oddzielny folder Hive w HDFS. Tutaj używamy/user/hive/warehouseteczka. Musisz ustawić uprawnienia do zapisu dla tych nowo utworzonych folderów, jak pokazano poniżej:

chmod g+w

Teraz ustaw je w HDFS przed zweryfikowaniem Hive. Użyj następujących poleceń:

$ $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

Następujące polecenia służą do weryfikacji instalacji programu Hive:

$ cd $HIVE_HOME $ bin/hive

Po pomyślnej instalacji Hive zobaczysz następującą odpowiedź:

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>

Następujące przykładowe polecenie jest wykonywane w celu wyświetlenia wszystkich tabel:

hive> show tables; 
OK 
Time taken: 2.798 seconds 
hive>

W tym rozdziale omówiono różne typy danych w gałęzi Hive, które są zaangażowane w tworzenie tabeli. Wszystkie typy danych w gałęzi Hive są podzielone na cztery typy, podane w następujący sposób:

  • Typy kolumn
  • Literals
  • Wartości zerowe
  • Złożone typy

Typy kolumn

Typ kolumny jest używany jako typy danych kolumn w gałęzi. Są one następujące:

Typy całkowe

Dane typu całkowitego można określić za pomocą integralnych typów danych, INT. Gdy zakres danych przekracza zakres INT, musisz użyć BIGINT, a jeśli zakres danych jest mniejszy niż INT, używasz SMALLINT. TINYINT jest mniejszy niż SMALLINT.

Poniższa tabela przedstawia różne typy danych INT:

Rodzaj Przyrostek Przykład
TINYINT Y 10Y
SMALLINT S 10S
INT - 10
BIGINT L 10l

Typy strun

Typy danych typu łańcuchowego można określić za pomocą apostrofów ('') lub podwójnych cudzysłowów (""). Zawiera dwa typy danych: VARCHAR i CHAR. Hive podąża za znakami ucieczki typu C.

Poniższa tabela przedstawia różne typy danych CHAR:

Typ danych Długość
VARCHAR 1 do 65355
ZWĘGLAĆ 255

Znak czasu

Obsługuje tradycyjny znacznik czasu UNIX z opcjonalną precyzją nanosekund. Obsługuje format java.sql.Timestamp „RRRR-MM-DD GG: MM: SS.fffffffff” i format „rrrr-mm-dd gg: mm: ss.ffffffffff”.

Daktyle

Wartości DAT są opisane w formacie rok / miesiąc / dzień w postaci {{RRRR-MM-DD}}.

Ułamki dziesiętne

Typ DECIMAL w gałęzi Hive jest taki sam jak format Big Decimal języka Java. Służy do reprezentowania niezmiennej dowolnej precyzji. Składnia i przykład są następujące:

DECIMAL(precision, scale)
decimal(10,0)

Typy związków

Unia to zbiór heterogenicznych typów danych. Możesz utworzyć instancję za pomocącreate union. Składnia i przykład są następujące:

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}

Literały

Następujące literały są używane w gałęzi:

Typy zmiennoprzecinkowe

Typy zmiennoprzecinkowe to nic innego jak liczby z kropkami dziesiętnymi. Generalnie ten typ danych składa się z typu DOUBLE.

Typ dziesiętny

-308 308,

Wartość zerowa

Brakujące wartości są reprezentowane przez specjalną wartość NULL.

Złożone typy

Złożone typy danych Hive są następujące:

Tablice

Tablice w Hive są używane w taki sam sposób, w jaki są używane w Javie.

Składnia: ARRAY <typ_danych>

Mapy

Mapy w Hive są podobne do map Java.

Składnia: MAP <typ_prymitywny, typ_danych>

Struktury

Struktury w gałęzi Hive są podobne do używania złożonych danych z komentarzem.

Składnia: STRUCT <nazwa_kolumny: typ_danych [KOMENTARZ_KOMENT], ...>

Hive to technologia baz danych, która umożliwia definiowanie baz danych i tabel w celu analizy danych strukturalnych. Tematem analizy danych strukturalnych jest przechowywanie danych w sposób tabelaryczny i przekazywanie zapytań w celu ich analizy. W tym rozdziale wyjaśniono, jak utworzyć bazę danych Hive. Hive zawiera domyślną bazę danych o nazwiedefault.

Utwórz instrukcję bazy danych

Utwórz bazę danych to instrukcja używana do tworzenia bazy danych w programie Hive. Baza danych w Hive to pliknamespacelub zbiór tabel. Pliksyntax dla tego stwierdzenia jest następująca:

CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>

W tym przypadku IF NOT EXISTS to opcjonalna klauzula, która powiadamia użytkownika, że ​​baza danych o tej samej nazwie już istnieje. Możemy użyć SCHEMA zamiast DATABASE w tym poleceniu. Następujące zapytanie jest wykonywane w celu utworzenia bazy danych o nazwieuserdb:

hive> CREATE DATABASE [IF NOT EXISTS] userdb;

or

hive> CREATE SCHEMA userdb;

Następujące zapytanie służy do weryfikacji listy baz danych:

hive> SHOW DATABASES;
default
userdb

Program JDBC

Poniżej przedstawiono program JDBC do tworzenia bazy danych.

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();
   }
}

Zapisz program w pliku o nazwie HiveCreateDb.java. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

$ javac HiveCreateDb.java $ java HiveCreateDb

Wynik:

Database userdb created successfully.

W tym rozdziale opisano sposób usuwania bazy danych w programie Hive. Korzystanie ze SCHEMATÓW i BAZ DANYCH jest takie samo.

Instrukcja usuwania bazy danych

Drop Database to instrukcja, która usuwa wszystkie tabele i usuwa bazę danych. Jego składnia jest następująca:

DROP DATABASE StatementDROP (DATABASE|SCHEMA) [IF EXISTS] database_name 
[RESTRICT|CASCADE];

Poniższe zapytania służą do usuwania bazy danych. Załóżmy, że nazwa bazy danych touserdb.

hive> DROP DATABASE IF EXISTS userdb;

Następujące zapytanie usuwa bazę danych przy użyciu CASCADE. Oznacza to usunięcie odpowiednich tabel przed usunięciem bazy danych.

hive> DROP DATABASE IF EXISTS userdb CASCADE;

Następujące zapytanie usuwa bazę danych przy użyciu SCHEMA.

hive> DROP SCHEMA userdb;

Ta klauzula została dodana w Hive 0.6.

Program JDBC

Program JDBC do usuwania bazy danych jest podany poniżej.

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();
   }
}

Zapisz program w pliku o nazwie HiveDropDb.java. Poniżej podano polecenia kompilacji i wykonania tego programu.

$ javac HiveDropDb.java $ java HiveDropDb

Wynik:

Drop userdb database successful.

W tym rozdziale wyjaśniono, jak utworzyć tabelę i wstawiać do niej dane. Konwencja tworzenia tabeli w HIVE jest bardzo podobna do tworzenia tabeli przy użyciu języka SQL.

Utwórz instrukcję tabeli

Utwórz tabelę to instrukcja używana do tworzenia tabeli w gałęzi. Składnia i przykład są następujące:

Składnia

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]

Przykład

Załóżmy, że musisz utworzyć tabelę o nazwie employee za pomocą CREATE TABLEkomunikat. W poniższej tabeli wymieniono pola i ich typy danych w tabeli pracowników:

Sr.No Nazwa pola Typ danych
1 Eid int
2 Nazwa Strunowy
3 Wynagrodzenie Pływak
4 Przeznaczenie strunowy

Następujące dane to komentarz, pola sformatowane w wierszach, takie jak terminator pola, terminator wierszy i typ zapisanego pliku.

COMMENT ‘Employee details’
FIELDS TERMINATED BY ‘\t’
LINES TERMINATED BY ‘\n’
STORED IN TEXT FILE

Następujące zapytanie tworzy tabelę o nazwie employee korzystając z powyższych danych.

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;

Jeśli dodasz opcję JEŚLI NIE ISTNIEJE, gałąź zignoruje instrukcję w przypadku, gdy tabela już istnieje.

Po pomyślnym utworzeniu tabeli zobaczysz następującą odpowiedź:

OK
Time taken: 5.905 seconds
hive>

Program JDBC

Podano przykład programu JDBC do tworzenia tabeli.

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();
   }
}

Zapisz program w pliku o nazwie HiveCreateDb.java. Poniższe polecenia służą do kompilowania i wykonywania tego programu.

$ javac HiveCreateDb.java $ java HiveCreateDb

Wynik

Table employee created.

Instrukcja ładowania danych

Generalnie po utworzeniu tabeli w SQL możemy wstawiać dane za pomocą instrukcji Insert. Ale w Hive możemy wstawiać dane za pomocą instrukcji LOAD DATA.

Podczas wstawiania danych do Hive lepiej jest używać LOAD DATA do przechowywania rekordów zbiorczych. Istnieją dwa sposoby ładowania danych: jeden z lokalnego systemu plików, a drugi z systemu plików Hadoop.

Syntex

Składnia danych ładowania jest następująca:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2 ...)]
  • LOCAL to identyfikator określający ścieżkę lokalną. Jest to opcjonalne.
  • OVERWRITE jest opcjonalne, aby nadpisać dane w tabeli.
  • PARTYCJA jest opcjonalna.

Przykład

Do tabeli wstawimy następujące dane. Jest to plik tekstowy o nazwiesample.txt w /home/user informator.

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

Następujące zapytanie ładuje podany tekst do tabeli.

hive> LOAD DATA LOCAL INPATH '/home/user/sample.txt'
> OVERWRITE INTO TABLE employee;

Po pomyślnym pobraniu zobaczysz następującą odpowiedź:

OK
Time taken: 15.905 seconds
hive>

Program JDBC

Poniżej podano program JDBC do załadowania danych do tabeli.

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();
   }
}

Zapisz program w pliku o nazwie HiveLoadData.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveLoadData.java $ java HiveLoadData

Wynik:

Load Data into employee successful

W tym rozdziale wyjaśniono, jak zmienić atrybuty tabeli, takie jak zmiana nazwy tabeli, zmiana nazw kolumn, dodawanie kolumn oraz usuwanie lub zastępowanie kolumn.

Alter Table Statement

Służy do zmiany tabeli w Hive.

Składnia

Instrukcja przyjmuje dowolną z poniższych składni w oparciu o atrybuty, które chcemy zmodyfikować w tabeli.

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 ...])

Rename To… Statement

Następujące zapytanie zmienia nazwę tabeli z employee do emp.

hive> ALTER TABLE employee RENAME TO emp;

Program JDBC

Program JDBC do zmiany nazwy tabeli jest następujący.

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();
   }
}

Zapisz program w pliku o nazwie HiveAlterRenameTo.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveAlterRenameTo.java $ java HiveAlterRenameTo

Wynik:

Table renamed successfully.

Zmiana oświadczenia

Poniższa tabela zawiera pola employee tabela i pokazuje pola do zmiany (pogrubione).

Nazwa pola Konwertuj z typu danych Zmień nazwę pola Konwertuj na typ danych
eid int eid int
name Strunowy ename Strunowy
wynagrodzenie Float wynagrodzenie Double
Przeznaczenie Strunowy Przeznaczenie Strunowy

Poniższe zapytania zmieniają nazwę kolumny i typ danych kolumny przy użyciu powyższych danych:

hive> ALTER TABLE employee CHANGE name ename String;
hive> ALTER TABLE employee CHANGE salary salary Double;

Program JDBC

Poniżej podano program JDBC do zmiany kolumny.

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();
   }
}

Zapisz program w pliku o nazwie HiveAlterChangeColumn.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveAlterChangeColumn.java $ java HiveAlterChangeColumn

Wynik:

Change column successful.

Add Columns Statement

Następujące zapytanie dodaje kolumnę o nazwie dział do tabeli pracowników.

hive> ALTER TABLE employee ADD COLUMNS ( 
   > dept STRING COMMENT 'Department name');

Program JDBC

Program JDBC do dodawania kolumny do tabeli jest podany poniżej.

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();
   }
}

Zapisz program w pliku o nazwie HiveAlterAddColumn.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveAlterAddColumn.java $ java HiveAlterAddColumn

Wynik:

Add column successful.

Zastąp instrukcję

Następujące zapytanie usuwa wszystkie kolumny z employee table i zastępuje go emp i name kolumny:

hive> ALTER TABLE employee REPLACE COLUMNS ( 
   > eid INT empid Int, 
   > ename STRING name String);

Program JDBC

Poniżej podano program JDBC do wymiany eid kolumna z empid i ename kolumna z name.

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();
   }
}

Zapisz program w pliku o nazwie HiveAlterReplaceColumn.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveAlterReplaceColumn.java $ java HiveAlterReplaceColumn

Wynik:

Replace column successful.

W tym rozdziale opisano, jak upuścić tabelę w gałęzi. Usunięcie tabeli z Hive Metastore powoduje usunięcie danych tabeli / kolumny i ich metadanych. Może to być zwykła tabela (przechowywana w Metastore) lub tabela zewnętrzna (przechowywana w lokalnym systemie plików); Hive traktuje oba w ten sam sposób, niezależnie od ich typów.

Instrukcja Drop Table

Składnia jest następująca:

DROP TABLE [IF EXISTS] table_name;

Następujące zapytanie usuwa tabelę o nazwie employee:

hive> DROP TABLE IF EXISTS employee;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

OK
Time taken: 5.3 seconds
hive>

Program JDBC

Poniższy program JDBC usuwa tabelę pracowników.

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();
   }
}

Zapisz program w pliku o nazwie HiveDropTable.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveDropTable.java $ java HiveDropTable

Wynik:

Drop table successful

Poniższe zapytanie służy do weryfikacji listy tabel:

hive> SHOW TABLES;
emp
ok
Time taken: 2.1 seconds
hive>

Hive organizuje tabele w partycje. Jest to sposób na podzielenie tabeli na powiązane części na podstawie wartości podzielonych kolumn, takich jak data, miasto i dział. Korzystając z partycji, można łatwo przeszukać część danych.

Tabele lub partycje są podzielone na buckets,zapewnienie dodatkowej struktury danych, które mogą być używane do wydajniejszego wykonywania zapytań. Bucketing działa w oparciu o wartość funkcji skrótu jakiejś kolumny tabeli.

Na przykład tabela o nazwie Tab1zawiera dane pracownika, takie jak identyfikator, imię i nazwisko, dział i rok (tj. rok przystąpienia). Załóżmy, że musisz pobrać szczegóły wszystkich pracowników, którzy dołączyli w 2012 roku. Zapytanie przeszukuje całą tabelę w celu znalezienia wymaganych informacji. Jeśli jednak podzielisz dane pracowników według roku i zapiszesz je w oddzielnym pliku, skróci to czas przetwarzania zapytania. Poniższy przykład pokazuje, jak podzielić plik i jego dane na partycje:

Poniższy plik zawiera tabelę Employeedata.

/ tab1 / Employeedata / file1

id, imię, dział, yoj

1, gopal, TP, 2012

2, kiran, HR, 2012

3, kaleel, SC, 2013

4, Prasanth, SC, 2013

 

Powyższe dane są podzielone na dwa pliki przy użyciu roku.

/ tab1 / Employeedata / 2012 / file2

1, gopal, TP, 2012

2, kiran, HR, 2012

 

/ tab1 / Employeedata / 2013 / file3

3, kaleel, SC, 2013

4, Prasanth, SC, 2013

Dodawanie partycji

Możemy dodać partycje do tabeli, zmieniając tabelę. Załóżmy, że mamy tabelę o nazwieemployee z polami takimi jak identyfikator, imię i nazwisko, wynagrodzenie, stanowisko, dział i rok.

Składnia:

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, ...)

Poniższe zapytanie służy do dodawania partycji do tabeli pracowników.

hive> ALTER TABLE employee
> ADD PARTITION (year=’2012’)
> location '/2012/part2012';

Zmiana nazwy partycji

Składnia tego polecenia jest następująca.

ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

Następujące zapytanie służy do zmiany nazwy partycji:

hive> ALTER TABLE employee PARTITION (year=’1203’)
   > RENAME TO PARTITION (Yoj=’1203’);

Upuszczanie partycji

Następująca składnia służy do usuwania partycji:

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec, PARTITION partition_spec,...;

Następujące zapytanie służy do usuwania partycji:

hive> ALTER TABLE employee DROP [IF EXISTS]
   > PARTITION (year=’1203’);

W tym rozdziale opisano wbudowane operatory Hive. W Hive istnieją cztery typy operatorów:

  • Operatorzy relacyjni
  • Operatory arytmetyczne
  • Operatory logiczne
  • Złożone operatory

Operatorzy relacyjni

Te operatory służą do porównywania dwóch operandów. W poniższej tabeli opisano operatory relacji dostępne w gałęzi:

Operator Operand Opis
A = B. wszystkie typy pierwotne PRAWDA, jeśli wyrażenie A jest równoważne wyrażeniu B, w przeciwnym razie FAŁSZ.
A! = B wszystkie typy pierwotne PRAWDA, jeśli wyrażenie A nie jest równoważne wyrażeniu B, w przeciwnym razie FAŁSZ.
A <B wszystkie typy pierwotne PRAWDA, jeśli wyrażenie A jest mniejsze niż wyrażenie B, w przeciwnym razie FAŁSZ.
A <= B wszystkie typy pierwotne PRAWDA, jeśli wyrażenie A jest mniejsze lub równe wyrażeniu B, w przeciwnym razie FAŁSZ.
A> B wszystkie typy pierwotne PRAWDA, jeśli wyrażenie A jest większe niż wyrażenie B, w przeciwnym razie FAŁSZ.
A> = B wszystkie typy pierwotne PRAWDA, jeśli wyrażenie A jest większe lub równe wyrażeniu B, w przeciwnym razie FAŁSZ.
A IS NULL wszystkie typy PRAWDA, jeśli wyrażenie A ma wartość NULL, w przeciwnym razie FAŁSZ.
NIE JEST NULL wszystkie typy FALSE, jeśli wyrażenie A ma wartość NULL, w przeciwnym razie PRAWDA.
PODOBNE B Smyczki PRAWDA, jeśli wzorzec łańcucha A pasuje do B, w przeciwnym razie FAŁSZ.
A RLIKE B Smyczki NULL, jeśli A lub B ma wartość NULL, TRUE, jeśli dowolny podciąg A pasuje do wyrażenia regularnego Java B, w przeciwnym razie FALSE.
A REGEXP B. Smyczki To samo co RLIKE.

Przykład

Załóżmy, że employeeTabela składa się z pól o nazwach Id, Imię i Nazwisko, Wynagrodzenie, Oznaczenie i Dział, jak pokazano poniżej. Wygeneruj zapytanie, aby pobrać dane pracownika, których identyfikator to 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|
+-----+--------------+--------+---------------------------+------+

Następujące zapytanie jest wykonywane w celu pobrania danych pracownika przy użyciu powyższej tabeli:

hive> SELECT * FROM employee WHERE Id=1205;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+-----+-----------+-----------+----------------------------------+
| ID  | Name      | Salary    | Designation              | Dept  |
+-----+---------------+-------+----------------------------------+
|1205 | Kranthi   | 30000     | Op Admin                 | Admin |
+-----+-----------+-----------+----------------------------------+

Następujące zapytanie jest wykonywane w celu pobrania szczegółów pracownika, którego wynagrodzenie jest większe lub równe 40000 Rs.

hive> SELECT * FROM employee WHERE Salary>=40000;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+-----+------------+--------+----------------------------+------+
| 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   |
+-----+------------+--------+----------------------------+------+

Operatory arytmetyczne

Te operatory obsługują różne typowe operacje arytmetyczne na operandach. Wszystkie zwracają typy liczbowe. W poniższej tabeli opisano operatory arytmetyczne dostępne w gałęzi:

Operatorzy Operand Opis
A + B wszystkie typy liczb Daje wynik dodania A i B.
A - B wszystkie typy liczb Daje wynik odjęcia B od A.
A * B wszystkie typy liczb Daje wynik pomnożenia A i B.
A / B wszystkie typy liczb Daje wynik podzielenia B od A.
A% B wszystkie typy liczb Daje przypomnienie wynikające z podzielenia A przez B.
A i B. wszystkie typy liczb Daje wynik bitowego AND z A i B.
A | b wszystkie typy liczb Daje wynik bitowego OR A i B.
A ^ B wszystkie typy liczb Daje wynik bitowej XOR A i B.
~ A wszystkie typy liczb Daje wynik bitowego NIE A.

Przykład

Poniższe zapytanie dodaje dwie liczby, 20 i 30.

hive> SELECT 20+30 ADD FROM temp;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+--------+
|   ADD  |
+--------+
|   50   |
+--------+

Operatory logiczne

Operatory są wyrażeniami logicznymi. Wszystkie zwracają PRAWDA lub FAŁSZ.

Operatorzy Operandy Opis
A AND B boolean PRAWDA, jeśli zarówno A, jak i B są PRAWDA, w przeciwnym razie FAŁSZ.
A && B. boolean To samo co A AND B.
A LUB B boolean PRAWDA, jeśli A lub B lub oba są PRAWDA, w przeciwnym razie FAŁSZ.
A || b boolean To samo co A LUB B.
ANI boolean PRAWDA, jeśli A jest FAŁSZEM, w przeciwnym razie FAŁSZ.
!ZA boolean To samo, co NOT A.

Przykład

Poniższe zapytanie służy do pobierania danych pracowników, których działem jest TP, a wynagrodzenie przekracza 40000 Rs.

hive> SELECT * FROM employee WHERE Salary>40000 && Dept=TP;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+------+--------------+-------------+-------------------+--------+
| ID   | Name         | Salary      | Designation       | Dept   |
+------+--------------+-------------+-------------------+--------+
|1201  | Gopal        | 45000       | Technical manager | TP     |
+------+--------------+-------------+-------------------+--------+

Złożone operatory

Te operatory zapewniają wyrażenie umożliwiające dostęp do elementów typów złożonych.

Operator Operand Opis
Na] A to Array, a n to int Zwraca n-ty element tablicy A. Pierwszy element ma indeks 0.
M [klucz] M to Mapa <K, V>, a klucz ma typ K. Zwraca wartość odpowiadającą kluczowi na mapie.
Sx S jest strukturą Zwraca pole x S.

Hive Query Language (HiveQL) to język zapytań służący do przetwarzania i analizowania danych strukturalnych w Metastore. W tym rozdziale wyjaśniono, jak używać instrukcji SELECT z klauzulą ​​WHERE.

Instrukcja SELECT służy do pobierania danych z tabeli. Klauzula WHERE działa podobnie do warunku. Filtruje dane przy użyciu warunku i daje skończony wynik. Wbudowane operatory i funkcje generują wyrażenie, które spełnia warunek.

Składnia

Poniżej podano składnię zapytania 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];

Przykład

Weźmy przykład dla klauzuli SELECT… WHERE. Załóżmy, że mamy tabelę pracowników podaną poniżej, z polami o nazwach Id, Imię i Nazwisko, Wynagrodzenie, Oznaczenie i Dział. Wygeneruj zapytanie, aby pobrać dane pracownika, którzy zarabiają ponad 30000 Rs.

+------+--------------+-------------+-------------------+--------+
| 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  | 
+------+--------------+-------------+-------------------+--------+

Następujące zapytanie pobiera dane pracownika przy użyciu powyższego scenariusza:

hive> SELECT * FROM employee WHERE salary>30000;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+------+--------------+-------------+-------------------+--------+
| 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     |
+------+--------------+-------------+-------------------+--------+

Program JDBC

Program JDBC do zastosowania klauzula where dla podanego przykładu jest następujący.

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();
   }
}

Zapisz program w pliku o nazwie HiveQLWhere.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveQLWhere.java $ java HiveQLWhere

Wynik:

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

W tym rozdziale wyjaśniono, jak używać klauzuli ORDER BY w instrukcji SELECT. Klauzula ORDER BY służy do pobierania szczegółów na podstawie jednej kolumny i sortowania zestawu wyników w kolejności rosnącej lub malejącej.

Składnia

Poniżej podano składnię klauzuli 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];

Przykład

Weźmy przykład dla klauzuli SELECT ... ORDER BY. Załóż tabelę pracowników, jak podano poniżej, z polami o nazwach Identyfikator, Imię i nazwisko, Wynagrodzenie, Oznaczenie i Dział. Wygeneruj zapytanie, aby pobrać dane pracownika w kolejności, używając nazwy działu.

+------+--------------+-------------+-------------------+--------+
| 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  |
+------+--------------+-------------+-------------------+--------+

Następujące zapytanie pobiera dane pracownika przy użyciu powyższego scenariusza:

hive> SELECT Id, Name, Dept FROM employee ORDER BY DEPT;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+------+--------------+-------------+-------------------+--------+
| 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     |
+------+--------------+-------------+-------------------+--------+

Program JDBC

Oto program JDBC do zastosowania klauzuli Order By dla podanego przykładu.

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();
   }
}

Zapisz program w pliku o nazwie HiveQLOrderBy.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveQLOrderBy.java $ java HiveQLOrderBy

Wynik:

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

Ten rozdział wyjaśnia szczegóły klauzuli GROUP BY w instrukcji SELECT. Klauzula GROUP BY służy do grupowania wszystkich rekordów w zestawie wyników przy użyciu określonej kolumny kolekcji. Służy do wysyłania zapytań do grupy rekordów.

Składnia

Składnia klauzuli GROUP BY jest następująca:

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];

Przykład

Weźmy przykład klauzuli SELECT… GROUP BY. Przyjmij tabelę pracowników, jak podano poniżej, z polami Id, Nazwisko, Wynagrodzenie, Oznaczenie i Dział. Wygeneruj zapytanie, aby pobrać liczbę pracowników w każdym dziale.

+------+--------------+-------------+-------------------+--------+ 
| 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  |
+------+--------------+-------------+-------------------+--------+

Następujące zapytanie pobiera dane pracownika przy użyciu powyższego scenariusza.

hive> SELECT Dept,count(*) FROM employee GROUP BY DEPT;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+------+--------------+ 
| Dept | Count(*)     | 
+------+--------------+ 
|Admin |    1         | 
|PR    |    2         | 
|TP    |    3         | 
+------+--------------+

Program JDBC

Poniżej podano program JDBC do zastosowania klauzuli Group By dla podanego przykładu.

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();
   }
}

Zapisz program w pliku o nazwie HiveQLGroupBy.java. Użyj następujących poleceń, aby skompilować i uruchomić ten program.

$ javac HiveQLGroupBy.java $ java HiveQLGroupBy

Wynik:

Dept     Count(*)
 Admin       1
 PR          2
 TP          3

JOINS to klauzula używana do łączenia określonych pól z dwóch tabel przy użyciu wartości wspólnych dla każdej z nich. Służy do łączenia rekordów z dwóch lub więcej tabel w bazie danych.

Składnia

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]

Przykład

W tym rozdziale wykorzystamy następujące dwie tabele. Rozważmy poniższą tabelę o nazwie 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 | 
+----+----------+-----+-----------+----------+

Rozważ inną tabelę ZAMÓWIENIA w następujący sposób:

+-----+---------------------+-------------+--------+ 
|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   | 
+-----+---------------------+-------------+--------+

Istnieją różne typy sprzężeń podane w następujący sposób:

  • JOIN
  • LEWE POŁĄCZENIE ZEWNĘTRZNE
  • PRAWE ZEWNĘTRZNE POŁĄCZENIE
  • PEŁNE POŁĄCZENIE ZEWNĘTRZNE

PRZYSTĄP

Klauzula JOIN służy do łączenia i pobierania rekordów z wielu tabel. JOIN jest tym samym, co OUTER JOIN w SQL. Warunek JOIN należy wywołać za pomocą kluczy podstawowych i kluczy obcych tabel.

Następujące zapytanie wykonuje JOIN w tabelach CUSTOMER i ORDER oraz pobiera rekordy:

hive> SELECT c.ID, c.NAME, c.AGE, o.AMOUNT 
   > FROM CUSTOMERS c JOIN ORDERS o 
   > ON (c.ID = o.CUSTOMER_ID);

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+----+----------+-----+--------+ 
| ID | NAME     | AGE | AMOUNT | 
+----+----------+-----+--------+ 
| 3  | kaushik  | 23  | 3000   | 
| 3  | kaushik  | 23  | 1500   | 
| 2  | Khilan   | 25  | 1560   | 
| 4  | Chaitali | 25  | 2060   | 
+----+----------+-----+--------+

LEWE POŁĄCZENIE ZEWNĘTRZNE

HiveQL LEFT OUTER JOIN zwraca wszystkie wiersze z lewej tabeli, nawet jeśli w prawej tabeli nie ma żadnych dopasowań. Oznacza to, że jeśli klauzula ON pasuje do 0 (zero) rekordów w prawej tabeli, JOIN nadal zwraca wiersz w wyniku, ale z wartością NULL w każdej kolumnie z prawej tabeli.

LEFT JOIN zwraca wszystkie wartości z lewej tabeli oraz dopasowane wartości z prawej tabeli lub NULL w przypadku braku zgodnego predykatu JOIN.

Poniższe zapytanie demonstruje LEFT OUTER JOIN między tabelami CUSTOMER i 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);

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+----+----------+--------+---------------------+ 
| 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                | 
+----+----------+--------+---------------------+

PRAWE ZEWNĘTRZNE POŁĄCZENIE

HiveQL RIGHT OUTER JOIN zwraca wszystkie wiersze z prawej tabeli, nawet jeśli nie ma żadnych dopasowań w lewej tabeli. Jeśli klauzula ON pasuje do 0 (zero) rekordów w lewej tabeli, JOIN nadal zwraca wiersz w wyniku, ale z wartością NULL w każdej kolumnie z lewej tabeli.

RIGHT JOIN zwraca wszystkie wartości z prawej tabeli plus dopasowane wartości z lewej tabeli lub NULL w przypadku braku zgodnego predykatu łączenia.

Poniższe zapytanie demonstruje RIGHT OUTER JOIN między tabelami CUSTOMER i 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);

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+------+----------+--------+---------------------+ 
| 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 | 
+------+----------+--------+---------------------+

PEŁNE POŁĄCZENIE ZEWNĘTRZNE

HiveQL FULL OUTER JOIN łączy rekordy lewej i prawej tabeli zewnętrznej, które spełniają warunek JOIN. Połączona tabela zawiera albo wszystkie rekordy z obu tabel, albo wypełnia wartości NULL dla brakujących dopasowań po którejkolwiek stronie.

Poniższe zapytanie demonstruje FULL OUTER JOIN między tabelami CUSTOMER i 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);

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

+------+----------+--------+---------------------+ 
| 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 | 
+------+----------+--------+---------------------+

W tym rozdziale opisano wbudowane funkcje dostępne w Hive. Funkcje wyglądają podobnie do funkcji SQL, z wyjątkiem ich użycia.

Wbudowane funkcje

Hive obsługuje następujące funkcje wbudowane:

Typ zwrotu Podpis Opis
BIGINT okrągłe (podwójne a) Zwraca zaokrągloną BIGINT wartość double.
BIGINT piętro (podwójne a) Zwraca maksymalną wartość BIGINT, która jest równa lub mniejsza od double.
BIGINT Ceil (podwójne a) Zwraca minimalną wartość BIGINT, która jest równa lub większa od double.
podwójnie rand (), rand (int seed) Zwraca losową liczbę, która zmienia się z wiersza na wiersz.
strunowy concat (ciąg A, ciąg B, ...) Zwraca ciąg wynikający z konkatenacji B po A.
strunowy substr (ciąg A, int start) Zwraca podłańcuch A, zaczynając od pozycji początkowej do końca ciągu A.
strunowy substr (ciąg A, int start, int length) Zwraca podciąg A, zaczynając od pozycji początkowej o podanej długości.
strunowy górna (ciąg A) Zwraca ciąg będący wynikiem konwersji wszystkich znaków A na wielkie litery.
strunowy ucase (ciąg A) Tak samo jak powyżej.
strunowy dolny (ciąg A) Zwraca ciąg będący wynikiem konwersji wszystkich znaków z B na małe litery.
strunowy lcase (ciąg A) Tak samo jak powyżej.
strunowy wykończenie (ciąg A) Zwraca ciąg wynikający z obcięcia spacji z obu końców A.
strunowy ltrim (ciąg A) Zwraca ciąg wynikający z przycinania spacji z początku (lewej strony) A.
strunowy rtrim (ciąg A) rtrim (string A) Zwraca ciąg wynikający z obcięcia spacji z końca (prawej strony) A.
strunowy regexp_replace (ciąg A, ciąg B, ciąg C) Zwraca ciąg wynikający z zastąpienia wszystkich podciągów w B, które pasują do składni wyrażenia regularnego Java przez C.
int rozmiar (Mapa <KV>) Zwraca liczbę elementów w typie mapy.
int rozmiar (Array <T>) Zwraca liczbę elementów w typie tablicy.
wartość <typ> cast (<expr> as <type>) Konwertuje wyniki wyrażenia wyraż na <typ>, np. Cast („1” jako BIGINT) konwertuje ciąg „1” na reprezentację całkową. Jeśli konwersja nie powiedzie się, zwracana jest wartość NULL.
strunowy from_unixtime (int unixtime) przekonwertować liczbę sekund z epoki systemu Unix (1970-01-01 00:00:00 UTC) na ciąg znaków reprezentujący znacznik czasu tego momentu w bieżącej strefie czasowej systemu w formacie „1970-01-01 00:00: 00 "
strunowy to_date (sygnatura czasowa ciągu) Zwraca część daty w ciągu znacznika czasu: to_date („1970-01-01 00:00:00”) = „1970-01-01”
int rok (data ciągu) Zwraca część roku z daty lub ciągu znacznika czasu: rok („1970-01-01 00:00:00”) = 1970, rok („1970-01-01”) = 1970
int miesiąc (string data) Zwraca część miesiąca z daty lub ciągu znacznika czasu: miesiąc („1970-11-01 00:00:00”) = 11, miesiąc („1970-11-01”) = 11
int dzień (string data) Zwraca część dnia z daty lub ciągu znacznika czasu: day („1970-11-01 00:00:00”) = 1, day („1970-11-01”) = 1
strunowy get_json_object (string json_string, string path) Wyodrębnia obiekt json z ciągu json na podstawie określonej ścieżki json i zwraca ciąg json wyodrębnionego obiektu json. Zwraca NULL, jeśli wejściowy ciąg json jest nieprawidłowy.

Przykład

Poniższe zapytania pokazują niektóre funkcje wbudowane:

funkcja round ()

hive> SELECT round(2.6) from temp;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

3.0

floor (), funkcja

hive> SELECT floor(2.6) from temp;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

2.0

ceil (), funkcja

hive> SELECT ceil(2.6) from temp;

Po pomyślnym wykonaniu zapytania zobaczysz następującą odpowiedź:

3.0

Funkcje agregujące

Hive obsługuje następujące wbudowane aggregate functions. Użycie tych funkcji jest takie samo, jak funkcji agregujących SQL.

Typ zwrotu Podpis Opis
BIGINT count (*), count (wyr), count (*) - zwraca całkowitą liczbę pobranych wierszy.
PODWÓJNIE suma (kolumna), suma (DISTINCT kolumna) Zwraca sumę elementów w grupie lub sumę odrębnych wartości kolumny w grupie.
PODWÓJNIE śr. (kol.), śr. (kol. DISTINCT) Zwraca średnią elementów w grupie lub średnią odrębnych wartości kolumny w grupie.
PODWÓJNIE min (kol) Zwraca minimalną wartość kolumny w grupie.
PODWÓJNIE max (kol) Zwraca maksymalną wartość kolumny w grupie.

W tym rozdziale opisano sposób tworzenia widoków i zarządzania nimi. Widoki są generowane na podstawie wymagań użytkownika. Dowolne dane zestawu wyników można zapisać jako widok. Użycie widoku w gałęzi Hive jest takie samo jak w przypadku widoku w języku SQL. Jest to standardowa koncepcja RDBMS. Możemy wykonywać wszystkie operacje DML na widoku.

Tworzenie widoku

Możesz utworzyć widok w czasie wykonywania instrukcji SELECT. Składnia jest następująca:

CREATE VIEW [IF NOT EXISTS] view_name [(column_name [COMMENT column_comment], ...) ]
[COMMENT table_comment]
AS SELECT ...

Przykład

Weźmy przykład. Przyjmij tabelę pracowników, jak podano poniżej, z polami Id, Nazwisko, Wynagrodzenie, Stanowisko i Dział. Wygeneruj zapytanie, aby pobrać dane pracownika, którzy zarabiają więcej niż 30000 Rs. Wynik przechowujemy w widoku o nazwieemp_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  |
+------+--------------+-------------+-------------------+--------+

Następujące zapytanie pobiera dane pracownika przy użyciu powyższego scenariusza:

hive> CREATE VIEW emp_30000 AS
   > SELECT * FROM employee
   > WHERE salary>30000;

Upuszczanie widoku

Użyj następującej składni, aby usunąć widok:

DROP VIEW view_name

Następujące zapytanie usuwa widok o nazwie emp_30000:

hive> DROP VIEW emp_30000;

Tworzenie indeksu

Indeks to nic innego jak wskaźnik na określoną kolumnę tabeli. Utworzenie indeksu oznacza utworzenie wskaźnika na konkretną kolumnę tabeli. Jego składnia jest następująca:

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 (...)]

Przykład

Weźmy przykład index. Użyj tej samej tabeli pracowników, której używaliśmy wcześniej z polami Id, Imię i Nazwisko, Wynagrodzenie, Oznaczenie i Dział. Utwórz indeks o nazwie index_salary w kolumnie wynagrodzenia tabeli pracownika.

Następujące zapytanie tworzy indeks:

hive> CREATE INDEX inedx_salary ON TABLE employee(salary)
   > AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler';

Jest to wskaźnik do kolumny wynagrodzenia. Jeśli kolumna zostanie zmodyfikowana, zmiany są zapisywane przy użyciu wartości indeksu.

Upuszczanie indeksu

Następująca składnia służy do usuwania indeksu:

DROP INDEX <index_name> ON <table_name>

Następujące zapytanie usuwa indeks o nazwie index_salary:

hive> DROP INDEX index_salary ON employee;