Hive 分区表的数据导入Doris

##数据格式是:默认,分区字段是:day

第一步:创建Hive表
CREATE TABLE `ods_demo_detail`(
  `id` string, 
  `store_id` string, 
  `company_id` string, 
  `tower_id` string, 
  `commodity_id` string, 
  `commodity_name` string, 
  `commodity_price` double, 
  `member_price` double, 
  `cost_price` double, 
  `unit` string, 
  `quantity` double, 
  `actual_price` double
)
PARTITIONED BY (day string)
row format delimited fields terminated by ','
lines terminated by '\n';

第二步:往Hive写入测试数据
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
insert into table ods_demo_detail partition (day) 
select 'liuyage1','','','','','','','','','','','','2022-04-01'
union all 
select 'liuyage2','','','','','','','','','','','','2022-05-01' 
union all 
select 'liuyage3','','','','','','','','','','','','2022-05-01' 
union all 
select 'liuyage4','','','','','','','','','','','','2022-05-01' 

第三步:查看Hive表有数据没有
select * from ods_demo_detail;

第四步:创建Doris表,用的-- Range Partition是范围分区,左闭右开
CREATE TABLE `doris_ods_test_detail` (
  `rq` date NULL,
  `id` varchar(32) NOT NULL,
  `store_id` varchar(32) NULL,
  `company_id` varchar(32) NULL,
  `tower_id` varchar(32) NULL,
  `commodity_id` varchar(32) NULL,
  `commodity_name` varchar(500) NULL,
  `commodity_price` decimal(10, 2) NULL,
  `member_price` decimal(10, 2) NULL,
  `cost_price` decimal(10, 2) NULL,
  `unit` varchar(50) NULL,
  `quantity` int(11) NULL,
  `actual_price` decimal(10, 2) NULL
) ENGINE=OLAP
UNIQUE KEY(`rq`, `id`, `store_id`)
PARTITION BY RANGE(`rq`)
(
PARTITION P_202204 VALUES [('2022-01-01'),('2022-12-31'))
)
DISTRIBUTED BY HASH(`store_id`) BUCKETS 1
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "MONTH",
"dynamic_partition.start" = "-2147483648",
"dynamic_partition.end" = "2",
"dynamic_partition.prefix" = "P_",
"dynamic_partition.buckets" = "1",
"in_memory" = "false",
"storage_format" = "V2"
);

第五步:开始导入数据
 LOAD LABEL broker_load_20220104                                                                                                                                                                                                                                                                   
 (                                                                                                                                                                                                                                                                                                              
     DATA INFILE("hdfs://192.168.62.134:9000/user/hive/warehouse/test.db/ods_demo_detail/*/*")                                                                                                                                                                                                     
     INTO TABLE doris_ods_test_detail                                                                                                                                                                                                                                                                           
     COLUMNS TERMINATED BY ","                                                                                                                                                                                                                                                                                  
   (id,store_id,company_id,tower_id,commodity_id,commodity_name,commodity_price,member_price,cost_price,unit,quantity,actual_price)                                                                                                                                                                             
     COLUMNS FROM PATH AS (`day`)                                                                                                                                                                                                                                                                               
    SET                                                                                                                                                                                                                                                                                                         
    (rq = str_to_date(`day`,'%Y-%m-%d'),id=id,store_id=store_id,company_id=company_id,tower_id=tower_id,commodity_id=commodity_id,commodity_name=commodity_name,commodity_price=commodity_price,member_price=member_price,cost_price=cost_price,unit=unit,quantity=quantity,actual_price=actual_price)          
     )                                                                                                                                                                                                                                                                                                          
 WITH BROKER "broker_name"                                                                                                                                                                                                                                                                                      
     (                                                                                                                                                                                                                                                                                                          
       "username" = "root",                                                                                                                                                                                                                                                                  
       "password" = ""                                                                                                                                                                                                                                                                                          
     )                                                                                                                                                                                                                                                                                                          
 PROPERTIES                                                                                                                                                                                                                                                                                                     
 (                                                                                                                                                                                                                                                                                                              
     "timeout"="1200"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 );                                                                                                                                                                                                                                                                                                             

第六步:查看导入任务进度
show load order by createtime desc limit 1\G;
第七步:查看Doris结果表
select * from doris_ods_test_detail;

测试结果

 

Broker Load

Broker load 是一个异步的导入方式,支持的数据源取决于 Broker 进程支持的数据源。

因为 Doris 表里的数据是有序的,所以 Broker load 在导入数据的时是要利用doris 集群资源对数据进行排序,想对于 Spark load 来完成海量历史数据迁移,对 Doris 的集群资源占用要比较大,这种方式是在用户没有 Spark 这种计算资源的情况下使用,如果有 Spark 计算资源建议使用 Spark load

用户需要通过 MySQL 协议 创建 Broker load 导入,并通过查看导入命令检查导入结果。

适用场景

  • 源数据在 Broker 可以访问的存储系统中,如 HDFS。
  • 数据量在 几十到百GB 级别。

基本原理

用户在提交导入任务后,FE 会生成对应的 Plan 并根据目前 BE 的个数和文件的大小,将 Plan 分给 多个 BE 执行,每个 BE 执行一部分导入数据。

BE 在执行的过程中会从 Broker 拉取数据,在对数据 transform 之后将数据导入系统。所有 BE 均完成导入,由 FE 最终决定导入是否成功。

                 +
                 | 1. user create broker load
                 v
            +----+----+
            |         |
            |   FE    |
            |         |
            +----+----+
                 |
                 | 2. BE etl and load the data
    +--------------------------+
    |            |             |
+---v---+     +--v----+    +---v---+
|       |     |       |    |       |
|  BE   |     |  BE   |    |   BE  |
|       |     |       |    |       |
+---+-^-+     +---+-^-+    +--+-^--+
    | |           | |         | |
    | |           | |         | | 3. pull data from broker
+---v-+-+     +---v-+-+    +--v-+--+
|       |     |       |    |       |
|Broker |     |Broker |    |Broker |
|       |     |       |    |       |
+---+-^-+     +---+-^-+    +---+-^-+
    | |           | |          | |
+---v-+-----------v-+----------v-+-+
|       HDFS/BOS/AFS cluster       |
|                                  |
+----------------------------------+

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值