使用Java stream load 出现部分空值

【详述】使用java Stream Load 到starrocks 部分值为null,数据column之间以^分割;导入成功,没有错误日志,但是本该全部有值得列campaign_name,出现了null;导入前数据示例如下:

【背景】做过哪些操作?
【业务影响】
【StarRocks版本】例如:2.5.1
【集群规模】例如:3fe(1 follower+2observer)+5be(fe与be混部)
【机器信息】CPU虚拟核/内存/网卡,例如:48C/64G/万兆
【表模型】:主键模型 建表sql
– 创建活动数据同步表
CREATE TABLE if not exists campaign_data_sync (
caid varchar(64) NOT NULL COMMENT “项目id(系统)”,
campaign_type varchar(64) NULL COMMENT “项目类型”,
campaign_name varchar(64) NULL COMMENT “项目名称”,
campaign_start datetime NOT NULL COMMENT “项目开始时间”,
campaign_end datetime NOT NULL COMMENT “项目结束时间”,
campaign_id varchar(64) NULL COMMENT “项目id,project_id”,
bm varchar(64) NULL COMMENT “bm单号”,
agency_id varchar(64) NULL COMMENT “代理id”,
agency_name varchar(64) NULL COMMENT “代理名称”,
account_launch_type varchar(64) NULL COMMENT “账号投放类型”,
total_amount double NOT NULL COMMENT “项目总金额”,
total_estimated_imp bigint(20) NOT NULL COMMENT “项目总预估曝光”,
total_estimated_click bigint(20) NOT NULL COMMENT “项目总预估点击”,
total_estimated_clue bigint(20) NOT NULL COMMENT “项目总预估线索”,
sub_car_type varchar(64) NULL COMMENT “细分车型名称”,
sub_car_type_id varchar(64) NULL COMMENT “细分车型id”,
car_type varchar(64) NULL COMMENT “车型大类名称”
) ENGINE=OLAP
PRIMARY KEY (caid)
DISTRIBUTED BY HASH(caid) BUCKETS 1
PROPERTIES (
“replication_num” = “1”,
“enable_persistent_index” = “true”
);

【导入或者导出方式】例如:java
try {
HttpPut put = new HttpPut(loadUrl);
StringEntity entity = new StringEntity(content, “UTF-8”);
put.setHeader(“Expect”, “100-continue”);
put.setHeader(“Authorization”, this.basicAuthHeader(STARROCKS_USER, STARROCKS_PASSWORD));
put.setHeader(“column_separator”, SEPARATOR);
if (!columns.equals((Object)null)) {
put.setHeader(“columns”, columns);
}

                put.setHeader("label", UUID.randomUUID().toString());
                put.setEntity(entity);

                try {
                    CloseableHttpResponse response = client.execute(put);
                    Throwable var12 = null;}

}
【联系方式】tianshangzhu1@163.com
【附件】

  • fe.log/be.INFO/相应截图

能构造个最小复现case吗

可以:代码如下:
public static void main(String[] args) {
String loadUrl = String.format(“http://%s/api/%s/%s/_stream_load”, “43.136.220.154:8040”, “faw_rawdata_test”, “campaign_data_sync”);
HttpClientBuilder httpClientBuilder = HttpClients.custom().setRedirectStrategy(new DefaultRedirectStrategy() {
protected boolean isRedirectable(String method) {
return true;
}
});
String content = “1603314179412852737^1^哈哈哈2022年探岳PA上市传播-流量媒体-场景内容扩散^2022-08-24T00:00^2022-09-30T00:00^2315990^20523128^108^三人行传媒集团股份有限公司^\N^4237799.20^608309320^2594131^0^探岳^152^探岳\n” +
“1603319960048762880^2^2022年ID.CROZZ 强化传播-腾讯^2022-11-02T00:00^2022-12-31T00:00^XS22110201^20528993^110^北京腾讯信息技术有限公司^信息流^4770000.00^0^0^22500^ID.家族^145^ID.家族\n” +
“1603320214378774528^1^2022年二季度SUV家族传播补强规划-流量媒体2^2022-04-29T00:00^2022-07-05T00:00^PS22042901^20514311^108^三人行传媒集团股份有限公司^\N^3164792.00^2875000^2875^0^揽境^148^揽境\n” +
“1603320464090857473^1^2022年B Main车型亮相传播规划-字节^2022-10-15T00:00^2022-11-11T00:00^2326382^20524840^108^三人行传媒集团股份有限公司^\N^3179944.35^67226000^302276^0^揽巡^150^揽巡\n” +
“1603320465588224001^1^2022年揽境强化传播媒介规划-内容精准赋能^2022-06-16T00:00^2022-08-31T00:00^2306364^20516478^108^三人行传媒集团股份有限公司^\N^2111898.01^39226000^51475^0^揽境^148^揽境\n” +
“1603320821042905089^1^2022年A级三厢双车上市传播项目-流量媒体-长效内容扩散^2022-06-15T00:00^2022-08-21T00:00^2306398^20517029^108^三人行传媒集团股份有限公司^\N^5279382.27^77373000^506321^0^速腾/宝来^138^A级三厢车\n” +
“1603332545305378817^1^2022年一汽-大众揽巡预售及上市传播-阶段2-垂直媒体^2022-11-08T00:00^2023-01-31T00:00^2335432^20530852^108^三人行传媒集团股份有限公司^\N^7938431.00^356200000^986200^6615^揽巡^150^揽巡\n” +
“1603333297864179713^1^哈哈哈2022 Q4垂直媒体线索提振-懂车帝(阶段一)^2022-11-04T00:00^2022-11-30T00:00^2330203^20528891^111^北京今日头条科技有限公司^\N^4240000.00^146060000^414220^11429^SUV家族^140^SUV家族\n” +
“1604653748490076161^1^2022年一汽-大众揽巡上市传播阶段2-流量媒体^2022-12-08T00:00^2023-01-07T00:00^2335329^20532097^108^三人行传媒集团股份有限公司^\N^3178050.00^35660000^253250^0^揽巡^150^揽巡\n” +
“1604740074178609153^1^2022年ID.CROZZ 7-9月媒体传播规划-垂直媒体-阶段一^2022-09-07T00:00^2022-09-30T00:00^2318642^20523256^108^三人行传媒集团股份有限公司^\N^4238890.00^182990000^469870^0^ID.家族^145^ID.家族\n” +
“1606125702761938944^2^2022年ID.CROZZ 7-9月媒体传播规划-流量媒体2^2022-09-03T00:00^2022-10-11T00:00^XS2022090301^20522641^108^三人行传媒集团股份有限公司^信息流^4292818.85^0^0^22500^ID.家族^145^ID.家族\n” +
“1610525446024200193^1^2022年一汽-大众揽巡预售及上市传播-阶段2-二线垂媒^2022-12-08T00:00^2023-01-31T00:00^2335440^20528761^108^三人行传媒集团股份有限公司^\N^1060000.00^143900000^1562100^0^揽巡^150^揽巡\n” +
“1610954263691788288^2^2022年8-11月揽境效果广告传播规划^2022-09-01T00:00^2022-12-23T00:00^XS22090101^20524399^110^北京腾讯信息技术有限公司^信息流^9540000.00^0^0^64286^揽境^148^揽境\n” +
“1612290328201527297^1^2022年一汽-大众揽巡预售及上市传播-硬核标签-阶段2-知乎^2022-12-08T00:00^2023-01-31T00:00^2335352^20530607^108^三人行传媒集团股份有限公司^\N^1059952.40^67447100^280842^0^揽巡^150^揽巡\n” +
“1612645418028498945^1^哈哈哈哈哈2022年年末垂媒冲刺项目^2022-12-12T00:00^2022-12-31T00:00^2335762^20532065^108^三人行传媒集团股份有限公司^\N^20403081.00^835195000^2254460^0^SUV家族^140^SUV家族\n” +
“1612708833312899073^1^2022年探岳PA上市传播-流量媒体-上市活动扩散^2022-08-24T00:00^2022-09-15T00:00^2315986^20522797^108^三人行传媒集团股份有限公司^\N^7949000.00^678900000^7795000^0^探岳^152^探岳\n” +
“1619944779464835073^1^W-2022年揽巡上市传播-百度搜索^2022-11-03T00:00^2022-12-31T00:00^PX22110305^20529451^109^新意互动数字技术有限公司^\N^1966460.75^37803808^675631^0^揽巡^150^揽巡\n” +
“1619956834439790593^1^未来+缺少中间排期^2022-11-03T00:00^2023-05-30T00:00^2329957^20528249^111^北京今日头条科技有限公司^\N^7420000.00^218918000^734822^10000^揽巡^150^揽巡\n” +
“1625052172448169984^1^2023年CNY开门红媒介传播-垂媒合作^2023-02-10T00:00^2023-03-31T00:00^2341044^20534635^209^广东省广告集团股份有限公司^\N^16422365.00^787920000^3637415^35637^全系^136^品牌活动\n” +
“1625741496034525185^1^2023年重点车型搜索投放项目-百度搜索^2023-02-17T00:00^2024-02-16T00:00^PZ23021701^20535226^214^致维科技(北京)有限公司^\N^28474240.00^231242100^11689490^0^重点车型+品牌^139^品牌活动\n” +
“1626061429683519488^2^2022年ID.CROZZ 12月媒体传播规划-巨量引擎效果通^2022-12-08T00:00^2023-06-20T00:00^XG2022120801^20528989^209^广东省广告集团股份有限公司^信息流^1590000.00^0^0^7950^ID.家族^145^ID.家族\n” +
“1627930906419265537^1^2022年11-12月度重点车型-百度搜索投放项目^2022-11-01T00:00^2022-12-31T00:00^PX22110104^20529228^109^新意互动数字技术有限公司^\N^3732375.74^25069669^1642766^0^重点车型+品牌^139^品牌活动”;

    try {
        CloseableHttpClient client = httpClientBuilder.build();
        Throwable var7 = null;

        try {
            HttpPut put = new HttpPut(loadUrl);
            StringEntity entity = new StringEntity(content, "UTF-8");
            put.setHeader("Expect", "100-continue");
            put.setHeader("Authorization", "Basic cm9vdDo=");
            put.setHeader("column_separator", "^");
            put.setHeader("columns", "caid,campaign_type,campaign_name,campaign_start,campaign_end,campaign_id,bm,agency_id,agency_name,account_launch_type,total_amount,total_estimated_imp,total_estimated_click,total_estimated_clue,sub_car_type,sub_car_type_id,car_type");
            put.setHeader("label", UUID.randomUUID().toString());
            put.setEntity(entity);

            try {
                CloseableHttpResponse response = client.execute(put);
                System.out.println("执行完成~~~" + response.toString());
            } catch (Exception e) {
            }
        } catch (Exception e) {
        }
    } catch (Exception e) {

    }
}

已解决,是因为内容长度超过了字段长度限制。这种情况下导入starrocks也不会报错,只是会将超长的舍弃(当成null处理);有一点不明白的是starrocks的字段长度是怎么定义的,这个内容在java的长度是53;在starrocks 中使用varchar(64) 就超长了。

变长字符串是以UTF-8编码存储的,因此通常英文字符占1个字节, 中文字符 占3个字节