数仓4

1.数据仓库建模 1.1 ODS 层 ODS 层:原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理 1.HDFS 用户行为数据(flume-Kafka-flume-HDFS)

1.数据仓库建模

1.1 ODS 层

ODS 层:原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理

1.HDFS 用户行为数据(flume-Kafka-flume-HDFS)

一张表,按天分区

2.业务数据(sqoop-MySQL-HDFS)

参照 MySQL 建表,结构字段同 MySQL,按天分区

1.2 DIM 层和 DWD 层

DWD 层:对 ODS 层数据进行清洗(去除空值,脏数据,超过极限范围的数据)、脱敏等。 保存业务事实明细,一行信息代表一次业务行为,例如一次下单。 DIM 层:维度层,保存维度数据,主要是对业务事实的描述信息,例如何人,何时,何地等

1.3 DWS 层与 DWT 层

DWS 层和 DWT 层统称宽表层,这两层的设计思想大致相同

DWS 和 DWT 层的区别:DWS 层存放的所有主题对象当天的汇总行为,例如每个地区当天的下单次数,下单金额等,DWT 层存放的是所有主题对象的累积行为,例如每个地区最近 7 天(15 天、30 天、60 天)的下单次数、下单金额等。

1.4 ADS 层

对电商系统各大主题指标分别进行分析。

2.数仓环境搭建

2.1 Hive 环境搭建

2.1.1 Hive 简介

Hive on Spark:Hive 既作为存储元数据又负责 SQL 的解析优化,语法是 HQL 语法,执行引擎变成了 Spark,Spark 负责采用 RDD 执行。

Spark on Hive : Hive 只作为存储元数据,Spark 负责 SQL 解析优化,语法是 Spark SQL 语法,Spark 负责采用 RDD 执行。

2.1.2 Hive on Spark 配置

  1. 在 Hive 所在节点部署 Spark

    (1)Spark 官网下载 jar 包地址:

    http://spark.apache.org/downloads.html

    (2)上传并解压解压 spark-3.0.0-bin-hadoop3.2.tgz

     [duan@hadoop102 software]$ tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/
     [duan@hadoop102 software]$ mv /opt/module/spark-3.0.0-bin-hadoop3.2 /opt/module/spark

    (3)配置 SPARK_HOME 环境变量

     [duan@hadoop102 software]$ sudo vim /etc/profile.d/my_env.sh

    添加如下内容

     # SPARK_HOME
     export SPARK_HOME=/opt/module/spark
     export PATH=$PATH:$SPARK_HOME/bin

    source 使其生效

     [duan@hadoop102 software]$ source /etc/profile.d/my_env.sh
  2. 在 hive 中创建 spark 配置文件

 [duan@hadoop102 software]$ vim /opt/module/hive/conf/spark-defaults.conf

添加如下内容(在执行任务时,会根据如下参数执行

 spark.master                               yarn
 spark.eventLog.enabled                   true
 spark.eventLog.dir                        hdfs://hadoop102:8020/spark-history
 spark.executor.memory                    1g
 spark.driver.memory                    1g

在 HDFS 创建如下路径,用于存储历史日志

 [duan@hadoop102 software]$ hadoop fs -mkdir /spark-history
  1. 向 HDFS 上传 Spark 纯净版 jar 包

说明 1:由于 Spark3.0.0 非纯净版默认支持的是 hive2.3.7 版本,直接使用会和安装的 Hive3.1.2 出现兼容性问题。所以采用 Spark 纯净版 jar 包,不包含 hadoop 和 hive 相关依赖,避免冲突。

说明 2:Hive 任务最终由 Spark 来执行,Spark 任务资源分配由 Yarn 来调度,该任务有可能被分配到集群的任何一个节点。所以需要将 Spark 的依赖上传到 HDFS 集群路径,这样集群中任何一个节点都能获取到。

(1)上传并解压 spark-3.0.0-bin-without-hadoop.tgz

 [duan@hadoop102 software]$ tar -zxvf /opt/software/spark/spark-3.0.0-bin-without-hadoop.tgz

(2)上传 Spark 纯净版 jar 包到 HDFS

[duan@hadoop102 software]$ hadoop fs -mkdir /spark-jars
[duan@hadoop102 software]$ hadoop fs -put ./* /spark-jars
  1. 修改 hive-site.xml 文件

    [duan@hadoop102 ~]$ vim /opt/module/hive/conf/hive-site.xml

    添加如下内容

    <!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
    <property>
        <name>spark.yarn.jars</name>
        <value>hdfs://hadoop102:8020/spark-jars/*</value>
    </property>
      
    <!--Hive执行引擎-->
    <property>
        <name>hive.execution.engine</name>
        <value>spark</value>

2.1.3 HIve on Spark 测试

(1)启动 hive 客户端

[duan@hadoop102 hive]$ bin/hive

(2)创建一张测试表

hive (default)> create table student(id int, name string);

(3)通过 insert 测试效果

hive (default)> insert into table student values(1,'abc');

2.2 Yarn 配置

增加 ApplicationMaster 资源比例

容量调度器对每个资源队列中同时运行的 Application Master 占用的资源进行了限制,该限制通过 yarn.scheduler.capacity.maximum-am-resource-percent 参数实现,其默认值是 0.1,表示每个资源队列上 Application Master 最多可使用的资源为该队列总资源的 10%,目的是防止大部分资源都被 Application Master 占用,而导致 Map/Reduce Task 无法执行。

生产环境该参数可使用默认值。但学习环境,集群资源总数很少,如果只分配 10%的资源给 Application Master,则可能出现,同一时刻只能运行一个 Job 的情况,因为一个 Application Master 使用的资源就可能已经达到 10%的上限了。故此处可将该值适当调大。

(1)在 hadoop102 的/opt/module/hadoop-3.1.3/etc/hadoop/capacity-scheduler.xml 文件中 修改 如下参数值

[duan@hadoop102 hadoop]$ vim capacity-scheduler.xml
<property>
    <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
    <value>0.8</value>
</property

(2)分发 capacity-scheduler.xml 配置文件

[duan@hadoop102 hadoop]$ xsync capacity-scheduler.xml

(3)关闭正在运行的任务,重新启动 yarn 集群

[duan@hadoop103 hadoop-3.1.3]$ sbin/stop-yarn.sh
[duan@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh

2.3 数仓开发环境

  1. 启动 HiveServer2

    测试环境中前台运行

    [duan@hadoop102 hive]$ hiveserver2

    生产环境后台运行

    [duan@hadoop102 hive]$ hiveserver2 &

    新增权限控制

    <property>
        <name>hadoop.proxyuser.duan.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.duan.groups</name>
        <value>*</value>
    </property>

3. 数仓正式搭建

3.1 ODS 层——用户行为数据

分区规划

image-20250509101831083

数据装载

image-20250509101841836

  1. 创建日志表

drop table if exists ods_log;
CREATE EXTERNAL TABLE ods_log (`line` string)
PARTITIONED BY (`dt` string) -- 按照时间创建分区
STORED AS -- 指定存储方式,读数据采用LzoTextInputFormat;
 INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
 OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/warehouse/gmall/ods/ods_log' -- 指定数据在hdfs上的存储位置
;
  1. 日志数据加载脚本

(1)在 hadoop102 的/home/duan/bin 目录下创建脚本

vim hdfs_to_ods_log.sh

(2)编写以下内容

#!/bin/bash

# 定义变量方便修改,数据库名称
APP=gmall

# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n "$1" ] ;then
   do_date=$1
else 
   do_date=`date -d "-1 day" +%F`
fi 

echo ================== 日志日期为 $do_date ==================
sql="
load data inpath '/origin_data/$APP/log/topic_log/$do_date' into table ${APP}.ods_log partition(dt='$do_date');
"

hive -e "$sql"

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /warehouse/$APP/ods/ods_log/dt=$do_date

(3)权限

chmod 777 hdfs_to_ods_log.sh

(4)执行

hdfs_to_ods_log.sh 2020-06-14

3.2 ODS 层——业务数据

分区规划

image-20250509101801456

数据装载

image-20250509101814317

  1. 创建表

  2. 数据装载

    第一天全量同步,后面根据表的策略进行同步

  • 首日装载脚本——上线第一天

    (1)在/home/duan/bin 目录下创建脚本 hdfs_to_ods_db_init.sh

    vim hdfs_to_ods_db_init.sh
    #!/bin/bash
    
    APP=gmall
    
    if [ -n "$2" ] ;then
       do_date=$2
    else 
       echo "请传入日期参数"
       exit
    fi 
    
    ods_order_info=" 
    load data inpath '/origin_data/$APP/db/order_info/$do_date' OVERWRITE into table ${APP}.ods_order_info partition(dt='$do_date');"
    
    ods_order_detail="
    load data inpath '/origin_data/$APP/db/order_detail/$do_date' OVERWRITE into table ${APP}.ods_order_detail partition(dt='$do_date');"
    
    ods_sku_info="
    load data inpath '/origin_data/$APP/db/sku_info/$do_date' OVERWRITE into table ${APP}.ods_sku_info partition(dt='$do_date');"
    
    ods_user_info="
    load data inpath '/origin_data/$APP/db/user_info/$do_date' OVERWRITE into table ${APP}.ods_user_info partition(dt='$do_date');"
    
    ods_payment_info="
    load data inpath '/origin_data/$APP/db/payment_info/$do_date' OVERWRITE into table ${APP}.ods_payment_info partition(dt='$do_date');"
    
    ods_base_category1="
    load data inpath '/origin_data/$APP/db/base_category1/$do_date' OVERWRITE into table ${APP}.ods_base_category1 partition(dt='$do_date');"
    
    ods_base_category2="
    load data inpath '/origin_data/$APP/db/base_category2/$do_date' OVERWRITE into table ${APP}.ods_base_category2 partition(dt='$do_date');"
    
    ods_base_category3="
    load data inpath '/origin_data/$APP/db/base_category3/$do_date' OVERWRITE into table ${APP}.ods_base_category3 partition(dt='$do_date'); "
    
    ods_base_trademark="
    load data inpath '/origin_data/$APP/db/base_trademark/$do_date' OVERWRITE into table ${APP}.ods_base_trademark partition(dt='$do_date'); "
    
    ods_activity_info="
    load data inpath '/origin_data/$APP/db/activity_info/$do_date' OVERWRITE into table ${APP}.ods_activity_info partition(dt='$do_date'); "
    
    ods_cart_info="
    load data inpath '/origin_data/$APP/db/cart_info/$do_date' OVERWRITE into table ${APP}.ods_cart_info partition(dt='$do_date'); "
    
    ods_comment_info="
    load data inpath '/origin_data/$APP/db/comment_info/$do_date' OVERWRITE into table ${APP}.ods_comment_info partition(dt='$do_date'); "
    
    ods_coupon_info="
    load data inpath '/origin_data/$APP/db/coupon_info/$do_date' OVERWRITE into table ${APP}.ods_coupon_info partition(dt='$do_date'); "
    
    ods_coupon_use="
    load data inpath '/origin_data/$APP/db/coupon_use/$do_date' OVERWRITE into table ${APP}.ods_coupon_use partition(dt='$do_date'); "
    
    ods_favor_info="
    load data inpath '/origin_data/$APP/db/favor_info/$do_date' OVERWRITE into table ${APP}.ods_favor_info partition(dt='$do_date'); "
    
    ods_order_refund_info="
    load data inpath '/origin_data/$APP/db/order_refund_info/$do_date' OVERWRITE into table ${APP}.ods_order_refund_info partition(dt='$do_date'); "
    
    ods_order_status_log="
    load data inpath '/origin_data/$APP/db/order_status_log/$do_date' OVERWRITE into table ${APP}.ods_order_status_log partition(dt='$do_date'); "
    
    ods_spu_info="
    load data inpath '/origin_data/$APP/db/spu_info/$do_date' OVERWRITE into table ${APP}.ods_spu_info partition(dt='$do_date'); "
    
    ods_activity_rule="
    load data inpath '/origin_data/$APP/db/activity_rule/$do_date' OVERWRITE into table ${APP}.ods_activity_rule partition(dt='$do_date');" 
    
    ods_base_dic="
    load data inpath '/origin_data/$APP/db/base_dic/$do_date' OVERWRITE into table ${APP}.ods_base_dic partition(dt='$do_date'); "
    
    ods_order_detail_activity="
    load data inpath '/origin_data/$APP/db/order_detail_activity/$do_date' OVERWRITE into table ${APP}.ods_order_detail_activity partition(dt='$do_date'); "
    
    ods_order_detail_coupon="
    load data inpath '/origin_data/$APP/db/order_detail_coupon/$do_date' OVERWRITE into table ${APP}.ods_order_detail_coupon partition(dt='$do_date'); "
    
    ods_refund_payment="
    load data inpath '/origin_data/$APP/db/refund_payment/$do_date' OVERWRITE into table ${APP}.ods_refund_payment partition(dt='$do_date'); "
    
    ods_sku_attr_value="
    load data inpath '/origin_data/$APP/db/sku_attr_value/$do_date' OVERWRITE into table ${APP}.ods_sku_attr_value partition(dt='$do_date'); "
    
    ods_sku_sale_attr_value="
    load data inpath '/origin_data/$APP/db/sku_sale_attr_value/$do_date' OVERWRITE into table ${APP}.ods_sku_sale_attr_value partition(dt='$do_date'); "
    
    ods_base_province=" 
    load data inpath '/origin_data/$APP/db/base_province/$do_date' OVERWRITE into table ${APP}.ods_base_province;"
    
    ods_base_region="
    load data inpath '/origin_data/$APP/db/base_region/$do_date' OVERWRITE into table ${APP}.ods_base_region;"
    
    case $1 in
        "ods_order_info"){
            hive -e "$ods_order_info"
        };;
        "ods_order_detail"){
            hive -e "$ods_order_detail"
        };;
        "ods_sku_info"){
            hive -e "$ods_sku_info"
        };;
        "ods_user_info"){
            hive -e "$ods_user_info"
        };;
        "ods_payment_info"){
            hive -e "$ods_payment_info"
        };;
        "ods_base_category1"){
            hive -e "$ods_base_category1"
        };;
        "ods_base_category2"){
            hive -e "$ods_base_category2"
        };;
        "ods_base_category3"){
            hive -e "$ods_base_category3"
        };;
        "ods_base_trademark"){
            hive -e "$ods_base_trademark"
        };;
        "ods_activity_info"){
            hive -e "$ods_activity_info"
        };;
        "ods_cart_info"){
            hive -e "$ods_cart_info"
        };;
        "ods_comment_info"){
            hive -e "$ods_comment_info"
        };;
        "ods_coupon_info"){
            hive -e "$ods_coupon_info"
        };;
        "ods_coupon_use"){
            hive -e "$ods_coupon_use"
        };;
        "ods_favor_info"){
            hive -e "$ods_favor_info"
        };;
        "ods_order_refund_info"){
            hive -e "$ods_order_refund_info"
        };;
        "ods_order_status_log"){
            hive -e "$ods_order_status_log"
        };;
        "ods_spu_info"){
            hive -e "$ods_spu_info"
        };;
        "ods_activity_rule"){
            hive -e "$ods_activity_rule"
        };;
        "ods_base_dic"){
            hive -e "$ods_base_dic"
        };;
        "ods_order_detail_activity"){
            hive -e "$ods_order_detail_activity"
        };;
        "ods_order_detail_coupon"){
            hive -e "$ods_order_detail_coupon"
        };;
        "ods_refund_payment"){
            hive -e "$ods_refund_payment"
        };;
        "ods_sku_attr_value"){
            hive -e "$ods_sku_attr_value"
        };;
        "ods_sku_sale_attr_value"){
            hive -e "$ods_sku_sale_attr_value"
        };;
        "ods_base_province"){
            hive -e "$ods_base_province"
        };;
        "ods_base_region"){
            hive -e "$ods_base_region"
        };;
        "all"){
            hive -e "$ods_order_info$ods_order_detail$ods_sku_info$ods_user_info$ods_payment_info$ods_base_category1$ods_base_category2$ods_base_category3$ods_base_trademark$ods_activity_info$ods_cart_info$ods_comment_info$ods_coupon_info$ods_coupon_use$ods_favor_info$ods_order_refund_info$ods_order_status_log$ods_spu_info$ods_activity_rule$ods_base_dic$ods_order_detail_activity$ods_order_detail_coupon$ods_refund_payment$ods_sku_attr_value$ods_sku_sale_attr_value$ods_base_province$ods_base_region"
        };;
    esac

    (2)权限

    chmod +x hdfs_to_ods_db_init.sh

    (3)执行

    hdfs_to_ods_db_init.sh all 2020-06-14

  • 每日装载脚本

(1)在/home/duan/bin 目录下创建脚本 hdfs_to_ods_db.sh

vim hdfs_to_ods_db.sh
#!/bin/bash

APP=gmall

# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间的前一天
if [ -n "$2" ] ;then
    do_date=$2
else 
    do_date=`date -d "-1 day" +%F`
fi

ods_order_info=" 
load data inpath '/origin_data/$APP/db/order_info/$do_date' OVERWRITE into table ${APP}.ods_order_info partition(dt='$do_date');"

ods_order_detail="
load data inpath '/origin_data/$APP/db/order_detail/$do_date' OVERWRITE into table ${APP}.ods_order_detail partition(dt='$do_date');"

ods_sku_info="
load data inpath '/origin_data/$APP/db/sku_info/$do_date' OVERWRITE into table ${APP}.ods_sku_info partition(dt='$do_date');"

ods_user_info="
load data inpath '/origin_data/$APP/db/user_info/$do_date' OVERWRITE into table ${APP}.ods_user_info partition(dt='$do_date');"

ods_payment_info="
load data inpath '/origin_data/$APP/db/payment_info/$do_date' OVERWRITE into table ${APP}.ods_payment_info partition(dt='$do_date');"

ods_base_category1="
load data inpath '/origin_data/$APP/db/base_category1/$do_date' OVERWRITE into table ${APP}.ods_base_category1 partition(dt='$do_date');"

ods_base_category2="
load data inpath '/origin_data/$APP/db/base_category2/$do_date' OVERWRITE into table ${APP}.ods_base_category2 partition(dt='$do_date');"

ods_base_category3="
load data inpath '/origin_data/$APP/db/base_category3/$do_date' OVERWRITE into table ${APP}.ods_base_category3 partition(dt='$do_date'); "

ods_base_trademark="
load data inpath '/origin_data/$APP/db/base_trademark/$do_date' OVERWRITE into table ${APP}.ods_base_trademark partition(dt='$do_date'); "

ods_activity_info="
load data inpath '/origin_data/$APP/db/activity_info/$do_date' OVERWRITE into table ${APP}.ods_activity_info partition(dt='$do_date'); "

ods_cart_info="
load data inpath '/origin_data/$APP/db/cart_info/$do_date' OVERWRITE into table ${APP}.ods_cart_info partition(dt='$do_date'); "

ods_comment_info="
load data inpath '/origin_data/$APP/db/comment_info/$do_date' OVERWRITE into table ${APP}.ods_comment_info partition(dt='$do_date'); "

ods_coupon_info="
load data inpath '/origin_data/$APP/db/coupon_info/$do_date' OVERWRITE into table ${APP}.ods_coupon_info partition(dt='$do_date'); "

ods_coupon_use="
load data inpath '/origin_data/$APP/db/coupon_use/$do_date' OVERWRITE into table ${APP}.ods_coupon_use partition(dt='$do_date'); "

ods_favor_info="
load data inpath '/origin_data/$APP/db/favor_info/$do_date' OVERWRITE into table ${APP}.ods_favor_info partition(dt='$do_date'); "

ods_order_refund_info="
load data inpath '/origin_data/$APP/db/order_refund_info/$do_date' OVERWRITE into table ${APP}.ods_order_refund_info partition(dt='$do_date'); "

ods_order_status_log="
load data inpath '/origin_data/$APP/db/order_status_log/$do_date' OVERWRITE into table ${APP}.ods_order_status_log partition(dt='$do_date'); "

ods_spu_info="
load data inpath '/origin_data/$APP/db/spu_info/$do_date' OVERWRITE into table ${APP}.ods_spu_info partition(dt='$do_date'); "

ods_activity_rule="
load data inpath '/origin_data/$APP/db/activity_rule/$do_date' OVERWRITE into table ${APP}.ods_activity_rule partition(dt='$do_date');" 

ods_base_dic="
load data inpath '/origin_data/$APP/db/base_dic/$do_date' OVERWRITE into table ${APP}.ods_base_dic partition(dt='$do_date'); "

ods_order_detail_activity="
load data inpath '/origin_data/$APP/db/order_detail_activity/$do_date' OVERWRITE into table ${APP}.ods_order_detail_activity partition(dt='$do_date'); "

ods_order_detail_coupon="
load data inpath '/origin_data/$APP/db/order_detail_coupon/$do_date' OVERWRITE into table ${APP}.ods_order_detail_coupon partition(dt='$do_date'); "

ods_refund_payment="
load data inpath '/origin_data/$APP/db/refund_payment/$do_date' OVERWRITE into table ${APP}.ods_refund_payment partition(dt='$do_date'); "

ods_sku_attr_value="
load data inpath '/origin_data/$APP/db/sku_attr_value/$do_date' OVERWRITE into table ${APP}.ods_sku_attr_value partition(dt='$do_date'); "

ods_sku_sale_attr_value="
load data inpath '/origin_data/$APP/db/sku_sale_attr_value/$do_date' OVERWRITE into table ${APP}.ods_sku_sale_attr_value partition(dt='$do_date'); "

ods_base_province=" 
load data inpath '/origin_data/$APP/db/base_province/$do_date' OVERWRITE into table ${APP}.ods_base_province;"

ods_base_region="
load data inpath '/origin_data/$APP/db/base_region/$do_date' OVERWRITE into table ${APP}.ods_base_region;"

case $1 in
    "ods_order_info"){
        hive -e "$ods_order_info"
    };;
    "ods_order_detail"){
        hive -e "$ods_order_detail"
    };;
    "ods_sku_info"){
        hive -e "$ods_sku_info"
    };;
    "ods_user_info"){
        hive -e "$ods_user_info"
    };;
    "ods_payment_info"){
        hive -e "$ods_payment_info"
    };;
    "ods_base_category1"){
        hive -e "$ods_base_category1"
    };;
    "ods_base_category2"){
        hive -e "$ods_base_category2"
    };;
    "ods_base_category3"){
        hive -e "$ods_base_category3"
    };;
    "ods_base_trademark"){
        hive -e "$ods_base_trademark"
    };;
    "ods_activity_info"){
        hive -e "$ods_activity_info"
    };;
    "ods_cart_info"){
        hive -e "$ods_cart_info"
    };;
    "ods_comment_info"){
        hive -e "$ods_comment_info"
    };;
    "ods_coupon_info"){
        hive -e "$ods_coupon_info"
    };;
    "ods_coupon_use"){
        hive -e "$ods_coupon_use"
    };;
    "ods_favor_info"){
        hive -e "$ods_favor_info"
    };;
    "ods_order_refund_info"){
        hive -e "$ods_order_refund_info"
    };;
    "ods_order_status_log"){
        hive -e "$ods_order_status_log"
    };;
    "ods_spu_info"){
        hive -e "$ods_spu_info"
    };;
    "ods_activity_rule"){
        hive -e "$ods_activity_rule"
    };;
    "ods_base_dic"){
        hive -e "$ods_base_dic"
    };;
    "ods_order_detail_activity"){
        hive -e "$ods_order_detail_activity"
    };;
    "ods_order_detail_coupon"){
        hive -e "$ods_order_detail_coupon"
    };;
    "ods_refund_payment"){
        hive -e "$ods_refund_payment"
    };;
    "ods_sku_attr_value"){
        hive -e "$ods_sku_attr_value"
    };;
    "ods_sku_sale_attr_value"){
        hive -e "$ods_sku_sale_attr_value"
    };;
    "all"){
        hive -e "$ods_order_info$ods_order_detail$ods_sku_info$ods_user_info$ods_payment_info$ods_base_category1$ods_base_category2$ods_base_category3$ods_base_trademark$ods_activity_info$ods_cart_info$ods_comment_info$ods_coupon_info$ods_coupon_use$ods_favor_info$ods_order_refund_info$ods_order_status_log$ods_spu_info$ods_activity_rule$ods_base_dic$ods_order_detail_activity$ods_order_detail_coupon$ods_refund_payment$ods_sku_attr_value$ods_sku_sale_attr_value"
    };;
esac

(2)权限

chmod +x hdfs_to_ods_db.sh

(3)执行

hdfs_to_ods_db.sh all 2020-06-14

3.3 DIM层——维度层


LICENSED UNDER CC BY-NC-SA 4.0
Comment