Directorio de artículos
Hay formatos de mapa, matriz y estructura en Hive. Si estos tres formatos existen al mismo tiempo, ¿cómo debe especificarse el separador para la instrucción de creación de tablas?
1. Diga la respuesta primero
Di la respuesta primero:
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
Explicación de campo:
row format delimited fields terminated by ',' /* 列分隔符 */
collection items terminated by '_' /* MAP STRUCT 和 ARRAY 的分隔符(数据分割
符号) */
map keys terminated by ':' /* MAP 中的 key 与 value 的分隔符 */
lines terminated by '\n'; /* 行分隔符 */
En realidad, solo hay dos lugares que necesitan explicación:
①. Los elementos de colección terminados por '_', en colmena, mapa, matriz y estructura, se especifican utilizando elementos de colección terminados por, por lo que solo se puede compartir un separador.
Lines. Líneas terminadas por '\ n', no es necesario escribir, el separador de línea es \ n por defecto
2. Da un ejemplo
Suponiendo los siguientes datos, debe insertar en la tabla relacionada con la colmena
{
"name": "张三",
"friends": ["李四" , "王五"] , //列表 Array,
"children": { //键值 Map,
"小李四": 18 ,
"小王五": 19
}
"address": { //结构 Struct,
"street": "大兴" ,
"city": "北京"
}
}
- Primero, organícelo en una pieza de datos:
张三,李四_王五,小李四:18_小王五:19,大兴_北京
Tenga en cuenta el separador
- Construir mesa
create table test(
name string,
friends array<string>,
children map<string, int>,
address struct<street:string, city:string>
)
row format delimited
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';
- Imprima primero los datos en el documento y luego léalos en la colmena
load data local inpath
"/home/software/data/test.txt" into table test;
- Método de
acceso Mapa de acceso:
select friends[1], /* 这是访问array */
children['xiaosong'], /* 这是访问map */
address.city
from test;