色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

inceptor修改字段長度

劉姿婷2年前17瀏覽0評論

inceptor修改字段長度?

inceptor改字節串長度就是要在導入函數之前對文件作出修改。

最近遇到一個導數需求,需要把inceptor中的數據按照每個字段定長(指定字節數)導出成文本文件。思路如下:1)到處inceptor表到hdfs,這個過程,主要處理字段長度,補位,去小數點,規范行分隔符和切分文件2)取hdfs文件到本地,這個過程,主要處理文件名稱的規范化,增加首行字段名,及獲取記錄數樣例腳本

#!/bin/sh

#說明#1)腳本需要在能執行beeline和hadoop命令的機器上執行#2)部分用戶執行beeline和hadoop命令時可能會找不到命令,請配置好環境變量,或者使用命令的絕對路徑

導出數據到hdfs##執行腳本前提前建好導出數據的中間表#–如果需要指定換行(\n) 、回車(\r)為分隔符,則建表語句如下。這里注意,windows的行分隔符是 \r\n , linux 下默認是\n#create table test(aa string);#ROW FORMAT DELIMITED#LINES TERMINATED BY ‘\r\n’;

#連接inceptor

v_conn_ipt=“beeline -u jdbc:hive2://tdh4:10000/tpcds_orc_2”#指定導出的文件個數v_file_num=“set mapred.reduce.tasks=5;”

##每次執行前需要清空臨時表v_clean_table=“truncate table test;”

#導出數據sql##注意,使用shell腳本封裝時,這里是 四個反斜杠 ‘\\’ ,直接在inceptor 里直接執行這里只需要兩個反斜杠 ‘\’v_load_string=“insert into testselect lpad(s_store_sk,5,‘0’)||-- 數字左補0,右對齊rpad(s_store_name,8,’ ‘)|| – 字符右補空格,左對齊regexp_replace(to_char(trunc(s_tax_precentage,2),‘0.00’),’\\.’,’’) as aa --數值型,去掉小數點,trunc直接截取合適的小數,to_char 格式化,replace去掉小數點from store distribute by rand();”

##執行導出語句把需要導出的文件寫到hdfs

${v_conn_ipt} -e “${v_file_num} ${v_clean_table} ${v_load_string}”

數據導出到本地并添加表頭行數等信息#文件導出路徑v_file_path="/inceptorsql1/user/hive/warehouse/tpcds_orc_2.db/hive/test"v_files=hadoop fs -ls ${v_file_path}|awk '{ print $8 }'#文件導出的本地路徑v_target_path=/root/xwz/

j=0for i in $v_filesdoecho ${i}#根據接口規范定義文件名,邏輯自行補充v_new_file_name=“xxx_xxx_${j}.TXT”echo “${v_new_file_name}”#把字段名寫入文件第一行echo “s_store_sk|s_store_name|s_tax_precentage”>${v_target_path}${v_new_file_name}#導出hdfs文件到本地hadoop fs -cat ${i}>>${v_new_file_name}#如果需要獲取每個文件的記錄數使用如下命令v_count=hadoop fs -cat ${i}|wc -lecho “文件${v_new_file_name}的記錄數為:${v_count}”j=expr ${j} + 1

done

遇到的問題中文及rapd 補位問題

在inceptor中,rpad 計算的是字符數,不是字節數,而Oracle的rpad是計算的字節數。此時當出現中文時,Oracle會把一個中文當兩個字節算 rpad(f1,12,’ ‘) 當f1為 “中國”Oracle會在后面補充8個空格,字節數為12。inceptor會把一個中文當兩個字節算 rpad(f1,12,’ ‘) 當f1為 “中國” f1,算兩個字符,Oracle會在后面補充10個空格,此時實際字節數就超過了12了。處理方式因為inceptor一個中文字符是3或4個字節,使用rpad按字符個數補的話,只會多補,不會少,使用substrb 函數對 inceptor 中rpad多補的字節數直接截斷,substrb函數是切割指定的字節長度比如對中文字段f1要指定定長12字節,可以使用 substrb(rpad(f1,12,’ '),1,12)

java 封裝字段,inceptor修改字段長度