首页 > 其他分享 >【Doris 系列】actual column number in csv file is less than schema column number

【Doris 系列】actual column number in csv file is less than schema column number

时间:2024-11-19 10:59:19浏览次数:1  
标签:actual column number record fieldIndex sink doris

问题

Flink SQL 写 Doris表,报错 actual column number in csv file is less than schema column number.

现象

FLINK SQL 定义的 Schema 明明有 m 列,结果写入的时候 报错实际的列有 m+1列。

CREATE TABLE DORIS_SINK (
  ID STRING,
  NAME STRING,
  BANK STRING,
  AGE INT
) with  (
   'connector' = 'doris',
   'sink.properties.format' = 'json',
   'sink.properties.read_json_by_line' = 'true',
   'sink.properties.columns' = 'id,name,bank,age',
   'sink.properties.partial_columns' = 'true'
)

分析

其实 sink.enable-delete 默认 true,则 Connector 在做 StreamLoad 的时候,会自动追加一列。

先往 header 里面加

    public HttpPutBuilder addHiddenColumns(boolean add) {
        if(add){
            header.put("hidden_columns", LoadConstants.DORIS_DELETE_SIGN);
        }
        return this;
    }

再往 SteamLoad 的数据里头加列

org.apache.doris.flink.sink.writer.RowDataSerializer#buildJsonString


    public String buildJsonString(RowData record, int maxIndex) throws IOException {
        int fieldIndex = 0;
        Map<String, String> valueMap = new HashMap<>();
        while (fieldIndex < maxIndex) {
            Object field = rowConverter.convertExternal(record, fieldIndex);
            String value = field != null ? field.toString() : null;
            valueMap.put(fieldNames[fieldIndex], value);
            fieldIndex++;
        }
        if (enableDelete) {
            valueMap.put(DORIS_DELETE_SIGN, parseDeleteSign(record.getRowKind()));
        }
        return objectMapper.writeValueAsString(valueMap);
    }

参考 Doris写入数据异常提示actual column number in csv file is less than schema column number

结论

可能已经修复了,具体怎么修复的,原理未知。

https://github.com/apache/doris-flink-connector/issues/28
生效版本的起点难以确定。分析 jar source 和 Github 上的分支源码也对不上。

经过测试版本 24.0.1 不需要加隐藏列。

另外,对于低版本、未生效的 flink-doris-connector,必须设置为 false,即便Flink SQL的Schema加上 __DORIS_DELETE_SIGN__列也不行。

判断标准是:
//org.apache.doris.flink.deserialization.converter.DorisRowConverter

    public GenericRowData convertInternal(List record) {
        //BUG:GenericRowData rowData = new GenericRowData(record.size());
        //修复后
        GenericRowData rowData = new GenericRowData(deserializationConverters.length);
        for (int i = 0; i < deserializationConverters.length ; i++) {
            rowData.setField(i, deserializationConverters[i].deserialize(record.get(i)));
        }
        return rowData;
    }

标签:actual,column,number,record,fieldIndex,sink,doris
From: https://www.cnblogs.com/slankka/p/18554428

相关文章

  • CF1499D The Number of Pairs 题解 线性筛
    题目链接:https://codeforces.com/problemset/problem/1499/D题目大意:给你三个整数\(c,d,x\)(\(1\lec,d,x\le10^7\)),问:存在多少对正整数对\((a,b)\)满足:\[c\cdotlcm(a,b)-d\cdotgcd(a,b)=x\]其中,\(lcm(a,b)\)表示整数\(a\)和\(b\)的最大公约数,\(gcd(a,......
  • Leetcode 3352. Count K-Reducible Numbers Less Than N
    Leetcode3352.CountK-ReducibleNumbersLessThanN1.解题思路2.代码实现题目链接:3352.CountK-ReducibleNumbersLessThanN1.解题思路这一题的话思路上我是拆成了两步来做的,首先,我们要认识到,这里的变化本质就是看数的二进制表达当中有多少个1,因此,假设给定......
  • 2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除, 我们称
    2024-11-16:哈沙德数。用go语言,如果一个整数能够被它的各个数位上数字的和整除,我们称这个整数为哈沙德数(Harshadnumber)。给定一个整数x,如果x是哈沙德数,则返回x各个数位的数字和;如果不是,则返回-1。输入:x=18。输出:9。解释:x各个数位上的数字之和为9。18能被9......
  • vue3 h函数应用,el-table-v2定义column
    一、引入import{h}from'vue'二、column属性cellRenderer使用h函数h函数中嵌套Element组件Popconfirm{title:'注释',width:165,flexGrow:1,key:"str",dataKey:"str",cellRenderer:({rowData}:any)=>{......
  • [LeetCode] 1343. Number of Sub-arrays of Size K and Average Greater than or Equa
    Givenanarrayofintegersarrandtwointegerskandthreshold,returnthenumberofsub-arraysofsizekandaveragegreaterthanorequaltothreshold.Example1:Input:arr=[2,2,2,2,5,5,5,8],k=3,threshold=4Output:3Explanation:Sub-arrays[2......
  • lua插件之----【luaNumber 数字类】
    API列表(自写API,供自查询。对您无用,不要看了) 接口原型说明 luaNumber.isInt(n,than,zero) 检测是否是整形数。支持字符型数字luaNumber.isFloat(n,than)检测是否是浮点数。支持字符型数字luaNumber.rndInt(sInt,eInt)随机整数luaNumber.rndInts(sInt,......
  • Telegram此号码已被封禁,快速解封的方法,解除this phone number is banned提醒
    在Telegram使用过程中,偶尔会出现手机号码被禁用的情况,当出现这种情况时,Telegram手机端和电脑PC端都会自动掉线并退出。当再次尝试登陆时候就会提示此手机号码已被封禁。如果您在使用Telegram过程中没有严重的违规操作,比如批量发送广告被多人举报等,大可不必紧张,只需要进行简单的操......
  • arkUI:Column和Rom的间距设置(列向,横向)
    arkUI:Column和Rom的间距设置(列向,横向)1主要内容说明2相关内容举例和说明2.1Column的间距(列的间距)2.1.1源码1(Column的间距)2.1.2源码1运行效果2.2Row的间距(横向间距)2.2.1源码2(Row的间距)3.结语4.定位日期1主要内容说明Column:垂直布局组件,子组件从上到下依次......
  • 解决mysql 的 [HY000][1356] View ‘information_schema.TABLES‘ references invalid
    同事在修改mysql用户权限时修改了关于mysql.infoschema的权限信息,导致无法访问information_schema库下的所有视图,使用数据库连接工具连接MySQL数据库时出现报错情况,使用MySQL终端登录并执行show命令同样报错。报错信息如下:ERROR1356(HY000):View'information_s......
  • 闯关leetcode——3270. Find the Key of the Numbers
    大纲题目地址内容解题代码地址题目地址https://leetcode.com/problems/find-the-key-of-the-numbers/description/内容Youaregiventhreepositiveintegersnum1,num2,andnum3.Thekeyofnum1,num2,andnum3isdefinedasafour-digitnumbersuch......