hiveカスタム関数フィルタemoj表情子
1229 ワード
mysql挿入データ問題:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8D\xE8\xBE…’ for column ‘job_title’ at row 1
問題原因:データの中でEmoj表情の内容が存在して、1文字ごとに4バイトを占有して、Mysqlの中でutf-8はデフォルトで最大3バイトを支持して、超長くて、だから報告は間違っています.解決策:
(1)比較的新しいバージョンのMysqlで、utf 8 mb 4(2)hiveデータ処理を選択してEmoj表情内容(Emojデータは一般的に不要)をフィルタリングし、処理後にMySQLデータベースに統合する.カスタム関数create temporary function StringFilter as'UpUDF.StringFilter’ using jar ‘hdfs://namenodeha/user/p66_u1038_upp_ludp1/tmp/StringFilter.jar’; カスタム関数コードは次のとおりです.
問題原因:データの中でEmoj表情の内容が存在して、1文字ごとに4バイトを占有して、Mysqlの中でutf-8はデフォルトで最大3バイトを支持して、超長くて、だから報告は間違っています.解決策:
(1)比較的新しいバージョンのMysqlで、utf 8 mb 4(2)hiveデータ処理を選択してEmoj表情内容(Emojデータは一般的に不要)をフィルタリングし、処理後にMySQLデータベースに統合する.カスタム関数create temporary function StringFilter as'UpUDF.StringFilter’ using jar ‘hdfs://namenodeha/user/p66_u1038_upp_ludp1/tmp/StringFilter.jar’; カスタム関数コードは次のとおりです.
import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.CharUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/***
* emoj
*
*/
public class StringFilter extends UDF {
public String evaluate(String str){
if(str == null || str == ""){
return null;
}else{
StringBuilder sb = new StringBuilder();
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
for(int i=0; i