Análisis de campos complejos de Hive 1: expansión de vista horizontal
1. La información de datos requerida se encuentra en el campo de valor, que está en formato json. Primero, se debe extraer la información de la lista en este campo.
get_json_object(value, '$.htllist')
2. El valor de retorno de get_JSON_object está en formato de cadena, como se detalla a continuación.
Hay '[' y ']' antes y después de la cadena. Cada {} contiene información sobre un único hotel, separado por ',' antes de {}.
4. Para separar cada {} más adelante, debe reemplazar el delimitador ',' con el delimitador ' | ' y reemplazar '[]' con ' '.
regexp_replace(regexp_replace(get_JSON_object(valor,'$.htmllist'),'},','}\\| '),' \\]|\\ [', '') p>
5. Separe la cadena obtenida en el paso anterior según "|" para obtener una matriz de la información de cada hotel.
Descomposición de vista lateral (split(m.htllist, '\\|')) n como htlinfo
La función 6.str_to_map convierte cada elemento de la matriz de información del hotel Convertir a formato de mapa y obtener información ['hotelid'] de él.
str _ to _ map(regexp _ replace(n . HTL info,' \\}|\\{| " ', ''), ', ', ':')['hotelid' ]
7. La extracción completa de SQL es la siguiente
select str _ to _ map(regexp _ replace(n . HTL info, ' \\}|\\{| " ', ''),',',':')['hotelid'] htlinfo, m.vid, m.sid, m.pvid, m.uid, m.cid
? from(select regexp_replace(regexp_replace(get_JSON_object(value,'$.htllist'),' },',' }\\| '),' \\]|\\[',' ')htllist, vid, sid, pvid, uid, cid
? ¿De la tabla _xxx
donde d='2018-08-08 '
y pagecode='condition1 '
? y límite de clave 100)m
? Descomposición de vista lateral (split(m.htllist, ' \\|')) n como htlinfo
donde m.htllist no está vacío