美文网首页
Impala在kudu中创建含中文字段名的表

Impala在kudu中创建含中文字段名的表

作者: hbtszyt | 来源:发表于2019-08-06 15:05 被阅读0次

    方案:通过kudu的API创建含中文字段的表,然后在Impala中创建外部表进行关联。下面详细介绍该方案。

    1、调用Kudu的JavaAPI,创建含有中文字段的表,代码如下:

    public static void createTable(){

            KuduClient client = new KuduClient.KuduClientBuilder("127.0.0.1:7051").build();

            List<ColumnSchema> columns = new LinkedList<ColumnSchema>();

            columns.add(newColumn("id", Type.STRING, true));

            columns.add(newColumn("字段1", Type.STRING, false));

            columns.add(newColumn("字段2", Type.STRING, false));

            Schema schema = new Schema(columns);

            CreateTableOptions options = new CreateTableOptions();

            // 设置表的replica备份和分区规则

            List<String> parcols = new LinkedList<String>();

            parcols.add("id");

            // replica数量

            options.setNumReplicas(3);

            // hash分区的列

            options.addHashPartitions(parcols, 10);

            try {

                client.createTable("kudu_test", schema, options);

            } catch (KuduException e) {

                e.printStackTrace();

            }finally {

                try {

                    client.close();

                } catch (KuduException e) {

                    e.printStackTrace();

                }

            }

        }

    2、在Imapla中创建上述Kudu表的外部表,脚本如下:

    CREATE EXTERNAL TABLE IF NOT EXISTS kudu_test

    STORED AS KUDU

    TBLPROPERTIES (

      'kudu.table_name' = 'kudu_test'

    );

    3、当查询上述外部表的时候会有如下错误信息:

    AnalysisException: Failed to load metadata for table: 'kudu_test' CAUSED BY: TableLoadingException: Add request failed : INSERT INTO `COLUMNS_V2` (`CD_ID`,`COMMENT`,`COLUMN_NAME`,`TYPE_NAME`,`INTEGER_IDX`) VALUES (?,?,?,?,?)

    这是因为Impala在存储kudu表的元数据信息时,原数据表的字段编码不支持中文导致的。以下是COLUMNS_V2表的相关信息

    4、解决Impala元数据不支持中文

    找到Imapla的元数据库中(我的元数据库名为metastore),在该元数据库修改COLUMNS_V2表中字段的编码格式,可以执行如下SQL:

    ALTER TABLE `COLUMNS_V2` CHANGE `COMMENT` `COMMENT` VARCHAR(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

    ALTER TABLE `COLUMNS_V2` CHANGE `COLUMN_NAME` `COLUMN_NAME` VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;

    ALTER TABLE `COLUMNS_V2` CHANGE `TYPE_NAME` `TYPE_NAME` VARCHAR(4000) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

    执行完上述SQL,刷新下Impala的元数据,就能在Impala中查询含有中文字段的kudu表了。

    相关文章

      网友评论

          本文标题:Impala在kudu中创建含中文字段名的表

          本文链接:https://www.haomeiwen.com/subject/qrtwdctx.html