Flink Icerberg 离线数仓-项目准备(三)

本节主要是创建模拟数据,包括事实表和维度表,并通过Flink映射为Icerberg数据表,构成DWD层数据。

测试数据目录

ODS数据准备

Base_ad_log.log 数据格式

{"adid":"0","adname":"注册弹窗广告0","dn":"webA"}
{"adid":"1","adname":"注册弹窗广告1","dn":"webA"}
{"adid":"2","adname":"注册弹窗广告2","dn":"webA"}
{"adid":"3","adname":"注册弹窗广告3","dn":"webA"}
{"adid":"4","adname":"注册弹窗广告4","dn":"webA"}
{"adid":"5","adname":"注册弹窗广告5","dn":"webA"}
{"adid":"6","adname":"注册弹窗广告6","dn":"webA"}
{"adid":"7","adname":"注册弹窗广告7","dn":"webA"}
{"adid":"8","adname":"注册弹窗广告8","dn":"webA"}
{"adid":"9","adname":"注册弹窗广告9","dn":"webA"}

Base_website.log  数据格式

{"createtime":"2000-01-01","creator":"admin","delete":"0","dn":"webA","siteid":"0","sitename":"百度","siteurl":"wwww.baidu.com/webA"}
{"createtime":"2000-01-01","creator":"admin","delete":"0","dn":"webA","siteid":"1","sitename":"163","siteurl":"www.163.com/webA"}
{"createtime":"2000-01-01","creator":"admin","delete":"0","dn":"webA","siteid":"2","sitename":"114","siteurl":"www.114.com/webA"}
{"createtime":"2000-01-01","creator":"admin","delete":"0","dn":"webA","siteid":"3","sitename":"126","siteurl":"www.126.com/webA"}
{"createtime":"2000-01-01","creator":"admin","delete":"0","dn":"webA","siteid":"4","sitename":"谷歌","siteurl":"www.google.com/webA"}
{"createtime":"2000-01-01","creator":"admin","delete":"0","dn":"webB","siteid":"0","sitename":"百度","siteurl":"wwww.baidu.com/webB"}

Member.log 数据格式

{"ad_id":"9","birthday":"1997-11-16","dn":"webA","dt":"20190722","email":"test@126.com","fullname":"王0","iconurl":"-","lastlogin":"-","mailaddr":"-","memberlevel":"1","password":"123456","paymoney":"-","phone":"13711235451","qq":"10000","register":"2015-04-05","regupdatetime":"-","uid":"0","unitname":"-","userip":"222.42.116.199","zipcode":"-"}
{"ad_id":"5","birthday":"1997-03-08","dn":"webA","dt":"20190722","email":"test@126.com","fullname":"王1","iconurl":"-","lastlogin":"-","mailaddr":"-","memberlevel":"4","password":"123456","paymoney":"-","phone":"13711235451","qq":"10000","register":"2017-10-13","regupdatetime":"-","uid":"1","unitname":"-","userip":"106.92.133.13","zipcode":"-"}
{"ad_id":"1","birthday":"1998-10-18","dn":"webA","dt":"20190722","email":"test@126.com","fullname":"王2","iconurl":"-","lastlogin":"-","mailaddr":"-","memberlevel":"7","password":"123456","paymoney":"-","phone":"13711235451","qq":"10000","register":"2018-03-16","regupdatetime":"-","uid":"2","unitname":"-","userip":"139.200.218.184","zipcode":"-"}
{"ad_id":"2","birthday":"1970-10-27","dn":"webA","dt":"20190722","email":"test@126.com","fullname":"王3","iconurl":"-","lastlogin":"-","mailaddr":"-","memberlevel":"2","password":"123456","paymoney":"-","phone":"13711235451","qq":"10000","register":"2016-08-22","regupdatetime":"-","uid":"3","unitname":"-","userip":"121.77.205.103","zipcode":"-"}
{"ad_id":"3","birthday":"1975-06-16","dn":"webA","dt":"20190722","email":"test@126.com","fullname":"王4","iconurl":"-","lastlogin":"-","mailaddr":"-","memberlevel":"8","password":"123456","paymoney":"-","phone":"13711235451","qq":"10000","register":"2015-08-14","regupdatetime":"-","uid":"4","unitname":"-","userip":"121.77.66.4","zipcode":"-"}

Member_Regtype.log  数据格式

{"appkey":"-","appregurl":"http:www.webA.com/sale/register/index.html","bdp_uuid":"-","createtime":"2017-03-30","dn":"webA","domain":"-","dt":"20190722","isranreg":"-","regsource":"0","uid":"0","websiteid":"4"}
{"appkey":"-","appregurl":"http:www.webA.com/sale/register/index.html","bdp_uuid":"-","createtime":"2018-02-20","dn":"webA","domain":"-","dt":"20190722","isranreg":"-","regsource":"3","uid":"1","websiteid":"2"}
{"appkey":"-","appregurl":"http:www.webA.com/product10/register/aa/index.html","bdp_uuid":"-","createtime":"2017-09-18","dn":"webA","domain":"-","dt":"20190722","isranreg":"-","regsource":"1","uid":"2","websiteid":"1"}
{"appkey":"-","appregurl":"http:www.webA.com/hhh/wwww/index.html","bdp_uuid":"-","createtime":"2017-10-18","dn":"webA","domain":"-","dt":"20190722","isranreg":"-","regsource":"4","uid":"3","websiteid":"2"}
{"appkey":"-","appregurl":"http:www.webA.com/product/register/index.html","bdp_uuid":"-","createtime":"2017-01-20","dn":"webA","domain":"-","dt":"20190722","isranreg":"-","regsource":"2","uid":"4","websiteid":"3"}
{"appkey":"-","appregurl":"http:www.webA.com/sale/register/index.html","bdp_uuid":"-","createtime":"2019-01-01","dn":"webA","domain":"-","dt":"20190722","isranreg":"-","regsource":"4","uid":"5","websiteid":"2"}

Pcenter_Mem_Paymoney.log 数据格式

{"dn":"webA","dt":"20190722","paymoney":"143.25","siteid":"0","uid":"85853","vip_id":"0"}
{"dn":"webA","dt":"20190722","paymoney":"299.71","siteid":"1","uid":"71868","vip_id":"3"}
{"dn":"webA","dt":"20190722","paymoney":"420.72","siteid":"2","uid":"93104","vip_id":"3"}
{"dn":"webA","dt":"20190722","paymoney":"477.82","siteid":"1","uid":"86239","vip_id":"1"}
{"dn":"webA","dt":"20190722","paymoney":"133.38","siteid":"3","uid":"24540","vip_id":"2"}
{"dn":"webA","dt":"20190722","paymoney":"264.61","siteid":"3","uid":"22827","vip_id":"1"}
{"dn":"webA","dt":"20190722","paymoney":"909.87","siteid":"2","uid":"91425","vip_id":"3"}

Pcenter_Mem_Vip_Level.log 数据格式

{"discountval":"-","dn":"webA","end_time":"2018-12-14","last_modify_time":"2018-12-14","max_free":"-","min_free":"-","next_level":"-","operator":"update","start_time":"2015-10-27","vip_id":"0","vip_level":"普通会员"}
{"discountval":"-","dn":"webA","end_time":"2016-11-25","last_modify_time":"2016-11-25","max_free":"-","min_free":"-","next_level":"-","operator":"update","start_time":"2015-08-18","vip_id":"1","vip_level":"白金"}
{"discountval":"-","dn":"webA","end_time":"2016-03-04","last_modify_time":"2016-03-04","max_free":"-","min_free":"-","next_level":"-","operator":"update","start_time":"2015-04-06","vip_id":"2","vip_level":"银卡"}
{"discountval":"-","dn":"webA","end_time":"2017-12-21","last_modify_time":"2017-12-21","max_free":"-","min_free":"-","next_level":"-","operator":"update","start_time":"2016-03-12","vip_id":"3","vip_level":"金卡"}
{"discountval":"-","dn":"webA","end_time":"2016-04-19","last_modify_time":"2016-04-19","max_free":"-","min_free":"-","next_level":"-","operator":"update","start_time":"2015-04-10","vip_id":"4","vip_level":"钻石"}

项目准备

项目POM文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>iceberg-demo</artifactId>
        <groupId>com.iceberg</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>icberg-flink-demo</artifactId>
    <properties>
        <flink.version>1.11.0</flink.version>
        <scala.version>2.12.10</scala.version>
        <scala.binary.version>2.12</scala.binary.version>
        <log4j.version>1.2.17</log4j.version>
        <slf4j.version>1.7.22</slf4j.version>
        <iceberg.version>0.11.1</iceberg.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>${flink.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table -->

        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table-common -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-common</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table-api-java -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-api-java</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table-api-java-bridge -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-api-java-bridge_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table-planner -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-planner_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-table-planner-blink -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-planner-blink_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.iceberg</groupId>
            <artifactId>iceberg-flink-runtime</artifactId>
            <version>0.11.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.flink/flink-clients -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka-0.10_${scala.binary.version}</artifactId>
            <version>${flink.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.1</version>
                <executions>
                    <execution>
                        <id>compile-scala</id>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile-scala</id>
                        <goals>
                            <goal>add-source</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

文件目录结构

 数据导入准备

1. 拷贝测试数据目录下的文件到/tmp/warehouse/ods/下面;
2. 创建测试表com.iceberg.warhouse.meta.CreateTables

创建表CreateTables

1.使用Hadoop Catalog存储表元信息

2.使用本地文件系统,便于测试

package com.iceberg.warhouse.meta;

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;

/**
 *   构建Icerberg表
 */

public class CreateTables {

    public static void main(String[] args) {

        //获取表环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

        //tableEnv.executeSql("SET execution.checkpointing.interval = 3s");
        tableEnv.executeSql("CREATE CATALOG hadoop_catalog WITH (\n" +
                "  'type'='iceberg',\n" +
                "  'catalog-type'='hadoop',\n" +
                "  'warehouse'='file:///tmp/warehouse/iceberg',\n" +
                "  'property-version'='1'\n" +
                ")");

        tableEnv.executeSql("USE CATALOG hadoop_catalog");

        //dwd_member
        tableEnv.executeSql("create table iceberg.dwd_member(\n" +
                "   uid int,\n" +
                "   ad_id int,\n" +
                "   birthday string,\n" +
                "   email string,\n" +
                "   fullname string,\n" +
                "   iconurl string,\n" +
                "   lastlogin string,\n" +
                "   mailaddr string,\n" +
                "   memberlevel string,\n" +
                "   password string,\n" +
                "   paymoney string,\n" +
                "   phone string,\n" +
                "   qq string,\n" +
                "   register string,\n" +
                "   regupdatetime string,\n" +
                "   unitname string,\n" +
                "   userip string,\n" +
                "   zipcode string,\n" +
                "   dt string)\n" +
                "   partitioned by(dt)");

        //dwd_member_regtype
        tableEnv.executeSql("create table iceberg.dwd_member_regtype(\n" +
                "  uid int,\n" +
                "  appkey string,\n" +
                "  appregurl string,\n" +
                "  bdp_uuid string,\n" +
                "  createtime timestamp,\n" +
                "  isranreg string,\n" +
                "  regsource string,\n" +
                "  regsourcename string,\n" +
                "  websiteid int,\n" +
                "  dt string)\n" +
                "  partitioned by(dt)");

        //dwd_base_ad
        tableEnv.executeSql("create table iceberg.dwd_base_ad(\n" +
                "adid int,\n" +
                "adname string,\n" +
                "dn string)\n" +
                "partitioned by (dn) ");

        //dwd_base_website
        tableEnv.executeSql(" create table iceberg.dwd_base_website(\n" +
                "  siteid int,\n" +
                "  sitename string,\n" +
                "  siteurl string,\n" +
                " `delete` int,\n" +
                "  createtime timestamp,\n" +
                "  creator string,\n" +
                "  dn string)\n" +
                "partitioned by (dn) ");

        //dwd_pcentermempaymoney
        tableEnv.executeSql("create table iceberg.dwd_pcentermempaymoney(\n" +
                "  uid int,\n" +
                "  paymoney string,\n" +
                "  siteid int,\n" +
                "  vip_id int,\n" +
                "  dt string,\n" +
                "  dn string)\n" +
                " partitioned by(dt,dn)");

        //dwd_vip_level
        tableEnv.executeSql(" create table iceberg.dwd_vip_level(\n" +
                "   vip_id int,\n" +
                "   vip_level string,\n" +
                "   start_time timestamp,\n" +
                "   end_time timestamp,\n" +
                "   last_modify_time timestamp,\n" +
                "   max_free string,\n" +
                "   min_free string,\n" +
                "   next_level string,\n" +
                "   operator string,\n" +
                "   dn string)\n" +
                " partitioned by(dn)");

        //dws_member
        tableEnv.executeSql("create table iceberg.dws_member(\n" +
                "  uid int,\n" +
                "  ad_id int,\n" +
                "  fullname string,\n" +
                "  iconurl string,\n" +
                "  lastlogin string,\n" +
                "  mailaddr string,\n" +
                "  memberlevel string,\n" +
                "  password string,\n" +
                "  paymoney string,\n" +
                "  phone string,\n" +
                "  qq string,\n" +
                "  register string,\n" +
                "  regupdatetime string,\n" +
                "  unitname string,\n" +
                "  userip string,\n" +
                "  zipcode string,\n" +
                "  appkey string,\n" +
                "  appregurl string,\n" +
                "  bdp_uuid string,\n" +
                "  reg_createtime string,\n" +
                "  isranreg string,\n" +
                "  regsource string,\n" +
                "  regsourcename string,\n" +
                "  adname string,\n" +
                "  siteid int,\n" +
                "  sitename string,\n" +
                "  siteurl string,\n" +
                "  site_delete string,\n" +
                "  site_createtime string,\n" +
                "  site_creator string,\n" +
                "  vip_id int,\n" +
                "  vip_level string,\n" +
                "  vip_start_time string,\n" +
                "  vip_end_time string,\n" +
                "  vip_last_modify_time string,\n" +
                "  vip_max_free string,\n" +
                "  vip_min_free string,\n" +
                "  vip_next_level string,\n" +
                "  vip_operator string,\n" +
                " dt string,\n" +
                "dn string)\n" +
                "partitioned by(dt,dn)");

        //ads_register_appregurlnum
        tableEnv.executeSql(" create  table iceberg.ads_register_appregurlnum(\n" +
                "  appregurl string,\n" +
                "  num bigint,\n" +
                "  dt string,\n" +
                "  dn string)\n" +
                "partitioned by(dt)");

        //ads_register_top3memberpay
        tableEnv.executeSql(" create table iceberg.ads_register_top3memberpay(\n" +
                "  uid int,\n" +
                "  memberlevel string,\n" +
                "  register string,\n" +
                "  appregurl string,\n" +
                "  regsourcename string,\n" +
                "  adname string,\n" +
                "  sitename string,\n" +
                "  vip_level string,\n" +
                "  paymoney decimal(10,4),\n" +
                "  rownum BigInt,\n" +
                "dn string,\n" +
                " dt string)\n" +
                "partitioned by(dt,rownum,memberlevel)");
    }

}

将ODS数据抽象成Icerberg表

/**
 * 将ODS数据抽象成IcerBerg表
 */
public class DwdIcebergController {
    public static DwdIcebergSerivce dwdIcebergSerivce;

    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
        dwdIcebergSerivce = new DwdIcebergSerivce();

        // 测试数据存放路径,需要把测试数据下面的数据全部拷贝到/tmp/warehouse/ods/下面;
        String basePath = "file:///tmp/warehouse/ods/";

        //使用Hadoop本地路径,Icerberg数据保存到/tmp/warehouse/iceberg/iceberg/;
        String catalogPath = "file:///tmp/warehouse/iceberg/iceberg/";

        dwdIcebergSerivce.readOdsData(env, basePath, catalogPath);
        env.execute();
    }
}

DwdIcebergSerivce具体实现

此处将模拟数据文件,转为DataStream,然后输出到Icerberg。

package com.iceberg.warhouse.service;

import com.alibaba.fastjson.JSONObject;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.data.GenericRowData;
import org.apache.flink.table.data.RowData;
import org.apache.flink.table.data.StringData;
import org.apache.flink.table.data.TimestampData;
import org.apache.iceberg.flink.TableLoader;
import org.apache.iceberg.flink.sink.FlinkSink;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DwdIcebergSerivce {

    //basePath= file:///tmp/warehouse/ods/
    //catalogPath=file:///tmp/warehouse/iceberg/iceberg/
    public void readOdsData(StreamExecutionEnvironment env, String basePath, String catalogPath) {

        DataStream<String> baseadDS = env.readTextFile(basePath + "baseadlog.log");
        DataStream<RowData> baseadInput = baseadDS.map(item -> {
            JSONObject jsonObject = JSONObject.parseObject(item);
            GenericRowData rowData = new GenericRowData(3);
            rowData.setField(0, jsonObject.getIntValue("adid"));
            rowData.setField(1, StringData.fromString(jsonObject.getString("adname")));
            rowData.setField(2, StringData.fromString(jsonObject.getString("dn")));
            return rowData;
        });
        TableLoader dwdbaseadTable = TableLoader.fromHadoopTable(catalogPath + "dwd_base_ad");
        FlinkSink.forRowData(baseadInput).tableLoader(dwdbaseadTable).overwrite(true).build();


        DataStream<String> basewebsiteDS = env.readTextFile(basePath + "baswewebsite.log");
        DataStream<RowData> basewebsiteInput = basewebsiteDS.map(item -> {
            JSONObject jsonObject = JSONObject.parseObject(item);
            GenericRowData rowData = new GenericRowData(7);
            rowData.setField(0, jsonObject.getIntValue("siteid"));
            rowData.setField(1, StringData.fromString(jsonObject.getString("sitename")));
            rowData.setField(2, StringData.fromString(jsonObject.getString("siteurl")));
            rowData.setField(3, jsonObject.getIntValue("delete"));
            LocalDateTime localDateTime = LocalDate.parse(jsonObject.getString("createtime"), DateTimeFormatter.ofPattern("yyyy-MM-dd"))
                    .atStartOfDay();
            rowData.setField(4, TimestampData.fromLocalDateTime(localDateTime));
            rowData.setField(5, StringData.fromString(jsonObject.getString("creator")));
            rowData.setField(6, StringData.fromString(jsonObject.getString("dn")));
            return rowData;
        });
        TableLoader dwdbasewebsiteTable = TableLoader.fromHadoopTable(catalogPath + "dwd_base_website");
        FlinkSink.forRowData(basewebsiteInput).tableLoader(dwdbasewebsiteTable).overwrite(true).build();


        DataStream<String> memberDS = env.readTextFile(basePath + "member.log");
        DataStream<RowData> memberInput = memberDS.map(item -> {
            JSONObject jsonObject = JSONObject.parseObject(item);
            GenericRowData rowData = new GenericRowData(19);
            rowData.setField(0, jsonObject.getIntValue("uid"));
            rowData.setField(1, jsonObject.getIntValue("ad_id"));
            rowData.setField(2, StringData.fromString(jsonObject.getString("birthday")));
            rowData.setField(3, StringData.fromString(jsonObject.getString("email")));
            rowData.setField(4, StringData.fromString(jsonObject.getString("fullname")));
            rowData.setField(5, StringData.fromString(jsonObject.getString("iconurl")));
            rowData.setField(6, StringData.fromString(jsonObject.getString("lastlogin")));
            rowData.setField(7, StringData.fromString(jsonObject.getString("mailaddr")));
            rowData.setField(8, StringData.fromString(jsonObject.getString("memberlevel")));
            rowData.setField(9, StringData.fromString(jsonObject.getString("password")));
            rowData.setField(10, StringData.fromString(jsonObject.getString("paymoney")));
            rowData.setField(11, StringData.fromString(jsonObject.getString("phone")));
            rowData.setField(12, StringData.fromString(jsonObject.getString("qq")));
            rowData.setField(13, StringData.fromString(jsonObject.getString("register")));
            rowData.setField(14, StringData.fromString(jsonObject.getString("regupdatetime")));
            rowData.setField(15, StringData.fromString(jsonObject.getString("unitname")));
            rowData.setField(16, StringData.fromString(jsonObject.getString("userip")));
            rowData.setField(17, StringData.fromString(jsonObject.getString("zipcode")));
            rowData.setField(18, StringData.fromString(jsonObject.getString("dt")));
            return rowData;
        });
        TableLoader dwdmemberTable = TableLoader.fromHadoopTable(catalogPath + "dwd_member");
        FlinkSink.forRowData(memberInput).tableLoader(dwdmemberTable).overwrite(true).build();


        DataStream<String> memberregtypDS = env.readTextFile(basePath + "memberRegtype.log");
        DataStream<RowData> memberregtypInput = memberregtypDS.map(item -> {
            JSONObject jsonObject = JSONObject.parseObject(item);
            GenericRowData rowData = new GenericRowData(10);
            rowData.setField(0, jsonObject.getIntValue("uid"));
            rowData.setField(1, StringData.fromString(jsonObject.getString("appkey")));
            rowData.setField(2, StringData.fromString(jsonObject.getString("appregurl")));
            rowData.setField(3, StringData.fromString(jsonObject.getString("bdp_uuid")));
            LocalDateTime localDateTime = LocalDate.parse(jsonObject.getString("createtime"), DateTimeFormatter.ofPattern("yyyy-MM-dd"))
                    .atStartOfDay();
            rowData.setField(4, TimestampData.fromLocalDateTime(localDateTime));
            rowData.setField(5, StringData.fromString(jsonObject.getString("isranreg")));
            rowData.setField(6, StringData.fromString(jsonObject.getString("regsource")));
            rowData.setField(7, StringData.fromString(jsonObject.getString("regsource")));
            rowData.setField(8, jsonObject.getIntValue("websiteid"));
            rowData.setField(9, StringData.fromString(jsonObject.getString("dt")));
            return rowData;
        });
        TableLoader dwdmemberregtypeTable = TableLoader.fromHadoopTable(catalogPath + "dwd_member_regtype");
        FlinkSink.forRowData(memberregtypInput).tableLoader(dwdmemberregtypeTable).overwrite(true).build();

        DataStream<String> memviplevelDS = env.readTextFile(basePath + "pcenterMemViplevel.log");
        DataStream<RowData> memviplevelInput = memviplevelDS.map(item -> {
            JSONObject jsonObject = JSONObject.parseObject(item);
            GenericRowData rowData = new GenericRowData(10);
            rowData.setField(0, jsonObject.getIntValue("vip_id"));
            rowData.setField(1, StringData.fromString(jsonObject.getString("vip_level")));
            LocalDateTime start_timeDate = LocalDate.parse(jsonObject.getString("start_time"), DateTimeFormatter.ofPattern("yyyy-MM-dd"))
                    .atStartOfDay();
            LocalDateTime end_timeDate = LocalDate.parse(jsonObject.getString("end_time"), DateTimeFormatter.ofPattern("yyyy-MM-dd"))
                    .atStartOfDay();
            LocalDateTime last_modify_timeDate = LocalDate.parse(jsonObject.getString("last_modify_time"), DateTimeFormatter.ofPattern("yyyy-MM-dd"))
                    .atStartOfDay();
            rowData.setField(2, TimestampData.fromLocalDateTime(start_timeDate));
            rowData.setField(3, TimestampData.fromLocalDateTime(end_timeDate));
            rowData.setField(4, TimestampData.fromLocalDateTime(last_modify_timeDate));
            rowData.setField(5, StringData.fromString(jsonObject.getString("max_free")));
            rowData.setField(6, StringData.fromString(jsonObject.getString("min_free")));
            rowData.setField(7, StringData.fromString(jsonObject.getString("next_level")));
            rowData.setField(8, StringData.fromString(jsonObject.getString("operator")));
            rowData.setField(9, StringData.fromString(jsonObject.getString("dn")));
            return rowData;
        });
        TableLoader dwdviplevelTable = TableLoader.fromHadoopTable(catalogPath + "dwd_vip_level");
        FlinkSink.forRowData(memviplevelInput).tableLoader(dwdviplevelTable).overwrite(true).build();

        DataStream<String> mempaymoneyDS = env.readTextFile(basePath + "pcentermempaymoney.log");
        DataStream<RowData> mempaymoneyInput = mempaymoneyDS.map(item -> {
            JSONObject jsonObject = JSONObject.parseObject(item);
            GenericRowData rowData = new GenericRowData(6);
            rowData.setField(0, jsonObject.getIntValue("uid"));
            rowData.setField(1, StringData.fromString(jsonObject.getString("paymoney")));
            rowData.setField(2, jsonObject.getIntValue("siteid"));
            rowData.setField(3, jsonObject.getIntValue("vip_id"));
            rowData.setField(4, StringData.fromString(jsonObject.getString("dt")));
            rowData.setField(5, StringData.fromString(jsonObject.getString("dn")));
            return rowData;
        });
        TableLoader dwdmempaymoneyTable = TableLoader.fromHadoopTable(catalogPath + "dwd_pcentermempaymoney");
        FlinkSink.forRowData(mempaymoneyInput).tableLoader(dwdmempaymoneyTable).overwrite(true).build();


    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值