[英]Replace String in variable from a query using bash
我正在嘗試使用sed
替換查詢中的刺痛。它不會用值替換變量使用下面的代碼
SQL="CREATE EXTERNAL TABLE <table name>( user_id string, file_name string, file_type string, count string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'escapeChar'='\\', 'quoteChar'='\"', 'separatorChar'=',') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://<bucket name>/<folder name>/$client_id/'";
FINALSQL=$(echo $SQL | sed -e "s/\$client_id/$client_id/g")
如果我打印FINALSQL
它返回以下字符串
CREATE EXTERNAL TABLE <table name>( user_id string, file_name string, file_type string, count string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'escapeChar'='\', 'quoteChar'='"', 'separatorChar'=',') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://<bucket name>/<folder name>//'
注意:-這是使用 cli 命令的Athena
查詢
我錯過了替換邏輯中的任何內容嗎? 如有錯誤請指正
問題在於變量SQL
的分配。 如果您執行echo $SQL
,您會看到該變量已經不包含 substring $client_id
,因此沒有任何內容被替換也就不足為奇了。
如果您將其設置為
SQL="CREATE EXTERNAL TABLE <table name>( user_id string, file_name string, file_type string, count string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'escapeChar'='\\', 'quoteChar'='\"', 'separatorChar'=',') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://<bucket name>/<folder name>/\$client_id/'"
你的替換代碼對我有用。
另一個次要的一點是,您使用echo
的方式會將任何空格壓縮到一個空格中。 您當前的 SQL 字符串沒有問題,但以后可能會咬到您。
如果您堅持使用sed
來完成此任務,您可以引用參數來回顯,或者不要使用不必要的管道。 我會簡單地做一個
FINALSQL=$(sed -e "s/\$client_id/$client_id/g" <<<$SQL)
完成任務。 請注意,在任何情況下,您的sed方法僅在client_id
不包含正則表達式字符時才有效,這可能會破壞替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.