내 파일에 다음 줄이 있습니다.
select concat_ws('|',column1,'${hiveconf:RUNDATE}'), '${hiveconf:RUNDATE}' as date Group by concat_ws('|',column,'${hiveconf:RUNDATE}')
'${hiveconf:RUNDATE}'
로 교체해야 string('${hiveconf:RUNDATE}')
하지만 에 있는 경우에만 가능합니다 concat_ws
.
concat_ws
따라서 같은 줄에 2개가 있으므로 g
sed를 입력하면 모두 대체되고 RUNDATE
, 삭제하면 g
첫 번째 항목만 대체됩니다.
변경 후 내 행은 다음과 같아야 합니다.
select concat_ws('|',column1,string('${hiveconf:RUNDATE}')), '${hiveconf:RUNDATE}' as date Group by concat_ws('|',column,string('${hiveconf:RUNDATE}'))
그래서 지금까지 제가 수집한 다양한 패턴은 다음과 같습니다.concat_ws('|',column1,coalesce(to_date(timestamp),"") concat_ws('|',columnA,to_date(a.timestamp),'01.01.00.01.01') concat_ws('|',column1,max(to_date(timestamp)),substr(id,1,9)) concat_ws('|',column,timestamp_d,'01.03.02',column2).
필요타임스탬프문자열로 변환된 열입니다. 출력 파일은 다음과 같습니다.
concat_ws('|',column1,coalesce(string(to_date(timestamp)),"") concat_ws('|',columnA,string(to_date(a.timestamp)),'01.01.00.01.01') concat_ws('|',column1,string(max(to_date(timestamp))),substr(id,1,9)) concat_ws('|',column,string(timestamp_d),'01.03.02',column2).
답변1
중첩하지 않는 경우 concat_ws(...)
, 즉 그런 항목이 전혀 없는 경우 concat_ws(... foo() ...)
에는 두 번째 괄호 세트가 없습니다 . 그런 다음 a까지 non이 뒤에 오는 모든 항목을 일치시키고 해당 항목만 concat_ws()
바꿀 수 있습니다 . 이와 같이:concat_ws(
(
${hiveconf:RUNDATE}
$ sed "s/\(concat_ws([^)]*\)\('\${hiveconf:RUNDATE}\)/\1string(\2/g" file
select concat_ws('|',column1,string('${hiveconf:RUNDATE}'), '${hiveconf:RUNDATE}' as date Group by concat_ws('|',column,string('${hiveconf:RUNDATE}')