Exemplos Hive Inserir comando
comandar um Hive DML para explorar é o INSERIR comando. Você tem basicamente três INSERIR variants- dois deles são mostrados na listagem a seguir. Para demonstrar este novo comando DML, você vai criar uma nova tabela que irá realizar um subconjunto dos dados no FlightInfo2008 mesa.
(UMA) CREATE TABLE SE NÃO EXISTE myFlightInfo (Ano SMALLINT, DontQueryMonth TINYINT, DAYOFMONTH TINYINT, DayOfWeek TINYINT, DepTime SMALLINT, ArrTime SMALLINT, UniqueCarrier STRING, FlightNum STRING, AirTime SMALLINT, ArrDelay SMALLINT, DepDelay SMALLINT, STRING Origin, Dest STRING, Cancelado SMALLINT, CancellationCode STRING) COMENTÁRIO 'Flight InfoTable'PARTITIONED BY (Mês TINYINT) ROW FORMATO DELIMITEDFIELDS terminado por', 'LINES TERMINATED BY' n '(B) Armazenado como RCFILETBLPROPERTIES ( 'criador' = 'Bruce Brown', 'created_at' = 'Mon 02 de setembro 14:24:19 EDT 2013 ") -(C) INSERÇÃO OVERWRITE TABELA myflightinfoPARTITION (mês = 1) selecionar o ano, mês, DAYOFMONTH, DayOfWeek, DepTime, ArrTime, UniqueCarrier, FlightNum, AirTime, ArrDelay, DepDelay, origem, Dest, Cancelado, CancellationCodeFROM FlightInfo2008 ONDE Mês = 1-(D) DE FlightInfo2008INSERT INTO TABLE myflightinfoPARTITION (Mês = 2) selecionar o ano, mês, DAYOFMONTH, DayOfWeek, DepTime, ArrTime, UniqueCarrier, FlightNum, AirTime, ArrDelay, DepDelay, origem, Dest, Cancelado, CancellationCode ONDE Mês = 2... (Meses 3 a 11 ignorada por brevidade)INSERT INTO myflightinfoPARTITION TABLE (mês = 12) SELECT ano, mês, DAYOFMONTH, DayOfWeek, DepTime, ArrTime, UniqueCarrier, FlightNum, AirTime, ArrDelay, DepDelay, origem, Dest, Cancelado, CancellationCode ONDE mês = 12(E) colmeia (flightdata)> mostrar as partições myflightinfo-OKmonth = 1 mês = 10 meses = 11 meses = 12 ... mês = 9(F) $ Ls /home/biadmin/Hive/warehouse/flightdata.db/myflightinfomonth=1 mês = 11 meses = 2 meses = 4 meses = 6 meses = 8 meses = 10 meses = 12 meses = 3 meses = 5 meses = 7 mês = 9(L) $ HIVE_HOME / bin / colmeia --service rcfilecat / home / BiAdmin / colmeia / armazém / flightdata.db / myflightinfo / mês = 12 / 000000_0 ... 200812 13 6 655 856 DL 163885 0 -5 PBI ATL 0.200.812 13 6 12511446DL 163.989 9 11 IAD ATL 0.200.812 13 6 11101413DL 1.641.104 -5 7 SAT ATL 0
No Passo (A), de criar esta nova tabela e especificar que o formato de arquivo será remar colunar (Passo (B)) em vez de texto. Este formato é mais compacto do que o texto e, muitas vezes tem um desempenho melhor, dependendo de seus padrões de acesso. (Se você estiver acessando um pequeno subconjunto de colunas em vez de linhas inteiras, experimente o RCFILE formato.)
O SerDe padrão para RCFILE formato é o ColumnarSerDe. Você pode verificar esse fato, executando o DESCREVER myFlightInfo ESTENDIDO comando HiveQL a partir da interface de linha de comando.
Depois de criar a tabela, você usa o INSERÇÃO OVERWRITE comando [ver passo (C)] para inserir os dados através de um SELECIONAR declaração do FlightInfo2008 mesa. Note-se que você está particionar seus dados usando o PARTITION com base na palavra-chave Mês campo.
Depois de terminar, você vai ter 12 partições de tabela, ou diretórios reais, sob a armazém diretório no sistema de arquivos em sua máquina virtual, correspondente aos 12 meses do ano. O particionamento pode melhorar drasticamente o desempenho de consulta se você deseja consultar dados no myFlightInfo mesa para apenas um determinado mês.
Você pode ver os resultados da PARTITION abordagem com o mostrar as partições comando nos passos (E) e (F). Aviso no Passo (D) que você está usando uma variante do INSERIR comando para inserir dados em várias partições de uma só vez. Apenas dois meses e 12 são mostrados, mas por questões de brevidade a 11 meses 3 teria a mesma sintaxe.
Partições são bastante úteis para o programador Hive. No entanto, não é incomum encontrar um conjunto de dados, onde o particionamento pode tornar-se complicado, especialmente se várias partições são especificados [PARTITION BY (Country Strong, PersonName STRING), por exemplo]. Doze partições são uma coisa - 7 bilhões de partições seria outra bem diferente!
A solução para a expansão de partição é bucketing. Bucketing em Hive funciona, permitindo que você especifique um número razoável de baldes, e, em seguida, o sistema tenta distribuir uniformemente os dados para o número de segmentos especificados. [Isso poderia ser algo como PARTITION BY (...) agrupados por (BucketingColumn) INTO x BUCKETS.]
Além disso, esse recurso permite amostragem de mesa - uma técnica que permite que os utilizadores colmeia para escrever consultas sobre uma amostra dos dados em vez de toda a mesa. HiveQL amostragem tabela pode ser muito útil para grandes análises de dados.
Você também pode usar este DE INSERÇÃO table1 INTO tabela2 SELECT ... formato para inserir em várias mesas ao mesmo tempo. Você usa INSERIR ao invés de OVERWRITE aqui para mostrar a opção de inserir em vez de substituir. Hive permite que apenas acrescenta, não inserções, em tabelas, de modo que o INSERIR palavra-chave simplesmente instrui Hive para acrescentar os dados à tabela.
Finalmente, nota na Etapa (G) que você tem que usar um serviço de comando especial Hive (rcfilecat) Para ver esta tabela no seu armazém, porque o RCFILE formato é um formato binário, ao contrário do precedente ARQUIVO DE TEXTO exemplos de formato.
o INSERIR comando DML tem três variantes. A terceira variante é a dinâmica variante Inserções partição. No perfil, você particionar o myFlightInfo tabela em 12 segmentos, 1 por mês. Se você tivesse centenas de partições, essa tarefa teria se tornado bastante difícil, e ele teria de script necessário para começar o trabalho feito.
Em vez disso, Hive suporta uma técnica para criar dinamicamente partições com o INSERÇÃO OVERWRITE declaração. Então, se você achar que precisa para alavancar particionamento de tabela com um grande, e possivelmente variável, número de partições, confira as inserções partição dinâmica apresentam no Manual Hive DML Language.