I know, i know 地球另一端有你陪我
一、数据开发 – DataWorks
1、创建表
1 从其他数据源中同步
MySQL 的话,本地因为没有那样的外网地址,所以需要额外购买阿里云的云数据库
2 手动创建表
一级主题、二级主题 类似数据仓库中的命名规范,不同表拥有类似父子关系
主键 此处查询的时候并不会考虑主键,只是做一个标记,不会做约束 只会检查是否存在重复
接着右键表导入数据,记得注意首行是否是数据,对应勾选
3、业务流程
1、手拖或者右键新建能够建立新的独立节点, 节点内部可以处理不同的任务例如数据的同步,或者表或视图的建立 2、倘若有参数,例如业务日期(当前时间 - 1)需要在参数栏中手动定义 3、每一个节点都可以有依赖(即上下游的箭头指向)和输出(被其他节点依赖) 建议手动添加依赖,有时自动添加会出错 输出的时候也可能错,会导致其他节点无法依赖到这个节点,也需要检查 头部的 root 节点,应为本质没有依赖关系,可以选择工作根节点作为上游
4、此处是设置定时任务 如果要设置的话,重跑属性是默认为空的,需要手动添加
二、运维中心
被提交的周期任务会被传至运维中心 1、补数据 倘若数据是按照日期进行分区,此处可以按照往期的日期,进行数据的重跑 前提条件是所有的基本数据是按照天来分区,并且数据都完整存在 本质可能就是将 bizdate 按照指定日期进行业务的再加载
三、数据服务
配置 API 接口,需要先创建 BasePath 即 URL,用于通过路径来定位 (此处会要求开通网关服务,同一一下协议即可)
1 向导模式生成 API 创建 API,此处无法选择 MaxCompute,因为从速度考虑,MaxCompute 并不适用这一场景,因此需要选择其他数据源 选择参数即依据怎样的条件进行查询 默认是等于,可以在右侧进行修改 也可以不选择请求参数,但是为了防止一次获取过多数据 需要在下面的返回参数中打开结果的分页显示,并加上三个页面相关的参数 (总页数,一页的数量,返回页)
2 脚本模式生成 API 也允许开发之使用 sql 语句来作为返回 请求参数需要写为 ${xxx} 系统会自动识别
四、连接 MaxCompute 的另两种方法
1、odpscmd 客户端
和 cmd 控制台类似 需要在下载对应的客户端 解压后再 conf 文件夹中配置对应参数,帮助文档中很清楚 接着可以在 bin 中打开脚本文件,打开控制台 本质是连接 MaxCompute 特点是在查询时。,会稍稍变快,尤其是在查询元数据时
2、MaxCompute Studio
需要在 IDEA 中下载对应插件,名称即为 MaxCompute Studio 接着就可以建立新的 MaxCompute Studio 项目(project) 首先依然需要连接 此处可以直接读取 cmd 客户端中的配置文件 连接好后,此处可以看到一些表的元数据等等 并且可以创建 MaxCompute SQL 脚本 内部功能和网页版的相同,可以写各种 SQL 语句
3、MaxCompute Java
创建项目时会发现还要另一个项目,MaxCompute Java 建立后,会发现内部一样有一个 pom 的插件配置文件,src 等等,类似 maven 之后可以向下选择不同的文件,可以满足绝大部分需求了 比如这里创建一个 UDF(自定义函数,一对一) 创建后会发现大框架已经被建立好,只需要按需修改对应的输入输入即可 写完后不需要手动打包上传,加载注册,只需要右键一键上传,写个函数名
五、行列转换(部分)
建表
CREATE TABLE IF NOT EXISTS test1
(
id STRING,
col1 STRING,
col2 STRING,
col3 STRING,
col4 STRING,
col5 STRING,
col6 STRING
) ;
数据
a,1,2,3,4,5,6
b,11,12,13,14,15,16
c,21,22,23,24,25,26
d,31,32,33,34,35,36
1 explode
能够将 array map struct 结构进行展开 但是只能存在展开的这一列,不能添加其他列
select
explode(ARRAY(col1,col2,col3,col4,col5,col6))
from test1
2 posexplode
能够在原本 explode 的基础上再添加一列索引,可以修改 但是依然只能存在展开的这一列,不能添加其他列
select concat(t1.indx * 2,'点') as (hour)
,t1.value
from(
select
posexplode(ARRAY(col1,col2,col3,col4,col5,col6)) as(indx,value)
from test1
) t1;
3 lateral view
侧视图,类似一种 join,一个匹配一组,可以在原表的基础上匹配一个 explode
select id
,concat(t1.indx * 2,'点') as (hour)
,value
from test1
lateral view
posexplode(ARRAY(col1,col2,col3,col4,col5,col6)) t1 as indx,value;
4 MaxCompute 自定义函数
新建项目 框架已经完全写好,只需要编写: 1)注解中的输入输出类型 2)process 中的方法体
import com.aliyun.odps.udf.ExecutionContext;
import com.aliyun.odps.udf.UDFException;
import com.aliyun.odps.udf.UDTF;
import com.aliyun.odps.udf.annotation.Resolve;
@Resolve({"*->string,bigint"})
public class hangliechange extends UDTF {
@Override
public void setup(ExecutionContext ctx) throws UDFException {
}
@Override
public void process(Object[] args) throws UDFException {
int i = 0;
for (Object arg : args) {
String hour = i + "时";
long value = Long.parseLong(arg.toString());
i += 2;
forward(hour,value);
}
}
@Override
public void close() throws UDFException {
}
}
一键提交 —— 亦可打包上传 提交 新建函数,类似注册,依然要保存和提交 正常使用
select id
,indx as hour
,value
from test1
lateral view
HANGLIECHANGE(col1,col2,col3,col4,col5,col6) t1 as indx,value;
5 Function Stutio 自定义函数
类似 MaxCompute Java,先打开菜单 新建代码工程 新建项目 内部和 Java 完全相同,粘贴一下
再提交,就可以直接使用
零碎
hive 中,选择表中字段的类型,并不会将数据进行格式化 ,而是怎么来怎么进去(表存储和结构无关)
带参数 ${} 的记得选择高级运行,否则参数不会被识别
运维中心中,需要点选上游节点 root,才能往下展开
|