flink connector phoenix

参考:https://github.com/lixz3321/flink-connector-jdbc-ext

下载:flink-release-1.13.2 源码
进入flink-connectors module 子module flink-connector-jdbc,添加 PhoenixDialect.java ,PhoenixRowConverter.java,修改 JdbcDialects.java

mvn clean package -DskipTests -Dfast -Dra
t.skip=true

在这里插入图片描述

在这里插入图片描述
替代 flink-connector-jdbc

<!-- <dependency>
   <groupId>org.apache.flink</groupId>
   <artifactId>flink-connector-jdbc_2.11</artifactId>
   <version>1.13.2</version>
</dependency> -->

<dependency>
   <groupId>org.apache.flink</groupId>
   <artifactId>flink-connector-jdbc-ext</artifactId>
   <version>1.13.2</version>
</dependency>
PostgresDialect.java

org.apache.flink.connector.jdbc.dialect.PhoenixDialect

public class PhoenixDialect extends AbstractDialect{
    @Override
    public int maxDecimalPrecision() {
        return 0;
    }

    @Override
    public int minDecimalPrecision() {
        return 0;
    }

    @Override
    public int maxTimestampPrecision() {
        return 0;
    }

    @Override
    public int minTimestampPrecision() {
        return 0;
    }

    @Override
    public List<LogicalTypeRoot> unsupportedTypes() {
        return null;
    }

    @Override
    public String dialectName() {
        return "Phoenix";
    }

    @Override
    public boolean canHandle(String url) {
        return url.startsWith("jdbc:phoenix:");
    }

    @Override
    public JdbcRowConverter getRowConverter(RowType rowType) {
        return new PhoenixRowConverter(rowType);
    }

    @Override
    public String getLimitClause(long limit) {
        return null;
    }

    @Override
    public Optional<String> defaultDriverName() {
        return Optional.of("org.apache.phoenix.jdbc.PhoenixDriver");
    }

    @Override
    public String quoteIdentifier(String identifier) {
        return "\"" + identifier + "\"";
    }

    @Override
    public String getInsertIntoStatement(String tableName, String[] fieldNames) {
        String columns =
            Arrays.stream(fieldNames)
                .map(this::quoteIdentifier)
                .collect(Collectors.joining(", "));
        String placeholders =
            Arrays.stream(fieldNames).map(f -> ":" + f).collect(Collectors.joining(", "));
        return "UPSERT INTO "
            + quoteIdentifier(tableName)
            + "("
            + columns
            + ")"
            + " VALUES ("
            + placeholders
            + ")";
    }
}
PhoenixRowConverter.java

org.apache.flink.connector.jdbc.internal.converter.PhoenixRowConverter

public class PhoenixRowConverter extends AbstractJdbcRowConverter{

    public PhoenixRowConverter(RowType rowType) {
        super(rowType);
    }

    @Override
    public String converterName() {
        return "Phoenix";
    }
}

JdbcDialects.java

org.apache.flink.connector.jdbc.dialect.JdbcDialects

private static final List<JdbcDialect> DIALECTS =
            Arrays.asList(
                    new DerbyDialect(),
                    new MySQLDialect(),
                    new PostgresDialect(),
                    // 添加 phoenix 语义
                    new PhoenixDialect());

======

		StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        EnvironmentSettings bsSettings = EnvironmentSettings.newInstance().useBlinkPlanner().inStreamingMode().build();
        StreamTableEnvironment tEnv = StreamTableEnvironment.create(env, bsSettings);
        System.out.println("tEnv--> " + tEnv);
        //加载clickhouse表
        tEnv.executeSql("create table test4(" +
                "`GOODS_ID` STRING," +
                "`ISWHITE` STRING," +
                "`DATA_DATE` STRING" +
                ")WITH(" +
                "'connector' = 'jdbc'," +
                "'url' = 'jdbc:phoenix:172.16.34.121:2181'," +
                "'table-name' = 'WHO_GOODS_LABEL'" +
                ")");
        tEnv.executeSql("select * from test4").print();

在这里插入图片描述

值得注意的是如下图 aaa / ccc 未在上图显示,因为是在 hbase shell 直接添加的、未查询的到…
在这里插入图片描述

注意字段大小写…

create table test4(
`goods_id` STRING,
`ISWHITE` STRING,
`DATA_DATE` STRING
)WITH(
'connector' = 'jdbc',
'url' = 'jdbc:phoenix:172.16.34.121:2181',
'table-name' = 'WHO_GOODS_LABEL'
)"

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Flink是一个高效、可靠、易用的分布式流处理系统,而ClickHouse则是一个面向列的分布式关系数据库管理系统。Flink Connector ClickHouse是将这两个系统结合起来,实现Flink与ClickHouse之间的无缝连接。 Flink Connector ClickHouse提供了一个数据源和Sink的功能,它能够让Flink通过ClickHouse来存储和查询数据。这个功能在实时的大数据处理中非常重要,因为数据量很大,需要高效的存储和查询。通过使用这个Connector,我们可以加速数据处理效率,提高实时数据分析的准确性。 Flink Connector ClickHouse还支持多种数据格式的转换和传输,包括JSON和Avro等。这个Connector还提供了一些配置属性,可以让用户对其进行自定义的设置,以满足特定的需求。例如,我们可以设置ClickHouse的集群节点和端口,以及一些其他的参数,来满足我们的需求。 总之,Flink Connector ClickHouse是一个非常有用的工具,可以让我们更加方便地将Flink和ClickHouse结合起来,实现高效的数据处理和分析。它为企业提供了实时数据处理、分析和存储的完整解决方案,大大地提升了数据处理效率和准确性,是一款值得使用的工具。 ### 回答2: Flink Connector ClickHouse是Apache Flink的一种连接器,用于与ClickHouse分布式数据库进行交互。ClickHouse是一种以列为基础的分布式关系型数据库,具有高性能和可扩展性,并可用于快速的实时数据分析和处理。 Flink Connector ClickHouse可以通过简单的代码配置快速集成到Flink项目中,从而实现数据在Flink和ClickHouse之间的高效传输和转换。使用该连接器,可以实现流式数据的实时写入与查询操作,同时支持数据批处理,数据源和数据接收器等功能。 在使用Flink Connector ClickHouse时,需要注意ClickHouse的数据模型和表格结构,以及Flink的输入输出格式和数据类型转换。同时,还需关注连接器的性能和可靠性,以确保数据的准确和一致性。 总之,Flink Connector ClickHouse是一种强大、高效、可靠的连接器,可以帮助开发人员实现Flink与ClickHouse之间的数据流转换和处理,从而加速实时数据分析和处理的速度、降低成本、提高效率。 ### 回答3: Flink是一个分布式实时流计算引擎,ClickHouse是一个开源列存储数据库。Flink Connector ClickHouse是Flink提供的一个模块,用于将数据从Flink发送到ClickHouse中,实现数据在实时流处理过程中的存储和查询。 Flink Connector ClickHouse的优点包括: 1. 低延迟:Flink Connector ClickHouse能够实时处理流数据,并快速存储到ClickHouse中,从而实现低延迟的数据查询和分析。 2. 高性能:Flink Connector ClickHouse使用了ClickHouse的列存储技术,能够高效地存储和查询大规模数据集,提高了数据处理的效率。 3. 可扩展性:Flink Connector ClickHouse支持集群部署,可以随时根据数据量的增长对集群进行扩展,提高了系统的可扩展性和稳定性。 4. 灵活性:Flink Connector ClickHouse提供多种数据源和格式的支持,可以将不同来源的数据统一处理,并转换为ClickHouse支持的数据格式。 总之,Flink Connector ClickHouse是Flink生态系统中非常重要的一个组件,它帮助实现了实时流处理中数据的存储和查询,提高了数据处理的效率和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值