2.项目数仓、项目工具

项目数仓     

   数仓(Data Warehouse)是指用于存储和管理企业数据的一种大型数据库系统,以支持企业的决策分析活动。它采用了ETL(抽取、转化、加载)等技术来集成和清洗数据,并提供了灵活的查询和报表功能,使得分析师和决策者可以更好地理解企业的业务情况和趋势。 

项目工具

 hue

进入hue

 

 操作hdfs

进入hdfs管理界面

 操作目录

增、删、改、查。

 操作文件

增、删、改、查。

操作hive

sqoop 重点重点重点

1 基本使用操作

如何查看  sqoop的 帮助文档

sqoop help

sqoop --help

2- 查询命令的参数有哪些?

sqoop list-databases --help

3- 查询mysql中所有的库有那些?

  

4- 查询mysql中scm中所有的表

sqoop list-tables \
--connect jdbc:mysql://hadoop01:3306/scm \
--username root \
--password 123456

 

2 数据全量导入操作

准备工作

create database test default character set utf8mb4 collate utf8mb4_unicode_ci;
use test;

create table emp
(
    id     int         not null
        primary key,
    name   varchar(32) null,
    deg    varchar(32) null,
    salary int         null,
    dept   varchar(32) null
);

INSERT INTO emp (id, name, deg, salary, dept) VALUES (1201, 'gopal', 'manager', 50000, 'TP');
INSERT INTO emp (id, name, deg, salary, dept) VALUES (1202, 'manisha', 'Proof reader', 50000, 'TP');
INSERT INTO emp (id, name, deg, salary, dept) VALUES (1203, 'khalil', 'php dev', 30000, 'AC');
INSERT INTO emp (id, name, deg, salary, dept) VALUES (1204, 'prasanth', 'php dev', 30000, 'AC');
INSERT INTO emp (id, name, deg, salary, dept) VALUES (1205, 'kranthi', 'admin', 20000, 'TP');

create table emp_add
(
    id     int         not null
        primary key,
    hno    varchar(32) null,
    street varchar(32) null,
    city   varchar(32) null
);

INSERT INTO emp_add (id, hno, street, city) VALUES (1201, '288A', 'vgiri', 'jublee');
INSERT INTO emp_add (id, hno, street, city) VALUES (1202, '108I', 'aoc', 'sec-bad');
INSERT INTO emp_add (id, hno, street, city) VALUES (1203, '144Z', 'pgutta', 'hyd');
INSERT INTO emp_add (id, hno, street, city) VALUES (1204, '78B', 'old city', 'sec-bad');
INSERT INTO emp_add (id, hno, street, city) VALUES (1205, '720X', 'hitec', 'sec-bad');

create table emp_conn
(
    id    int         not null
        primary key,
    phno  varchar(32) null,
    email varchar(32) null
);

INSERT INTO emp_conn (id, phno, email) VALUES (1201, '2356742', 'gopal@tp.com');
INSERT INTO emp_conn (id, phno, email) VALUES (1202, '1661663', 'manisha@tp.com');
INSERT INTO emp_conn (id, phno, email) VALUES (1203, '8887776', 'khalil@ac.com');
INSERT INTO emp_conn (id, phno, email) VALUES (1204, '9988774', 'prasanth@ac.com');
INSERT INTO emp_conn (id, phno, email) VALUES (1205, '1231231', 'kranthi@tp.com');

在mysql中创建3张表 

5.1 需求一: 将 mysql中的emp表中数据导入到HDFS中

方式一 不指定导入位置

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table emp 

 方式二 指定导入位置

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table emp \
--delete-target-dir \
--target-dir /sqoop_works/emp

基础

实现 

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table emp \
--delete-target-dir \
--target-dir /sqoop_works/emp

 方式三 设置其mapTask的数量呢

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table emp \
--delete-target-dir \
--target-dir /sqoop_works/emp \
--split-by id \
-m 1 

基础

 方式四 设置字段之间的分割符

基础知识

--fields-terminated-by

实现

5.2 需求二 将 emp_add 这个表的全部数据导入到HIVE的对应表中 

第一步: 在HIVE中创建目标表

create database if not exists db_1;

create table if not exists db_1.emp_add(
    id int,
    hno string,
    street string,
    city string
)
row format delimited fields terminated by '\t' stored as orc;

 第二步: 编写 sqoop命令 完成数据导入操作

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table emp_add \
--fields-terminated-by '\t' \
--hcatalog-database 'db_1' \
--hcatalog-table 'emp_add' \
-m 1 

 第三步: 在datagrip中测试

注意 

3 数据条件导入数据 重点

方式一:  通过 where条件的方式, 将部分数据导入到HDFS中

1- 以 emp为例, 在这个表中, 新增一条数据, 尝试将这一条数据导入到HDFS中

INSERT INTO  test.emp VALUES(1206,'zhangsan','bigdata dev','30000','TP');

 2- 通过 sqoop实现数据条件导入

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table emp \
--where 'id > 1205' \
--delete-target-dir \
--target-dir /sqoop_works/emp_1 \
--fields-terminated-by  '|' \
-m 1

 注意: --where 'xxx=yyy' 条件必须加单引号 

方式二: 通过 SQL的方式, 将部分数据导入到HDFS中:

1- 以 emp为例, 在这个表中, 新增一条数据, 尝试将这一条数据导入到HDFS中

INSERT INTO  test.emp VALUES(1207,'lisi','bigdata dev','50000','TP');

 2- 使用sqoop条件导入数据: 采用 SQL形式

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--query 'select * from emp where id > 1206 and $CONDITIONS' \
--delete-target-dir \
--target-dir /sqoop_works/emp_2 \
--fields-terminated-by  '|' \
-m 1

注意 

	1- 当使用 --query 方式的时候, 不允许在使用 --table, 因为 SQL中已经明确需要导入那个表的数据
	2- 当使用 --query 方式的时候, 编写的SQL语句必须添加where条件, 条件最后必须要跟 $CONDITIONS, 如果使用双引号包裹SQL, $前面必须加一个 \ 进行转义操作, 当如果没有条件的时候,建议写成: where 1=1 and $CONDITIONS

如何导入HIVE呢?  以其中SQL为例

1- 先在mysql中, 新增一条数据:

INSERT INTO  test.emp_add VALUES(1206,'412Q','aoc','sec-bad');

2- 使用 sqoop 完成导入操作

sqoop import \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--query 'select * from emp_add where id = 1206 and $CONDITIONS' \
--hcatalog-database 'day03_xls' \
--hcatalog-table 'emp_add' \
--fields-terminated-by  '\t' \
-m 1

4 数据全量导出操作 重点

需求: 将HIVE中 emp_add表中所有的数据全量导出MySQL中

步骤一:  在MySQL中创建目标表

CREATE TABLE test.tb_emp_add_hive2mysql (
	id INT,
	hno VARCHAR(20),
	street VARCHAR(20),
	city VARCHAR(20)
);

步骤二: 执行sqoop导出操作

sqoop export \
--connect jdbc:mysql://hadoop01:3306/test \
--username root \
--password 123456 \
--table tb_emp_add_hive2mysql \
--fields-terminated-by  '\t' \
--hcatalog-database 'db_1' \
--hcatalog-table 'emp_add' \
-m 1

注意

5 相关参数

 -- null-string  和  --null-non-string 主要用于将数据源中 NULL数据,转换为 空

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值