-Hive-2-基础

只拷贝表结构,不拷贝表数据
CREATE TABLE ruozedata_emp2 LIKE ruozedata_emp;
show create table xxx(表名);可看到表结构

拷贝表数据
Create Table As Select (CTAS)
create table ruozedata_emp3 as select empno,ename,deptno from ruozedata_emp;
可解决需求:天粒度,今天统计的是昨天的,统计结果写到一个tmp表里面

改表名,路径的名称也改了
ALTER TABLE 老表 RENAME TO 新表;
ALTER TABLE ruozedata_emp3 rename to ruozedata_emp3_bak;

Drop Table  删表跑路
DROP TABLE  table_name ruozedata_emp3_bak;

Truncate Table  XXX  删表的数据

trash   删除移动到此垃圾桶,需配置

内部表和外部表

metadata: TBL_TYPE
	data:  Table Type    

MANAGED_TABLE    内部表
DROP : data  +  metadata   X
EXTERNAL_TABLE     外部表
DROP: metadata X      HDSF  √
删除内部表会把数据和元数据都删除,而删除外部表只删除元数据。
从安全各方面出发,生产上使用外部表。

创建外部表
配路径
CREATE EXTERNAL TABLE emp_external(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/d7_externel/emp/' ;

Load加载数据

create table ruozedata_dept(
deptno int,
dname string,
loc string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

    load data local inpath '/home/hadoop/data/dept.txt' into table ruozedata_dept;
    
    load data inpath 'hdfs://hadoop000:8020/wc/dept/dept.txt' into table ruozedata_dept;

LOAD DATA [LOCAL] INPATH '' [OVERWRITE] INTO TABLE XXX;
LOCAL:从本地系统  linux服务器
不带LOCAL: 从Hadoop文件系统  HDFS

OVERWRITE           数据覆盖
不带OVERWRITE    追加

从查询结果集导入/导出数据

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;

Writing data into the filesystem from queries   导出
INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/tmp/empout'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
SELECT empno,ename FROM ruozedata_emp;

聚合函数

   count max min sum avg 多进一出
    select max(sal),min(sal),sum(sal),avg(sal) from xxx_emp

select deptno,avg(sal)  from xxx_emp group by deptno;
出现在select子句中的字段要么出现在group by中要么出现在聚合函数中

    selectXXX,case开头
    when中间 XXX
    end结尾 from XXX_emp;
    生产上案例: 
    select ename,sal,
    case
    when sal>1 and sal<=1000 then "lower"
    when sal>1000 and sal<=2000 then "just so so"
    when sal>2000 and sal<=4000 then "ok"
    else "high"
    end
    from ruozedata_emp;

order by vs sort by vs distribute by vs cluster by

order by 全局排序    1reduce  X不要使用,若使用用limit
sort by 局部排序     每个reduce内是有序

set hive.mapred.mode=nonstrict;非严格模式
set hive.mapred.mode=strict;严格模式
set mapred.reduce.tasks=3;

INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/tmp/sortby'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
SELECT * FROM ruozedata_emp sort by empno desc;

distribute by

   按照一定的规则把数据分发到某个reducer

    INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/tmp/distributeby'
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
    SELECT * FROM ruozedata_emp 
    distribute by length(ename) 
    sort by empno ;

cluster by

==> distribute by xxx sort by xxx

INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/tmp/clusterby'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'  
select * from ruozedata_emp cluster by ename

Hive内置函数

length(ename)Hive里面的内置函数 build-in
show functions;
desc function length;
desc function extended length; 

Hive支持insert update delete,但是不用
离线计算,用load,一定不要把hive当做RDBMS来用

date function

在这里插入图片描述

cast 转换

select cast("5" as int) from dual;
select cast("2019-08-04" as date) from dual;
select cast(current_timestamp as date) from dual;
转不成功null

数字

round(四舍五入)
select round (3.141592,4)from dual;
ceil  /ceiling(往上取整)
floor(往下)
ABS(绝对值)
least(返回最小的值)
select least(3,5,6)from dual;
greatst(返回最大的值)

字符串

desc function extended substr;
select substr("abcdefg",2,3)from dual;
concat(拼起来)
concat_ws(用.点拼接起来)

案例:Hive来完成wc统计

/data/wc.data

hello   hello   hello
world   world
welcome


hive

create table wc(sentence string);
load data local inpath ' /home/hadoop/data/wc.data' into table wc;
select * from wc;
select  explode (split(sentence,'\t')))from wc;
select  explode (split(sentence,'\t')))as word from wc;

hello   hello   hello
==> split  explode     一进多出,行转列
hello
hello
hello

非严格模式下

select word,count(1) as cnt
from
(
select explode(split(sentence,'\t')) as word from wc
) t
group by word
order by cnt desc;
<think>嗯,用户问的是在Sqoop命令中使用--hive-conf参数的问题。我需要先回忆一下Sqoop和Hive的相关知识。Sqoop主要用于Hadoop和关系型数据库之间的数据传输,而Hive则是基于Hadoop的数据仓库工具,允许用类似SQL的HiveQL查询数据。 用户可能想知道如何在Sqoop导入数据到Hive时配置Hive的相关参数。比如,他们可能在导入过程中遇到了问题,比如分隔符不匹配,或者需要动态设置Hive表的属性。这时候,--hive-conf参数就派上用场了。 首先,我需要确认--hive-conf的作用。这个参数允许用户传递Hive的配置属性,这些属性会在Sqoop与Hive交互时生效。例如,设置hive.exec.dynamic.partition.mode为非严格模式,或者指定字段分隔符,这些都可能是在导入数据到Hive时需要调整的参数。 然后,用户可能需要具体的例子来说明如何使用这个参数。比如,在Sqoop命令中加入--hive-conf hive.exec.dynamic.partition.mode=nonstrict,这样在创建Hive分区表时就可以使用动态分区。另一个例子是设置字段分隔符,确保导入的数据能被正确解析。 还要注意,--hive-conf可以多次使用,每次设置一个属性。这需要告诉用户正确的语法,避免他们在一个参数中设置多个属性而导致错误。比如,使用两个--hive-conf分别设置不同的配置项。 另外,用户可能容易混淆--hive-conf和--hive-import。需要明确说明,--hive-import是用于启用Hive导入的选项,而--hive-conf则是传递配置参数。两者可能需要一起使用,但各自有不同的作用。 可能还需要提醒用户一些常见的注意事项,比如配置项的有效性。不是所有的Hive配置都能在Sqoop中使用,有些可能在导入阶段不适用。建议用户参考Hive和Sqoop的官方文档,确认哪些参数是有效的。 最后,总结使用场景,比如动态分区、文件格式、分隔符设置、权限问题等。这样用户能更清楚在什么情况下应该使用--hive-conf参数,以及如何应用这些配置来解决实际问题。</think>在 Sqoop 命令中使用 `--hive-conf` 参数时,其核心作用是 **向 Hive 传递运行时配置参数**。以下是分步解析和使用场景说明: --- ### 一、参数作用 `--hive-conf <property=value>` 允许在 Sqoop 与 Hive 交互时: 1. **动态覆盖 Hive 配置**(如 `hive-site.xml` 中的默认值) 2. **控制 Hive 表创建行为**(如文件格式、压缩设置等) 3. **解决 Hive 与 Sqoop 数据传输的兼容性问题** --- ### 二、基础语法 ```bash sqoop import \ --connect jdbc:mysql://host/db \ --table source_table \ --hive-import \ # 必须与 --hive-conf 配合使用 --hive-conf property1=value1 \ # 单个配置参数 --hive-conf property2=value2 # 可多次使用 ``` --- ### 三、典型使用场景 #### 场景 1:设置动态分区模式 当导入数据到 Hive 动态分区表时: ```bash --hive-conf hive.exec.dynamic.partition.mode=nonstrict ``` #### 场景 2:自定义字段分隔符 覆盖 Hive 默认字段分隔符: ```bash --hive-conf hive.field.delim=, --hive-conf hive.serde2.row.delim=\n ``` #### 场景 3:指定文件格式 强制使用 Parquet 格式存储: ```bash --hive-conf hive.fileformat=Parquet --hive-conf hive.parquet.compression=SNAPPY ``` #### 场景 4:解决权限问题 设置 Hive 仓库目录权限: ```bash --hive-conf hive.warehouse.subdir.inherit.perms=true ``` --- ### 四、注意事项 1. **依赖关系**:必须与 `--hive-import` 参数同时使用 2. **优先级规则**:`--hive-conf` 的配置优先级高于 `hive-site.xml` 3. **参数验证**:不是所有 Hive 配置都适用于 Sqoop 上下文(例如执行引擎设置 `hive.execution.engine` 可能无效) --- ### 五、完整示例 ```bash sqoop import \ --connect jdbc:mysql://dbhost/sales \ --username user \ --password pass \ --table orders \ --hive-import \ --hive-database sales_db \ --hive-table orders_partitioned \ --hive-conf hive.exec.dynamic.partition=true \ --hive-conf hive.exec.dynamic.partition.mode=nonstrict \ --hive-conf hive.merge.mapfiles=false ``` --- 如果需要调试配置是否生效,可通过在 Hive 中执行 `SET property_name;` 验证参数值。建议结合 Hive 官方文档选择适用的配置项。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值