hadoop - tengo - Cómo especificar la lista de columnas en la inserción de colmenas en la consulta
servicio de retiro de panales de abejas (4)
Acabo de instalar y configurar Apache Hive versión 1.1.0. Luego creé una tabla al consultar esta consulta:
create table person (name1 string, surname1 string);
Y luego quiero agregar una fila por:
insert into person (name1, surname1) values ("Alan", "Green");
Y causa un error:
Error: Error al compilar el enunciado: FAILED: ParseException línea 1:20 no puede reconocer entrada cerca de ''('' ''name1'' '','' en enunciado (estado = 42000, código = 40000).
Pero cuando ejecuto la consulta sin lista de columnas, funciona bien:
insert into person values ("Alan", "Green");
La pregunta es: ¿cómo especificar la lista de columnas en hiveQL para hacer insertar?
Hive no admite inserciones, actualizaciones y eliminaciones a nivel de fila.
Sin embargo, después de crear una tabla, puede tener todos sus datos en un archivo y cargar el archivo en la tabla de colmenas. de esa manera puede insertar datos en una tabla de colmena. Puede consultar el manual de la colmena para obtener los comandos.
Hay soluciones para realizar inserciones / actualizaciones y eliminaciones en la colmena. Pero no es recomendable
Hive actualmente no es compatible con dicha funcionalidad, detalles aquí
Debe proporcionar una lista de valores completa.
Insertar en columnas específicas en la consulta anterior:
insert into table person (name1, surname1) values ("Alan", "Green");
es compatible con Hive 2.0
De acuerdo con este error HIVE-9481 , puede especificar la lista de columnas en la instrucción INSERT, ya que 1.2.0. La sintaxis es así:
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)
[(column_list)]
[IF NOT EXISTS]] select_statement1 FROM from_statement;
ejemplo:
CREATE TABLE pageviews (userid VARCHAR(64), link STRING, "from" STRING)
PARTITIONED BY (datestamp STRING)
CLUSTERED BY (userid) INTO 256 BUCKETS STORED AS ORC;
INSERT INTO TABLE pageviews
PARTITION (datestamp = ''2014-09-23'')
(userid,link)
VALUES (''jsmith'', ''mail.com'');
Probé esto con Hive 2.1. Funciona solo con INSERT INTO, no con INSERT OVERWRITE
Y no sé por qué esta sintaxis no se menciona en la página wiki de Apache LanguageManual DML