1. Tipos de dados especiais do Hive
O Hive é geralmente semelhante ao mysql, mas há mais tipos de dados - tipos de dados de coleção:
ARRAY: Os dados armazenados são do mesmo tipo
MAP: pares chave-valor com o mesmo tipo
STRUCT: encapsula um conjunto de campos
tipo | Formatar | definição |
variedade | ['aaa','bbb','bbb'] | ARRAY<string> |
mapa | {'A':'Apex','B':'Abelha'} | MAPA<string,string> |
estrutura | {'aaa',666} | STRUCT<fruta:string,peso:int> |
2. Crie uma tabela estática
Instrução para criar uma tabela estática:
create table if not exists employee(
name string,
work_place array<string>,
gender_age struct<gender:string,age:int>,
skills_score map<string,int>,
depart_title map<string,string>
)
row format delimited fields terminated by '|'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';
formato de linha delimitado : instrução inicial de configuração do delimitador
campos terminados por '|' : defina o separador entre os campos como "|"
itens de coleção terminados por ',' : defina o separador entre cada item de um campo de tipo complexo (array, struct) como ","
chaves de mapa terminadas por ': ' : defina o separador entre o valor da chave de um campo de tipo complexo (Mapa) como ":"
linhas terminadas por '\n'; : defina o separador entre as linhas como "\n "
Importe dados de um arquivo local para uma tabela:
load data local inpath '/opt/employee.txt' into table employee;
Importe dados de um arquivo do servidor para uma tabela:
load data inpath '/employee.txt' into table employee;
Sobrescrever dados de um arquivo em uma tabela:
load data inpath '/employee.txt' overwrite into table employee;
3. Crie uma tabela de partições
A instrução para criar uma tabela particionada:
create table employee2(
name string,
work_place array<string>,
gender_age struct<gender:string,age:int>,
skills_score map<string,int>,
depart_title map<string,string>
)
partitioned by (age int) --以age作为分区依据
row format delimited
fields terminated by '|'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';
Importar dados para a tabela particionada:
load data local inpath '/opt/employee.txt' into table employee2 partition(age=20);
load data local inpath '/opt/employee.txt' into table employee2 partition(age=30);
Exibir informações de partição da tabela de partições:
show partitions employee2;
4. Tabelas internas e externas
As tabelas de dados são divididas em tabelas internas e tabelas externas
Tabela interna (tabela de gerenciamento)
- No HDFS, é uma subpasta no diretório do banco de dados ao qual pertence
- Os dados são totalmente gerenciados pelo Hive, excluir a tabela (metadados) excluirá os dados
Tabelas Externas
- Os dados são salvos no caminho HDFS no local especificado
- O Hive não gerencia totalmente os dados, descartar tabelas (metadados) não exclui os dados
As duas tabelas de funcionários criadas acima são tabelas internas
Instrução para criar uma tabela externa:
create external table if not exists employee(
name string,
work_place array<string>,
gender_age struct<gender:string,age:int>,
skills_score map<string,int>,
depart_title map<string,string>
)
row format delimited
fields terminated by '|'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n
location '/tmp/hivedata/employee';
Para criar uma tabela externa, adicione um externo depois de criar
location '/tmp/hivedata/employee'; significa: especifique o caminho de armazenamento de dados (HDFS)