sql - traduccion - hive meaning
Colmena insertar consulta como SQL (13)
Algunas de las respuestas aquí están desactualizadas a partir de Hive 0.14
Ahora es posible insertar usando sintaxis como:
CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2));
INSERT INTO TABLE students
VALUES (''fred flintstone'', 35, 1.28), (''barney rubble'', 32, 2.32);
Soy nuevo en colmena, y quiero saber si hay alguna forma de insertar datos en la tabla de colmenas como lo hacemos en SQL. Quiero insertar mis datos en colmenas como
INSERT INTO tablename VALUES (value1,value2..)
He leído que puede cargar los datos de un archivo a la tabla de colmena o puede importar datos de una tabla a tabla de colmena, pero ¿hay alguna manera de anexar los datos como en SQL?
Creo que en tales escenarios debería usar HBASE que facilita ese tipo de inserción, pero no proporciona ningún tipo de lenguaje de consulta de SQL. Necesita hacer uso de la API Java de HBASE como el método put para realizar este tipo de inserción. Además, HBASE es una base de datos no sql orientada a columnas.
Definitivamente podría agregar datos en una tabla existente. (Pero en realidad no es un apéndice en el nivel HDFS). Es solo que cada vez que realiza una operación LOAD o INSERT en una tabla Hive existente sin la cláusula OVERWRITE
los datos nuevos se colocarán sin reemplazar los datos anteriores. Se creará un nuevo archivo para estos datos recién insertados dentro del directorio correspondiente a esa tabla. Por ejemplo :
Tengo un archivo llamado demo.txt que tiene 2 líneas:
ABC
XYZ
Crea una tabla y carga este archivo en ella
hive> create table demo(foo string);
hive> load data inpath ''/demo.txt'' into table demo;
Ahora, si hago un SELECTO en esta tabla, me dará:
hive> select * from demo;
OK
ABC
XYZ
Supongamos que tengo un archivo más llamado demo2.txt que tiene:
PQR
Y hago una CARGA otra vez en esta tabla sin usar sobrescribir,
hive> load data inpath ''/demo2.txt'' into table demo;
Ahora, si hago un SELECCIONAR ahora, me dará,
hive> select * from demo;
OK
ABC
XYZ
PQR
HTH
Formas de insertar datos en la tabla de la colmena: para la demostración, estoy usando el nombre de la tabla como tabla1 y tabla2
1) create table table2 as select * from table1 where 1=1;
o create table table2 as select * from table1;
2) insert overwrite table table2 select * from table1;
- Insertará datos de uno a otro. Nota: Actualizará el objetivo.
3) insert into table table2 select * from table1;
- Insertará datos de uno a otro. Nota: se agregará al objetivo.
4) load data local inpath ''local_path'' overwrite into table table1;
- cargará datos de local en la tabla de destino y también actualizará la tabla de destino.
5) load data inpath ''hdfs_path'' overwrite into table table1;
- cargará datos desde la ubicación de HDS y también actualizará la tabla de destino. o
create table table2(
col1 string,
col2 string,
col3 string)
row format delimited fields terminated by '',''
location ''hdfs_location'';
6) load data local inpath ''local_path'' into table table1;
- cargará datos de local y también se agregará a la tabla de destino.
7) load data inpath ''hdfs_path'' into table table1;
- cargará datos de la ubicación de hdfs y también se agregará a la tabla de destino.
8) insert into table2 values(''aa'',''bb'',''cc'');
--Los dicen que la tabla2 tiene solo 3 columnas.
9) Inserción múltiple en la mesa de la colmena
Ingrese el siguiente comando para insertar datos en la tabla de registro de prueba con alguna condición:
INSERT INTO TABLE testlog SELECT * FROM table1 WHERE some condition;
No puede insertar en para insertar un solo registro. No es compatible con Hive. Puede colocar todos los registros nuevos que desee insertar en un archivo y cargar ese archivo en una tabla temporal en Hive. Luego, usando el comando insertar sobrescribir ... seleccionar, inserte esas filas en una nueva partición de la tabla principal de Hive. La restricción aquí es que su tabla principal tendrá que ser particionada previamente. Si no utiliza la partición, su tabla completa será reemplazada por estos nuevos registros.
No. Esta sintaxis INSERT INTO tablename VALUES (x,y,z)
actualmente no es compatible con Hive.
Para insertar datos completos de la table2
en la table2
. A continuación hay una consulta:
INSERT INTO TABLE table1 SELECT * FROM table2;
Puede usar el enfoque a continuación. Con esto, no necesita crear tabla temporal O archivo txt / csv para seleccionar y cargar respectivamente.
INSERT INTO TABLE tablename SELECT value1,value2 FROM tempTable_with_atleast_one_records LIMIT 1.
Donde tempTable_with_atleast_one_records es cualquier tabla con al menos un registro.
Pero el problema con este enfoque es que si tiene una instrucción INSERT que inserta varias filas como debajo de una.
INSERT INTO yourTable values (1 , ''value1'') , (2 , ''value2'') , (3 , ''value3'') ;
Luego, debe tener una declaración de colmena INSERT separada para cada fila. Vea abajo.
INSERT INTO TABLE yourTable SELECT 1 , ''value1'' FROM tempTable_with_atleast_one_records LIMIT 1;
INSERT INTO TABLE yourTable SELECT 2 , ''value2'' FROM tempTable_with_atleast_one_records LIMIT 1;
INSERT INTO TABLE yourTable SELECT 3 , ''value3'' FROM tempTable_with_atleast_one_records LIMIT 1;
Puede usar la pila de funciones generadoras de tablas para insertar valores literales en una tabla.
Primero necesitas una tabla ficticia que contenga solo una línea. Puedes generarlo con la ayuda del límite.
CREATE TABLE one AS
SELECT 1 AS one
FROM any_table_in_your_database
LIMIT 1;
Ahora puede crear una nueva tabla con valores literales como este:
CREATE TABLE my_table AS
SELECT stack(3
, "row1", 1
, "row2", 2
, "row3", 3
) AS (column1, column2)
FROM one
;
El primer argumento de stack es la cantidad de filas que estás generando.
También puede agregar valores a una tabla existente:
INSERT INTO TABLE my_table
SELECT stack(2
, "row4", 1
, "row5", 2
) AS (column1, column2)
FROM one
;
Sí, podemos usar Insertar consulta en colmena.
colmena> crear prueba de tabla (id int, cadena de nombre);
INSERTAR : INSERTAR ... VALORES está disponible a partir de la versión: Colmena 0.14 .
colmena> insertar en la tabla valores de prueba (1, ''mytest'');
Esto va a funcionar para insert. tenemos que usar valores palabra clave.
Nota: El usuario no puede insertar datos en una columna de tipo de datos complejo (matriz, mapa, estructura, unión) utilizando la cláusula ** INSERT INTO ... VALUES.
Sí, puede insertar pero no de manera similar a SQL.
En SQL podemos insertar los datos de nivel de fila, pero aquí puede insertar por campos (columnas).
Durante esto, debe asegurarse de que la tabla de destino y la consulta tengan el mismo tipo de datos y el mismo número de columnas.
p.ej:
CREATE TABLE test(stu_name STRING,stu_id INT,stu_marks INT)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '',''
STORED AS TEXTFILE;
INSERT OVERWRITE TABLE test SELECT lang_name, lang_id, lang_legacy_id FROM export_table;
Una versión ligeramente mejor de la sugerencia unique2 está a continuación:
insert overwrite table target_table
select * from
(
select stack(
3, # generating new table with 3 records
''John'', 80, # record_1
''Bill'', 61 # record_2
''Martha'', 101 # record_3
)
) s;
Lo cual no requiere el hack con el uso de una tabla que ya está saliendo.