開(kāi)發(fā)思路
運(yùn)行環(huán)境全面升級(jí)到j(luò)dk11后,原基于hive catalog的flink catlog不能再使用,原因是現(xiàn)在hive所有版本都不支持jdk11,但在大趨勢(shì)下jdk版本已不可能回退到j(luò)dk1.8了,在這種情況下是否可以開(kāi)發(fā)一個(gè)不依賴hive的flink catalog呢?
flink默認(rèn)catalog是保存在內(nèi)存中,關(guān)鍵類是GenericInMemoryCatalog.java,這個(gè)類實(shí)現(xiàn)了元數(shù)據(jù)管理的所有方法,如果利用這些已實(shí)現(xiàn)的方法,只增加對(duì)內(nèi)存中元數(shù)據(jù)持久化方法可以減少很工作量,同時(shí)也避免了重復(fù)造輪子。
flink-catalog-in-jdbc基于繼承GenericInMemoryCatalog實(shí)現(xiàn),將元數(shù)據(jù)保存到j(luò)dbc中,從而解除了flink對(duì)hive的依賴。
項(xiàng)目地址
項(xiàng)目地址:https://github.com/jeff-zou/flink-catalog-in-jdbc.git
無(wú)法翻墻:https://gitee.com/jeff-zou/flink-catalog-in-jdbc.git
使用方法
1.引入包
<dependency>
<groupId>io.github.jeff-zou</groupId>
<artifactId>flink-catalog-in-jdbc</artifactId>
<version>1.2</version>
</dependency>
2.數(shù)據(jù)庫(kù)創(chuàng)建表
CREATE TABLE `flink_catalog_databases` (
`comment` varchar(100) DEFAULT NULL COMMENT '1',
`properties` varchar(100) DEFAULT NULL,
`database_name` varchar(100) DEFAULT NULL,
UNIQUE KEY `flink_catalog_databases_un` (`database_name`)
) ;
CREATE TABLE `flink_catalog_tables` (
`script` varchar(5000) DEFAULT NULL COMMENT '1',
`object_name` varchar(100) DEFAULT NULL,
`database_name` varchar(100) DEFAULT NULL,
`kind` varchar(20) DEFAULT NULL,
`comment` varchar(200) DEFAULT NULL,
UNIQUE KEY `flink_catalog_databases_un` (`database_name`,`object_name`)
);
CREATE TABLE `flink_catalog_functions` (
`database_name` varchar(100) DEFAULT NULL,
`object_name` varchar(100) DEFAULT NULL,
`class_name` varchar(200) DEFAULT NULL COMMENT '1',
`function_language` varchar(20) DEFAULT NULL,
UNIQUE KEY `flink_catalog_functions_un` (`database_name`,`object_name`)
) ;
CREATE TABLE `flink_catalog_columns` (
`database_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`object_name` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`column_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`column_type` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`column_comment` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
UNIQUE KEY `flink_catalog_columns_un` (`database_name`,`object_name`,`column_name`)
)
3.sql使用
create catalog my_catalog with ( 'type'='generic_in_jdbc', 'default-database'='test', 'username'='test', 'password'='****',
'url'='jdbc:mysql://*****:3306/test_database?useUnicode=true&characterEncoding=utf8&autoReconnect=true');
use catalog my_catalog;
create database if not exists my_database;
use my_database;
CREATE TABLE if not exists `test` (
`c1` VARCHAR(2147483647),
`id` INT NOT NULL,
`stime` TIMESTAMP(3),
`cost` as id * 10, "
WATERMARK FOR `stime` AS `stime` - INTERVAL '10' SECOND,
CONSTRAINT `PK_3386` PRIMARY KEY (`id`) NOT ENFORCED
) "
comment 'test' "
partitioned by (c1)"
WITH (
'connector' = 'print'
) ";
show create table test;
關(guān)注個(gè)人微信公眾號(hào):肌肉碼農(nóng),回復(fù)“好友”討論問(wèn)題