Y0g*_*pta 55 sql hadoop hive hiveql
我是hive的新手,想要知道是否有像我们在SQL中那样将数据插入到hive表中.我想将我的数据插入到hive中
INSERT INTO tablename VALUES (value1,value2..)
Run Code Online (Sandbox Code Playgroud)
我已经读过你可以将数据从一个文件加载到hive表,或者你可以将数据从一个表导入到hive表中,但有没有办法在SQL中附加数据?
mat*_*its 103
这里的一些答案是Hive 0.14的过时
现在可以使用以下语法插入:
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);
Run Code Online (Sandbox Code Playgroud)
uni*_*ue2 18
您可以使用表生成函数堆栈将文字值插入表中.
首先,您需要一个只包含一行的虚拟表.您可以在限制的帮助下生成它.
CREATE TABLE one AS
SELECT 1 AS one
FROM any_table_in_your_database
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
现在,您可以创建一个包含如下文字值的新表:
CREATE TABLE my_table AS
SELECT stack(3
, "row1", 1
, "row2", 2
, "row3", 3
) AS (column1, column2)
FROM one
;
Run Code Online (Sandbox Code Playgroud)
stack的第一个参数是您生成的行数.
您还可以向现有表添加值:
INSERT INTO TABLE my_table
SELECT stack(2
, "row4", 1
, "row5", 2
) AS (column1, column2)
FROM one
;
Run Code Online (Sandbox Code Playgroud)
小智 16
下面是unique2建议的稍微好一点的版本:
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;
Run Code Online (Sandbox Code Playgroud)
这不需要黑客使用已经存在的表.
您可以使用以下方法.有了这个,您不需要创建临时表OR txt/csv文件以分别进一步选择和加载.
INSERT INTO TABLE tablename SELECT value1,value2 FROM tempTable_with_atleast_one_records LIMIT 1.
Run Code Online (Sandbox Code Playgroud)
其中tempTable_with_atleast_one_records是具有至少一条记录的任何表.
但是这种方法的问题在于,如果你有INSERT语句,它插入多行如下.
INSERT INTO yourTable values (1 , 'value1') , (2 , 'value2') , (3 , 'value3') ;
Run Code Online (Sandbox Code Playgroud)
然后,您需要为每一行分别使用INSERT配置单元语句.见下文.
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;
Run Code Online (Sandbox Code Playgroud)
您绝对可以将数据附加到现有表中.(但它实际上不是HDFS级别的补充).只是无论何时对现有的Hive表执行LOAD或INSERT操作而没有OVERWRITE子句,都将放置新数据而不替换旧数据.将在与该表对应的目录中为此新插入的数据创建一个新文件.例如 :
我有一个名为demo.txt的文件,它有两行:
ABC
XYZ
Run Code Online (Sandbox Code Playgroud)
创建一个表并将此文件加载到其中
hive> create table demo(foo string);
hive> load data inpath '/demo.txt' into table demo;
Run Code Online (Sandbox Code Playgroud)
现在,如果我在这张桌子上做一个SELECT,它会给我:
hive> select * from demo;
OK
ABC
XYZ
Run Code Online (Sandbox Code Playgroud)
假设,我还有一个名为demo2.txt的文件,其中包含:
PQR
Run Code Online (Sandbox Code Playgroud)
我在这张桌子上再次执行LOAD而不使用覆盖,
hive> load data inpath '/demo2.txt' into table demo;
Run Code Online (Sandbox Code Playgroud)
现在,如果我现在做一个SELECT,它会给我,
hive> select * from demo;
OK
ABC
XYZ
PQR
Run Code Online (Sandbox Code Playgroud)
HTH
小智 6
向 Hive 表插入数据的方法: 为了演示,我使用表名称为table1和table2
create table table2 as select * from table1 where 1=1;
或者
create table table2 as select * from table1;
insert overwrite table table2 select * from table1;
--它将数据从一个插入到另一个。注意:它将刷新目标。
insert into table table2 select * from table1;
--它将数据从一个插入到另一个。注意:它将附加到目标中。
load data local inpath 'local_path' overwrite into table table1;
--它将数据从本地加载到目标表中,并刷新目标表。
load data inpath 'hdfs_path' overwrite into table table1;
--它将从 hdfs 位置加载数据并刷新目标表。或者
创建表 table2( col1 string, col2 string, col3 string) 行格式分隔字段以 ',' 结尾 位置 'hdfs_location';
load data local inpath 'local_path' into table table1;
--它将从本地加载数据并附加到目标表中。
load data inpath 'hdfs_path' into table table1;
--它将从 hdfs 位置加载数据并附加到目标表中。
insert into table2 values('aa','bb','cc');
--假设 table2 只有 3 列。
多次插入 Hive 表
| 归档时间: |
|
| 查看次数: |
210558 次 |
| 最近记录: |