在shell中用kylin查詢的引號問題

因開發需要在shell上編寫腳本作爲查詢kylin相關數據,在查詢的過程中因爲引號導致列無法識別。後面在同事的l和x的幫助下得出了一個可以使用的解決方案,以供參考。


查詢腳本概述 

通過編寫sql,調用kylin相關api生成腳本,並通過執行腳本生成日誌,在日誌中提取查詢結果,原始查詢腳本如下:

sql='{\"sql\":\"select count(*) as v_cnt from point_data where year=2019 and month=4  \",\"project\":\"kylin1\"}'
echo "curl -X POST --user KYLIN -H \"Content-Type:application/json\" -d $sql locallhost/kylin/api/query > /tmp/kylin_count.log" > /tmp/kylin_sql.sh
sh /tmp/kylin_sql.sh

修改腳本後遇到的問題

因功能需要,在查詢sql中添加指定字段查詢,出現問題:使用在shell上編寫相關腳本並查詢數據,按只有int的字段查詢不會報錯,但如果查詢varchar字段,sql語句一直報錯:

1,在數據(123)旁邊添加單引號,雙引號後,在相關column無法識別。

2,在數據(123)旁添加轉義雙引號後無法解析json

3,在數據(123)旁添加`後出現亂碼

sql='{\"sql\":\"select count(*) as v_cnt from point_data where year=2019 and month=4 and code=123\",\"project\":\"kylin1\"}'
echo "curl -X POST --user KYLIN -H \"Content-Type:application/json\" -d $sql locallhost/kylin/api/query > /tmp/kylin_count.log" > /tmp/kylin_sql.shsh /tmp/kylin_sql.sh

最終解決方案

最後解決方案爲寫出json文件(測試過txt格式,發現不行),再加載該文件,才能避免這個問題,查詢到指定點的數據

echo "{\"sql\":\"select count(*) as v_cnt from point_data where year=2019 and month=4  and code=123 \",\"project\":\"kylin1\"}">./sql.json
echo "curl -X POST --user KYLIN -H \"Content-Type:application/json\" -d @sql.json locallhost/kylin/api/query > /tmp/kylin_count.log" > /tmp/kylin_sql.sh
sh /tmp/kylin_sql.sh

這個問題原因沒有繼續挖下去,沒法定位是shell格式(相關資料沒找到)還是kylin的問題,不過解決方案也很直接(算趟過這個坑了),隨手mark下吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章