1. 入门

安装Groovy,新建Groovy项目

package com.llh.test

class GroovyTest {

    static void main(String[] args) {
        println "hello world"
        println(geBigDecimal())
        System.out.println("这种方式也支持")
        def def001 = getDef()
        println(def001.isBigDecimal())

        //GString类型
        def testName = "call me"
        //GString类型,Groovy特有
        def text = "Hello : ${testName}"
        println testName.toString()
        println text.toString()

        //多行字符串保留格式
        def mail = '''\
       abc
        efg
        '''
        println(mail)

        //填充
        def str = "groovy hello"
        println str.center(14, "R")
        println str.padLeft(14, "L")
        println str.padRight(14, "0")

        def str2 = "G"
        def str3 = "g"
        //比较unicode码
        println str3 > str2
        //比较字符串
        println str3 <=> str2

        //字符串相减
        println str - str3

//        switch...case支持各种类型
        switch ("abc") {
            case "ll":
                println "ll"
                break
            case "ABC":
                println "123"
                break
            default: println("456")
        }

        //范围循环
        def sum = 0
        for (i in 0..9) {
            sum += i
            println(sum)

        }

        for (i in ["张三": 23, "lucy": 19, "Bob": 30]) {
            print(i.key)
            sum += i.value
        }

    }

    static def getDef() {
        return "中文"
    }

    /**
     * 获取字符串
     * @return
     */
    static String getString() {
        return "1231231"
    }

    static Integer getInteger() {
        return 123123
    }

    static Long getLong() {
        //注释
        /*
        注释
         */
        return 123123123123L
    }

    static Double getDouble() {
        return 0.123123123123
    }

    static Float getFloat() {
        return 0.123123123123
    }

    static BigDecimal geBigDecimal() {
        return 123
    }
}

1.1. Hive/Doris

1.1.1. hive是什么

hive基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,提供类sql查询功能

基本语法

show
create table vts_llh_dwd.first_test;
show
create table vts_llh_dwd.first_test;
use
vts_llh_dwd;
create
database if not exists vts_llh_dwd;

use
vts_llh_dwd;

drop table if exists first_test;
create table if not exists first_test
(
    id
    int
    comment
    '编号',
    name
    string
    comment
    '姓名'
) comment '第一张测试表'
    TBLPROPERTIES
(
    'author' =
    'llh',
    'desc' =
    '第一个测试表',
    'remark' =
    '备注信息'
);
alter table vts_llh_dwd.first_test
    add columns (etl_update_time string comment '更新时间');
show
tables;

select *
from vts_llh_dwd.first_test limit 10;

直接使用hadoop所面临的问题

  • 人员学习成本太高
  • 项目周期要求太短
  • MapReduce实现复杂查询逻辑开发难度太大

1.2. 数据仓库分层

数仓的分层的每一层都有自己的职责,同时都是基于下一层或者下面多层做数据处理之后的结果

1.2.1. ODS

  1. 贴源层,接近数据源的一层,数据最原始,最真实未经太多处理
  2. 还起到一个数据备份作用,特殊行业,ODS层数据甚至会保留一年甚至多年
  3. 日志数据估算,也尤为重要,磁盘一般需要保留30%缓冲空间,数据本身可以做压缩,数仓还要做分层,数据本身存储还会有备份机制(HDFS/Kafka等框架)
  4. ODS层也并不意味着一定就是未经任何处理的数据,企业级项目,因为真实环境可能存在采集错误,bug,网络等问题,会造成原始数据存在问题
    • 字段缺失
    • 数据字段不统一
    • 格式错误
    • 数据来源混乱
    • 数据类型不易,如json,xml,text等
  5. 一般企业级ODS会对原始数据,做一些基本处理
    • 数据来源区分
    • 按时间分区存储,按天,年,月,日
    • 基本数据处理,格式错误丢弃,关键信息丢失的过滤
    • 当然,DWD层也是可以做这一层处理优化,关键看公司技术规范
  6. ODS层建表时,如果时hive进行处理,一般建外部表
    • hive的外部表,相对的是业务表
    • 外部表存放数据文件可以不是在hive的hdfs默认位置,hive对应表删除时,对应数据文件并不会被删除,这样可以防止误操作
    • 业务表则相反,数据文件存放在hive对应的默认位置,表删除对应文件也会被删除
    • 大数据开发,使用hive时,一般都是用外部表

1.2.2. DWD

  1. DWD又叫数据明细表,很多时候存储的是事实表为主
  2. 在DWD层,会有ETL(extract transform load) 提取转换加载处理,逻辑较复杂,用hive一般无法满足要求,这些逻辑一般是编写代码实现,使用脚本进行周期性调用
    1. 筛选字段,去除废弃,格式错误,丢失关键字段的信息
    2. 数据规范化,可能不同业务不同来源的数据类型空值不同,这时候会在DWD层做抹平。如:boolean类型有true/fals,1/0的;字符串代表空的有""/null的;日期格式差异更大的
  3. DWD存储数据,一般就是维度表,事实表,实体表等数据
    1. 维度表,一些维度信息,一般直接存储维度信息,表一般不会很大
    2. 事实表,就是表述一些事实信息,如订单,收藏,购物车这些,数据量大,一般存储维度主键,具体维度值在后续处理分析时再临时关联
    3. 实体表,类似javabean,用来描述信息,如优惠券表,促销表,内部就是描述信息,大部分时全量导入
  4. 事实表中数据,一般不是所有维度都按照维度主键做信息存储
    1. 数仓理论中,去除数据冗余的思想,一般会将维度信息单独存放,其他表要用时,记录对应维度的id。
    2. 即使维度数据变化,也不会影响到多个表,降低了数据冗余
  5. 做数据映射
    1. 如将GPS经纬度转换为省市区详细地址
    2. ip地址也转换位省市区详细地址
    3. 将时间转换为年,月,日甚至周,季度维度信息

1.2.3. DWS

  1. 数据服务层,数据聚合层,为更上层的ADS层或者直接面向需求方服务
  2. DWS建模,一般用主题建模,维度建模等方式
    1. 主题建模,围绕某一个业务主体进行数据建模,将相关数据抽离提取
      • 流量绘画按照天,月聚合
      • 每日新用户进行聚合
      • 每日活跃用户聚合 2.维度建模,根据业务需要,提前将后续数据查询处理需要的维度数据抽离出来,方便后续查询用
      • 运营位维度数据聚合
      • 渠道拉新维度数据聚合

1.2.4. ADS

  1. 应用服务层,直接对接OLAP分析,或者业务层数据调用接口
  2. 最顶层,一般是结果类型数据,可以直接展示的数据,数据抽离分析成都最高的一层数据
  3. 需求最明确的一层,接口相对最固化
Copyright & copy lviter@163.com            updated 2024-02-06 09:54:56

results matching ""

    No results matching ""