数仓用户行为数据分析

分层优点:复杂的东西可以简单化、解耦(屏蔽层作用)、提高复用、方便管理

SA 贴源  数据组织结构与源系统保持一致

shm 历史层  针对不同特征的数据做不同算法,目的都是为了得到一份完整的数据

PDM 明细层 做最细粒度的数据明细,最高扩展性和灵活性,企业级的数据标准,源系统之间的打通

BDM 业务层 针对集市经常放在一起用到的数据做提前预处理,做维度的横向拆合,来源的纵向拆合,形成业务大宽表

基础层  针对集市主题做定制化整合,部门级的数据标准

集市层  基础层和关系层基础上加工出基础原子指标

汇总层  集市层的原子指标基础上增加业务限定、统计周期、统计粒度计算出来的派生指标

报表、指标层  基础指标或派生指标的逻辑计算加工而成

埋点行为数据组成

公共字段

业务字段:埋点上报的字段

事件

"et": [ //事件 { "ett": "1506047605364", //客户端事件产生时间 "en": "display", //事件名称 启动和事件日志是根据事件名称的不同 "kv": { //事件结果,以 key-value 形式自行定义 "goodsid": "236", "action": "1", "extend1": "1", "place": "2", "category": "75" } } ]

项目经验总结

1.shell 中单引号和双引号的区别? ''不转义变量  “”转义变量

反引号 `执行引号中命令

2.tez优点:

可以将多个有依赖的作业(任务)组合成一个完整的DAG作业,只需一次读写HDFS,效率更高。

3.ods层:

启动日志表:只有一个字段line保存json

事件日志表:只有一个字段,按dt分区

4.自定义UDF,可以自己埋点打印日志,方便调试。

函数定义


public Text evaluate(Text input, int startIndex, int length) {
    // 在函数开始处打印日志
    System.out.println("Executing SubstringUDF...");
    
    // 打印输入参数
    System.out.println("Input: " + input.toString());
    System.out.println("Start index: " + startIndex);
    System.out.println("Length: " + length);
    
    // 执行子字符串操作
    String result = input.toString().substring(startIndex, startIndex + length);
    
    // 在函数结束处打印日志
    System.out.println("Substring: " + result);
    System.out.println("SubstringUDF execution completed.");
    
    // 返回结果
    return new Text(result);
}

打成jar包并注册

$ javac -cp /path/to/hive/lib/hive-exec-x.x.x.jar SubstringUDF.java
$ jar -cvf substringudf.jar SubstringUDF.class
$ hive
hive> ADD JAR /path/to/substringudf.jar;

使用

-- 创建测试表
CREATE TABLE employees (
  name STRING,
  salary INT
);

-- 插入测试数据
INSERT INTO employees VALUES
  ('John Doe', 5000),
  ('Jane Smith', 6000),
  ('Michael Johnson', 7000);

-- 使用自定义 UDF 函数获取员工姓名的子字符串
SELECT name, substring_udf(name, 1, 4) AS substring_name FROM employees;

输出结果

Executing SubstringUDF...
Input: John Doe
Start index: 1
Length: 4
Substring: John
SubstringUDF execution completed.

你可能感兴趣的:(数据分析,数据挖掘)