kudu java

因为网上Kudu的相关资料不多,我也就照着kudu-example 和 kudu的Java API自己写写试试,有待改进,如果哪位大佬有更好的改进建议欢迎告诉我~

话不多说,直接上代码。


import java.util.ArrayList;

import java.util.List;

import org.apache.kudu.ColumnSchema;

import org.apache.kudu.ColumnSchema.ColumnSchemaBuilder;

import org.apache.kudu.Schema;

import org.apache.kudu.Type;

import org.apache.kudu.client.*;

public class KuduTest {

private static final StringKUDU_MASTER =

System.getProperty("kuduMaster", "192.168.1.32");

    private KuduClientclient;

    private KuduTabletable;

    private ListTablesResponselistTablesResponse;

    private KuduTableColkuduTableCol =new KuduTableCol();

    public static void main(String[] args) {

KuduTest kuduTest =new KuduTest();

//        kuduTest.createTestTableWay();

//        kuduTest.createAiji66_TableWay();

//建立连接

        kuduTest.getConnection();

//        System.out.println("开始建表");

//        //创建kudu表

//        //kuduTest.createTable(kuduTest.kuduTableCol);

//        System.out.println("建表结束");

        kuduTest.showTables();

//        System.out.println("开始添加数据");

//        //添加单条数据测试

//        kuduTest.insertTimeColumn();

//        System.out.println("添加数据结束");

//        kuduTest.showTables();

//        System.out.println("批量添加数据");

//        //添加多条数据测试

//        kuduTest.inserColumns();

//        System.out.println("批量添加数据结束");

//        kuduTest.showTables();

//        //阅读列数据

//        kuduTest.scanRows();

//        System.out.println("执行结束");

//        //删除表

//        System.out.println("开始删除数据表");

//        kuduTest.deleteTable("aiji66_log");

    }

//0.和master主机端建立连接

    public void getConnection(){

//Creates a new client that connects to the masters.

        this.client =new KuduClient.KuduClientBuilder(KUDU_MASTER).build();

    }

//1.show tables;

    public void showTables(){

try {

listTablesResponse =this.client.getTablesList();

            for(String tableString :listTablesResponse.getTablesList()) {

System.out.println(tableString);

            }

}catch (KuduException e) {

e.printStackTrace();

        }

}

//2.1设置元素--这里是我们以后建表需要经常修改的地方

    public void createTableWay(){

//2.1.1 设置table表名

        this.kuduTableCol.setTableName("user_test");

        //2.2.2 设置colmun表字段

        /**

* ("字段名",字段类型).key(boolean 是否为行键).encoding(字符编码).nullable(true 表是否设计为空).build() --构建

*/

        List cols =new ArrayList<>();

        //cols.add(new ColumnSchemaBuilder("id", Type.INT32).key(true).nullable(true).build());

        cols.add(new ColumnSchemaBuilder("id", Type.INT32).key(true).build());

        cols.add(new ColumnSchemaBuilder("name", Type.STRING).key(true).build());

        cols.add(new ColumnSchemaBuilder("ip", Type.INT64).key(true).build());

        cols.add(new ColumnSchemaBuilder("value", Type.STRING).build());

        this.kuduTableCol.setTableSchema(cols);

        //2.2.3 设置分区

        List rangeKeys =new ArrayList();

        rangeKeys.add("id");

        rangeKeys.add("name");

        rangeKeys.add("ip");

        this.kuduTableCol.setTableBuilder(rangeKeys);

    }

//2. create table  创建表

    public void createTable(KuduTableCol kuduTableCol){

try {

if (client.tableExists(kuduTableCol.getTableName())) {

return;

            }

//这里是建表语句,注意,第三个分区选项有时候也需要修改

            table =this.client.createTable(kuduTableCol.getTableName(),kuduTableCol.getTableSchema(),new CreateTableOptions().setRangePartitionColumns(kuduTableCol.getTableBuilder()));

        }catch (KuduException e) {

e.printStackTrace();

        }

}

//3.insert column  添加数据

    public void insertColumn() {

try {

KuduSession session =this.client.newSession();

            table =this.client.openTable("user_test");

            Insert insert =table.newInsert();

            insert.getRow().addInt("id", 1);

            insert.getRow().addString("name","张三");

            insert.getRow().addLong("ip",2017121801);

            insert.getRow().addString("value","这是添加的第一个角色,就像一般的剧情一样,可能有一些不平凡的主角光环在里面");

            session.apply(insert);

        }catch (KuduException e) {

e.printStackTrace();

        }

}

//3.1批量插入数据,待改进

    public void inserColumns() {

try {

KuduSession session =this.client.newSession();

            table =this.client.openTable("user_test");

            GetWay getWay =new GetWay();

            long j =2017122001;

            for (int i =1; i <500;i++ ) {

Insert insert =table.newInsert();

                insert.getRow().addInt("id",i);

                insert.getRow().addString("name",getWay.getName());

                insert.getRow().addLong("ip",j);

                insert.getRow().addString("value","批量插入的数据");

                session.apply(insert);

                j+=1;

            }

}catch (KuduException e) {

e.printStackTrace();

        }

}

//4.update column  更新数据

    public void updateColumn() {

try {

KuduSession session =this.client.newSession();

            table =this.client.openTable("kevin_table");

            Update update =table.newUpdate();

            update.getRow().addInt("id",1);

            update.getRow().addString("name","张三大大");

            session.apply(update);

        }catch (KuduException e) {

e.printStackTrace();

        }

}

//5.delete column  删除数据

    public void deleteColumn() {

try {

KuduSession session =this.client.newSession();

            table =this.client.openTable("kevin_table");

            Delete delete =table.newDelete();

            delete.getRow().addInt("id",1);

            session.apply(delete);

        }catch (KuduException e) {

e.printStackTrace();

        }

}

//6.KuduScanner 阅读列数据

    public void scanRows(){

try {

List columnNames =new ArrayList();

            columnNames.add("name");

            table =this.client.openTable("user_test");

            KuduScanner scanner =this.client.newScannerBuilder(table).setProjectedColumnNames(columnNames).build();

            while (scanner.hasMoreRows()) {

for (RowResult row : scanner.nextRows()) {

System.out.println(row.getString("name"));

                }

}

}catch (KuduException e) {

e.printStackTrace();

        }

}

//6.1 KuduScanner阅读列数据-指定上下限

    public void scanRow(){

List projectColumns =new ArrayList(1);

        projectColumns.add("id");

        projectColumns.add("name");

        projectColumns.add("ip");

        try {

table =this.client.openTable("user_test");

            Schema schema =table.getSchema();

            PartialRow partialRow = schema.newPartialRow();

            partialRow.addInt("id", 1);

            PartialRow partialRow1 = schema.newPartialRow();

            partialRow1.addInt("id", 2);

            KuduScanner scanner =this.client.newScannerBuilder(table)

.setProjectedColumnNames(projectColumns)//指定输出列

                    .lowerBound(partialRow)//指定下限(包含)

                    .exclusiveUpperBound(partialRow1)//指定上限(不包含)

                    .build();

            while (scanner.hasMoreRows()) {

for (RowResult row : scanner.nextRows()) {

System.out.println(row.getString("name"));

                    System.out.println(row.getInt("id")+" "+row.getString("name")+" "+row.getString("ip"));

                }

}

}catch (KuduException e) {

e.printStackTrace();

        }

}

//7.Kudu deleteTable

    public void deleteTable(String tableName) {

try {

if (!client.tableExists(tableName)) {

return;

            }

this.client.deleteTable(tableName);

            System.out.println("该表已删除");

        }catch (KuduException e) {

e.printStackTrace();

        }

}


自己封装了一个类,方便传参。。。

import org.apache.kudu.ColumnSchema;
import org.apache.kudu.Schema;

import java.util.List;

public class KuduTableCol {
    private String tableName;
    private Schema tableSchema;
    private List tableBuilder;

    public String getTableName() {
        return tableName;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    public Schema getTableSchema() {
        return tableSchema;
    }

    public void setTableSchema(List<ColumnSchema> cols) {
        this.tableSchema = new Schema(cols);
    }

    public List getTableBuilder() {
        return tableBuilder;
    }

    public void setTableBuilder(List tableBuilder) {
        this.tableBuilder = tableBuilder;
    }
}

暂时就酱=。=

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351