本节主要是创建模拟数据,包括事实表和维度表,并通过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();
}
}