5.9 ETL语法

ETL是Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,在HybridDB for MySQL数据库也支持这类语句操作。总体上,HybridDB支持的ETL分为两类:实时ETL和批量ETL。

1. 实时ETL

实时ETL是指在进行ETL操作过程中,目的端的数据实时变化,直至整个ETL完成。实时ETL新产生的数据是追加到目的端的。

特别注明: 目的端有可能是维度表,事实表(整体),事实表的某个分区(二级分区);另外实时ETL的实时指的是目的端,而不是源端。 在做ETL时源端理论上应该不变,否则会导致不确定的结果。

1) INSERT INTO SELECT

insert into select 用于将源头数据(来源一个select查询)流式写入到目的端。语法定义为:

INSERT INTO tbl_name [(col_name,...)]
SELECT select_statement FROM from_statement
  • 目标表tbl_name必须提前创建好
  • select后面可以是任何select/view语句
  • 如果目的端已经有数据,本次会追加写入
  • 如果数据有重复(主键冲突),会忽略掉当前行

举例如下

# 一级分区实时ETL
insert into dst select * from src

# 二级级分区实时ETL
insert into dst select * from src where src.partition = 20170101
2) REPLACE INTO SELECT

语法定义

REPLACE INTO tbl_name [(col_name,...)]
SELECT select_statement FROM from_statement
  • 目标表tbl_name必须提前创建好
  • select后面可以是任何select/view语句
  • 如果目的端已经有数据,本次会追加写入
  • 如果数据有重复(主键冲突),会覆盖写入新行

2. 批量ETL

批量ETL是指在进行ETL过程中,目地端数据不可见,直到整个ETL完成后才批量可见。批量ETL新产生的数据会完全覆盖掉之前的目的端数据(如有); 在ETL之前,原来的数据依然可以查询,ETL完成后,一键切换上线服务。

特别注明: 目的端有可能是维度表,事实表(整体),事实表的某个分区(二级分区)

1) INSERT OVERWRITE INTO SELECT

语法定义

INSERT OVERWRITE INTO tbl_name [(col_name,...)]
SELECT select_statement FROM from_statement
  • 目的表tbl_name必须提前创建好
  • select后面可以是任何select/view语句
  • 如果目的端已经有数据,本次写入完成之前不会影响原来数据, 写入完成后一键切换
  • 如果数据有重复(主键冲突),会忽略写入新行
2) REPLACE OVERWRITE INTO SELECT

暂不支持

results matching ""

    No results matching ""