Hive ETL: carregando JSON, XML, exemplos de dados de texto

โšก Resumo Inteligente

O Hive ETL transforma arquivos de texto, XML e JSON em tabelas consultรกveis, carregando-os no Hive e executando-os.tracA manipulaรงรฃo de valores com xpath() e get_json_object() proporciona aos analistas uma interface SQL sobre dados Hadoop semiestruturados.

  • ๐Ÿงฑ Cargas estruturadas: Um arquivo de texto delimitado se transforma em uma tabela com ROW FORMAT DELIMITED mais FIELDS TERMINATED BY, e entรฃo LOAD DATA LOCAL INPATH.
  • ๐Ÿท๏ธ XML extracรงรฃo: Uma รบnica coluna STRING armazena cada documento XML, e a funรงรฃo xpath() extrai os valores das tags nomeadas.
  • ๐Ÿ”‘ JSON extracรงรฃo: A funรงรฃo get_json_object() lรช uma expressรฃo JSONPath por chamada, portanto, cada campo precisa de sua prรณpria chamada.
  • ๐Ÿชœ Cargas รบteis aninhadas: O JSON complexo รฉ carregado exatamente da mesma maneira, e a hierarquia รฉ percorrida com expressรตes JSONPath pontilhadas.
  • ๐Ÿ“ Regras do percurso: A palavra-chave LOCAL lรช do sistema de arquivos Linux, enquanto omiti-la resolve o caminho no HDFS.
  • ๐ŸŽฏ Onde se encaixa: O Hive รฉ mais adequado para armazenamento em lote e ETL semiestruturado do que para pesquisas de registros de baixa latรชncia.

Hive ETL: Carregando dados JSON, XML e de texto

Hive como ferramenta de ETL e armazenamento de dados sobre o Hadoop O ecossistema fornece funcionalidades como modelagem de dados, manipulaรงรฃo de dados, processamento de dados e consulta de dados. Exemplo de dadostracA indexaรงรฃo no Hive significa a criaรงรฃo de tabelas no Hive e o carregamento de dados estruturados e semiestruturados, bem como a consulta de dados com base nos requisitos.

Para processamento em lote, vamos escrever scripts personalizados usando scripts de mapeamento e reduรงรฃo personalizados em uma linguagem de script. Isso fornece um SQL como ambiente e suporte para consultas fรกceis.

Trabalhando com dados estruturados usando Hive

Dados estruturados significam que os dados estรฃo no formato adequado de linhas e colunas. Isso รฉ mais parecido com... RDBMS dados com linhas e colunas adequadas.

Aqui, vamos carregar dados estruturados presentes em arquivos de texto no Hive.

Passo 1) Nesta etapa estamos criando a tabela โ€œemployees_guruโ€ com nomes de colunas como Id, Nome, Idade, Endereรงo, Salรกrio e Departamento dos funcionรกrios com tipos de dados.

Criando a tabela employees_guru e carregando o arquivo Employees.txt no Hive.

A partir da captura de tela acima, podemos observar o seguinte:

  1. Criaรงรฃo da tabela โ€œemployees_guruโ€
  2. Carregando dados do arquivo Employees.txt na tabela โ€œemployees_guruโ€

Passo 2) Nesta etapa, estamos exibindo o conteรบdo armazenado nesta tabela usando o comando "Selecionar". Podemos observar o conteรบdo da tabela na captura de tela a seguir.

Saรญda da consulta Select mostrando as linhas da tabela employees_guru do Hive.

Trecho de cรณdigo de exemplo

Consultas a serem realizadas

1) Create table employees_guru(Id INT, Name STRING, Age INT, Address STRING, Salary FLOAT, Department STRING)
> Row format delimited
> Fields terminated by ',';
2) load data local inpath '/home/hduser/Employees.txt' into TABLE employees_guru;
3) select * from employees_guru;

Trabalhando com dados semiestruturados usando Hive (XML, JSON)

O Hive executa funcionalidades de ETL no ecossistema Hadoop atuando como um... Ferramenta ETLA implementaรงรฃo do MapReduce pode ser complexa em alguns tipos de aplicaรงรตes; o Hive reduz essa complexidade e oferece a melhor soluรงรฃo para aplicaรงรตes de TI no setor de armazenamento de dados.

Dados semiestruturados, como XML e JSON, podem ser processados โ€‹โ€‹com menos complexidade usando o Hive. Primeiro, veremos como podemos usar o Hive para... XML.

XML para tabela Hive

Neste, carregaremos dados XML nas tabelas Hive e buscaremos os valores armazenados dentro das tags XML.

Passo 1) Criaรงรฃo da tabela โ€œxmlsample_guruโ€ com uma coluna str do tipo de dados string.

Criando a tabela xmlsample_guru e carregando o arquivo test.xml no Hive.

A partir da captura de tela acima, podemos observar o seguinte:

  1. Criaรงรฃo da tabela โ€œxmlsample_guruโ€
  2. Carregando dados do arquivo test.xml na tabela โ€œxmlsample_guruโ€

Passo 2) Com o XPath Com o mรฉtodo xpath(), poderemos obter os dados armazenados dentro das tags XML.

Consulta xpath() retornando os valores ename e esal da coluna XML.

A partir da captura de tela acima, podemos observar o seguinte:

  1. Utilizando o mรฉtodo xpath(), estamos buscando os valores armazenados em /emp/esal/ e /emp/ename/.
  2. Valores presentes dentro das tags XML. Nesta etapa, estamos exibindo os valores reais armazenados sob as tags XML na tabela โ€œxmlsample_guruโ€.

Note que xpath() retorna uma matriz de strings; xpath_string(), xpath_int() e xpath_double() retornam um รบnico valor tipado.

Passo 3) Nesta etapa, iremos obter e exibir o XML bruto da tabela โ€œxmlsample_guruโ€.

Documentos XML brutos armazenados na coluna str de xmlsample_guru

A partir da captura de tela acima, podemos observar o seguinte:

  • Os dados XML reais exibidos com tags
  • Se observarmos uma รบnica tag, ela terรก โ€œempโ€ como tag principal e โ€œenameโ€ e โ€œesalโ€ como tags filhas.

Code trecho:

Consultas a serem realizadas

1) create table xmlsample_guru(str string);                                                                                                   2) load data local inpath '/home/hduser/test.xml' overwrite  into table xmlsample_guru;
3) select xpath(str,'emp/ename/text()'), xpath(str,'emp/esal/text()') from xmlsample_guru;

JSON (JavaNotaรงรฃo de Objeto de Script)

Os dados de redes sociais e sites sรฃo geralmente armazenados em formato JSON. Sempre que tentamos obter dados de servidores online, eles retornam arquivos JSON. Usando o Hive como banco de dados, podemos carregar dados JSON em tabelas do Hive criando esquemas.

JSON para tabela Hive

Neste tutorial, vamos carregar dados JSON em tabelas do Hive e recuperar os valores armazenados no esquema JSON.

Passo 1) Nesta etapa, vamos criar uma tabela JSON chamada โ€œjson_guruโ€. Depois de criada, carregamos e exibimos o conteรบdo do esquema propriamente dito.

Criando json_guru, carregando test.json e exibindo o esquema JSON.

A partir da captura de tela acima, podemos observar o seguinte:

  1. Criaรงรฃo da tabela โ€œjson_guruโ€
  2. Carregando dados do arquivo test.json na tabela โ€œjson_guruโ€
  3. Exibindo o esquema real do arquivo JSON armazenado na tabela json_guru.

Passo 2) Utilizando o mรฉtodo get_json_object(), podemos obter os valores de dados armazenados na hierarquia JSON.

A funรงรฃo `get_json_object()` gera um objeto listando os valores de ecode, ename e salary do json_guru.

A partir da captura de tela acima, podemos observar o seguinte:

  1. Usando `get_json_object(str,'$.ecode')`, รฉ possรญvel obter os valores de `ecode` da tabela `json_guru`. Da mesma forma, usando `get_json_object(str,'$.ename')` e `get_json_object(str,'$.sal')`, serรฃo obtidos os valores de `ename` e `sal` da tabela `json_guru`.
  2. Valores armazenados dentro da hierarquia JSON em json_guru

Como get_json_object() analisa o documento uma vez por chamada, json_tuple() รฉ mais eficiente quando vรกrias chaves sรฃo necessรกrias, e um JSON SerDe mapeia o documento em colunas tipadas no momento do carregamento.

Code fragmento

Consultas a serem realizadas

1) create table json_guru(str string);
2) load data inpath 'home/hduser/test.json' into table json_guru;
3) select * from json_guru;
4) select get_json_object(str,'$.ecode') as ecode, get_json_object(str,'$.ename') as ename ,get_json_object(str,'$.sal') as salary from json_guru;

JSON complexo para tabela Hive

Neste tutorial, vamos carregar dados JSON complexos em tabelas do Hive e recuperar os valores armazenados no esquema JSON.

Passo 1) Criando complexjson_guru com um campo de coluna รบnica.

Criando complexjson_guru e carregando emp.json na tabela Hive.

A partir da captura de tela acima, podemos observar o seguinte:

  1. Criaรงรฃo da tabela complexjson_guru com um รบnico campo de coluna do tipo de dados string.
  2. Carregando dados do arquivo JSON complexo emp.json no complexjson_guru

Passo 2) Ao usar a funรงรฃo `get_json_object`, podemos recuperar o conteรบdo real armazenado na hierarquia do arquivo JSON.

Na captura de tela a seguir, podemos ver a saรญda dos dados armazenados em complexjson_guru.

Extracted ecode e valores de chave aninhados do documento JSON complexo

Passo 3) Nesta etapa, utilizando o comando โ€œSelectโ€, conseguimos visualizar os dados JSON complexos armazenados na tabela โ€œcomplexjson_guruโ€.

Selecione a saรญda que mostra as linhas JSON complexas brutas em complexjson_guru.

Trecho de cรณdigo de exemplo

Consultas a serem realizadas

1) create table complexjson_guru(json string);
2) load data inpath 'home/hduser/emp.json' into table complexjson_guru;
3) select get_json_object(json,'$.ecode') as ecode ,get_json_object(json,'$.b') as code, get_json_object(json,'$.c') from complexjson_guru;
4) select * from complexjson_guru;

Hive em projetos em tempo real โ€“ Quando e onde usar

Quando e onde usar o Hive no ecossistema Hadoop:

Ao

  • Ao trabalhar com funรงรตes estatรญsticas robustas e poderosas no ecossistema Hadoop, รฉ importante considerar os desafios inerentes ao ecossistema Hadoop.
  • Ao trabalhar com processamento de dados estruturados e semiestruturados
  • Como ferramenta de data warehouse com Hadoop
  • Ingestรฃo de dados em tempo real com HBase, onde o Hive pode ser utilizado.

Onde

  • Para facilitar o uso como ferramenta de ETL e armazenamento de dados.
  • Para fornecer um ambiente do tipo SQL e realizar consultas semelhantes a SQL usando HiveQL.
  • Utilizar e implementar scripts de mapa e redutor personalizados para atender a requisitos especรญficos do cliente.

Perguntas Frequentes

O parรขmetro LOCAL copia o arquivo do sistema de arquivos da mรกquina cliente. Sem o parรขmetro LOCAL, o Hive trata o caminho como HDFS e move o arquivo, de forma que um caminho relativo seja resolvido no diretรณrio HDFS do usuรกrio.

A funรงรฃo `json_tuple()` geralmente รฉ mais rรกpida: ela analisa o documento uma รบnica vez e retorna vรกrias chaves juntas, enquanto a funรงรฃo `get_json_object()` analisa novamente a string para cada campo. Use `get_json_object()` para obter um รบnico valor.

Nรฃo. Uma รบnica coluna STRING mais as funรงรตes JSON funcionam. Um SerDe como org.apache.hive.hcatalog.data.JsonSerDe รฉ adequado para consultas repetidas em produรงรฃo, mapeamentoping As chaves sรฃo inseridas nas colunas digitadas apenas uma vez, em vez de a cada leitura.

Geralmente, trata-se de um arquivo formatado corretamente: o Hive espera um documento JSON completo por linha, portanto, um documento dividido em vรกrias linhas resulta em linhas invรกlidas. Uma chave com erro de digitaรงรฃo ou um erro de maiรบsculas e minรบsculas no JSONPath tambรฉm causa o mesmo problema.

A funรงรฃo xpath() sempre retorna uma matriz de strings. Em vez disso, utilize uma variante tipada: xpath_string(), xpath_int(), xpath_long(), xpath_float(), xpath_double() ou xpath_boolean(). Cada uma delas retorna um escalar desse tipo.

O armazenamento externo รฉ mais seguro para dados brutos de pouso, porque a quedaping A tabela mantรฉm os arquivos no local. Uma tabela gerenciada exclui seu diretรณrio de dados ao usar o comando DROP โ€” conveniente para tabelas temporรกrias, mas destrutivo para arquivos compartilhados.

As ferramentas de aprendizado de mรกquina analisam arquivos de amostra para inferir tipos, sinalizar chaves esparsas e sugerir colunas de partiรงรฃo a partir de padrรตes de consulta. Considere a saรญda como um rascunho โ€” os tipos e partiรงรตes ainda precisam ser verificados em relaรงรฃo aos volumes reais.

Ele cria instruรงรตes CREATE TABLE, comandos LOAD DATA e expressรตes JSONPath a partir de um registro de exemplo colado no editor. Como nรฃo consegue visualizar o cluster, รฉ necessรกrio verificar primeiro os nomes, caminhos e grafias das chaves.

Resuma esta postagem com: