Hive 官方手册翻译 -- Hive DML(数据操纵语言)
2021-05-16 03:29
标签:manual 需要 eth json格式 http express bar form value 由 Confluence Administrator创建, 最终由 Lars Francke修改于 八月 15, 2018 原文链接 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML 翻译:Google Google翻译,金山软件 金山词霸 校对:南大通用 范振勇 (2018.10.6) 在Hive中,有多种方式修改数据: LOAD INSERT 从查询到目标表 从查询到目录 成从SQL蜂巢表 UPDATE DELETE MERGE 从Hive0.8起可以使用EXPORT和IMPORT命令。 在将数据加载到表中时,Hive不执行任何转换。当前,Load操作是纯复制/移动操作,仅将数据文件移动到与Hive表对应的位置。 Hive3.0之前的加载操作是将数据文件移动(纯复制/移动操作)到与Hive表对应的位置。 从Hive 3.0开始,支持附加的Load操作,它在Hive内部重写为一个INSERT AS SELECT。 这样的架构的实施例: 这里,分区信息是缺失的,本应该给出一个错误,但是,如果位于filepath下的(一个或多个)文件路径符合分区表模式,使得每行具有分配列(一个或多个)结束,则Load将改写成一个INSERT AS SELECT工作。 未压缩的数据应该是这样的: (1,2,3),(2,3,4),(4,5,3)等等。 查询结果可以通过使用插入件子句插入到Hive表中。 在动态分区插入时,用户可以提供局部分区规范,这意味着只需在分区子句中指定分区列名列表,而列值是可选的。如果给出分区列值,我们将其称为静态分区,否则就是动态分区。每个动态分区列都有来自SELECT语句的相应的投影列。这意味着动态分区创建由输入列的值决定。动态分区列必须在SELECT语句中的投影列中最后指定,并按照它们在PARTITION()子句中出现的顺序。 在Hive3.0.0(hive-19083)中,不需要为动态分区指定分区列。如果未指定分区规范,Hive将自动生成该分区规范。 在Hive 0.9.0之前默认禁用动态分区插入,在Hive 0.9.0及更高版本中默认启用动态分区插入。下面是支持动态分区插入的相关配置属性: 配置属性 缺省值 注释 hive.exec.dynamic.partition true 需要设置为true来启用动态分区插入 hive.exec.dynamic.partition.mode strict 在strict模式下,用户必须指定至少一个静态分区的情况下,防止不小心将覆盖所有分区,在nonstrict模式下,允许所有分区是动态的。 hive.exec.max.dynamic.partitions.pernode 100 允许在每个MAPPER/REDUCER节点创建动态分区的最大数目 hive.exec.max.dynamic.partitions 1000 允许创建动态分区的最大数目 hive.exec.max.created.files 100000 在MapReduce作业中所有MAPPER/REDUCER创建HDFS文件的最大数量 hive.error.on.empty.partition false 当动态分区插入产生空结果时,是否抛出一个异常 例: 这里的country分区列的值将由SELECT子句的最后一列(即pvs.cnt)动态创建。请注意,该名称不使用。在nonstrict模式下,还可以动态创建DT分区。 其他文档 设计文档 原始设计文档 HIVE-936 教程:动态分区插入 HCatalog动态分区 Pig用法 MapReduce用法 将上述语法作细微变化,就可以将查询结果插入到文件系统目录中。 在INSERT ... VALUES语句可以用来从SQL中将数据直接插入到表。 版本信息 自Hive0.14开始支持INSERT ... VALUES。 例子 版本信息 自Hive0.14开始,可以使用UPDATE。 UPDATE只能在支持ACID表上执行。详见Hive事务。 标准语法: 版本信息 自Hive0.14开始,可以使用DELETE。 DELETE只能在支持ACID表上执行。详见Hive事务。 标准语法: 版本信息 自Hive 2.2开始,可以使用MEGER。 MERGE只能在支持ACID表上执行。详见Hive事务。 按SQL标准要求,如果ON子句是使得源中超过1行与目标中的1行匹配,就应该引发错误。此检查在计算上开销很大,可能会对合并语句的整个运行时产生显著影响。hive.merge.cardinality.check =false,可以禁用检查,这需要您自己承担风险。如果禁用检查是,但语句具有交叉连接效果,则可能导致数据损坏。 例子参见这里。 Hive 官方手册翻译 -- Hive DML(数据操纵语言) 标签:manual 需要 eth json格式 http express bar form value 原文地址:https://www.cnblogs.com/fanzhenyong/p/9749140.html一、从文件加载到表
1.1、 语法
LOAD DATA [LOCAL] INPATH ‘filepath‘ [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
LOAD DATA [LOCAL] INPATH ‘filepath‘ [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT ‘inputformat‘ SERDE ‘serde‘] (3.0 or later)
1.2、 概要
CREATE TABLE tab1 (col1 int, col2 int) PARTITIONED BY (col3 int) STORED AS ORC;
LOAD DATA LOCAL INPATH ‘filepath‘ INTO TABLE tab1;
1.3、 注释
二、将数据从查询插入Hive表
2.1、 语法
标准语法:
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 FROM from_statement;
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement;
Hive 扩展(多表插入模式):
FROM from_statement
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2]
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
FROM from_statement
INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1
[INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2]
[INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] ...;
Hive 扩展 (动态分区插入模式):
INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;
INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;
2.2、 概要
2.3、 注释
2.4、 动态分区插入模式
FROM page_view_stg pvs
INSERT OVERWRITE TABLE page_view PARTITION(dt=‘2008-06-08‘, country)
SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, null, null, pvs.ip, pvs.cnt
三、将数据从查询写入到文件系统
3.1、 语法
标准语法:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
SELECT ... FROM ...
Hive 扩展 (多表插入):
FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...
row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char] (Note: Only available starting with Hive 0.13)
3.2、 概要
3.3、 注释
四、SQL语句将值插入表
4.1、 语法
标准语法:
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
此处的values_row is:
( value [, value ...] )
此处的value或者是NULL或者是任何有效的sql表达式。
4.2、 概要
译者注:我在Hive 2.3.3中验证上面第2条规则是不对的
drop table if exists test ;
create table test(a int,b varchar(128));
insert into test (a,b) values (100,‘tianjin‘);
insert into test (a) values (200),(300);
insert into test values (400,‘beijing‘);
select * from test ;
三条Insert into语句都是正确的,最后查询结果也是正确的
0: jdbc:hive2://hadoop15.gbase.cn:2181,hadoop> select * from test ;
+---------+----------+
| test.a | test.b |
+---------+----------+
| 100 | tianjin |
| 200 | NULL |
| 300 | NULL |
| 400 | beijing |
+---------+----------+
所以,在Hive 2.3.3中 Insert into 支持标准的SQL语句,可以直接插入部分列,其他列自动设置为NULCREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3, 2))
CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC;
INSERT INTO TABLE students
VALUES (‘fred flintstone‘, 35, 1.28), (‘barney rubble‘, 32, 2.32);
CREATE TABLE pageviews (userid VARCHAR(64), link STRING, came_from STRING)
PARTITIONED BY (datestamp STRING) CLUSTERED BY (userid) INTO 256 BUCKETS STORED AS ORC;
INSERT INTO TABLE pageviews PARTITION (datestamp = ‘2014-09-23‘)
VALUES (‘jsmith‘, ‘mail.com‘, ‘sports.com‘), (‘jdoe‘, ‘mail.com‘, null);
INSERT INTO TABLE pageviews PARTITION (datestamp)
VALUES (‘tjohnson‘, ‘sports.com‘, ‘finance.com‘, ‘2014-09-23‘), (‘tlee‘, ‘finance.com‘, null, ‘2014-09-21‘);
INSERT INTO TABLE pageviews
VALUES (‘tjohnson‘, ‘sports.com‘, ‘finance.com‘, ‘2014-09-23‘), (‘tlee‘, ‘finance.com‘, null, ‘2014-09-21‘);
五、更新
5.1、 语法
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
5.2、 概要
5.3、 注释
六、删除
6.1、 语法
DELETE FROM tablename [WHERE expression]
6.2、 概要
6.3、 注释
七、合并
7.1、 语法
标准语法:
MERGE INTO target table> AS T USING source expression/table> AS S
ON boolean expression1>
WHEN MATCHED [AND
7.2、 概要
7.3、 性能注意事项
7.4、 注释
文章标题:Hive 官方手册翻译 -- Hive DML(数据操纵语言)
文章链接:http://soscw.com/index.php/essay/86076.html