1. Tipos de datos especiales de Hive
Hive es generalmente similar a mysql, pero hay más tipos de datos: tipos de datos de recopilación:
ARRAY: Los datos almacenados son del mismo tipo
MAP: pares clave-valor con el mismo tipo
STRUCT: encapsula un conjunto de campos
tipo | Formato | definición |
formación | ['aaa', 'bbb', 'bbb'] | ARRAY<cadena> |
mapa | {'A':'Ápice','B':'Abeja'} | MAP<cadena,cadena> |
estructura | {'aaa', 666} | STRUCT<fruta:cadena,peso:int> |
2. Crea una tabla estática
Declaración para crear una tabla 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 fila delimitado : declaración de inicio de configuración del delimitador
campos terminados en '|' : establezca el separador entre campos en "|"
elementos de colección terminados en ',' : establezca el separador entre cada elemento de un campo de tipo complejo (matriz, estructura) en ","
claves de mapa terminadas en ': ' : establezca el separador entre el valor clave de un campo de tipo complejo (mapa) en ":"
líneas terminadas en '\n'; : establezca el separador entre líneas en "\n"
Importe datos de un archivo local a una tabla:
load data local inpath '/opt/employee.txt' into table employee;
Importe datos de un archivo de servidor a una tabla:
load data inpath '/employee.txt' into table employee;
Sobrescribir datos de un archivo en una tabla:
load data inpath '/employee.txt' overwrite into table employee;
3. Crea una tabla de particiones
La declaración para crear una tabla 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 datos en una tabla 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);
Ver información de partición de la tabla de particiones:
show partitions employee2;
4. Mesas internas y externas
Las tablas de datos se dividen en tablas internas y tablas externas.
Mesa interna (mesa de gestión)
- En HDFS, es una subcarpeta en el directorio de la base de datos al que pertenece
- Hive administra completamente los datos, al eliminar la tabla (metadatos) se eliminarán los datos
Mesas Externas
- Los datos se guardan en la ruta HDFS en la ubicación especificada
- Hive no administra completamente los datos, al eliminar tablas (metadatos) no se eliminan los datos
Las dos tablas de empleados creadas arriba son tablas internas.
Declaración para crear una tabla 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 crear una tabla externa, agregue una externa después de crear
ubicación '/tmp/hivedata/employee'; significa: especificar la ruta de almacenamiento de datos (HDFS)