python - 保存多个 impala 查询输出以在 python 中使用(不将每个单独的查询保存为 .csv)
问题描述
我在 bash 脚本中运行多个 impala 查询,将它们保存到变量中,在终端中打印出结果,此外,尝试将存储在变量中的输出表保存到 .txt 文件中,然后可以在 python 中以某种方式对其进行解析:
a=$(impala-shell -q "SELECT 1;")
b=$(impala-shell -q "SELECT 2;")
echo -e "print out result of ${a}, ${b}"
输出如下表:
+---+
| 1 |
+---+
| 1 |
+---+
+---+
| 2 |
+---+
| 2 |
+---+
我尝试以一种可以使用 json.load 作为字典加载到 python 中的格式保存表:
import json
with open('impala_results') as f:
data = json.load(f)
通过执行以下操作:
echo -e "{\"a\": $a, \"b\": $b}" > /path/to/impala_results
保存结果,但无论我尝试什么,我都会遇到错误,认为这可能是一个 unicode 编码问题。
ValueError: Invalid control character at: line 1 column 152 (char 151)
ValueError: No JSON object could be decoded
我的意思是,我不相信这一定是最好的做事方式,但是如果可以将表格作为单独且可访问的对象加载到字典中,则解析表格会更容易。可能有另一种方法可以做到这一点,如果是这样,请告诉我。
不过,我真的很想避免保存 20 多个 .csv 文件。
谢谢
解决方案
我认为这个问题的一个潜在解决方案是将所有查询结果保存在一个带有自定义分隔符的 .csv 中,使用类似于以下代码:
impala-shell -q "SELECT * FROM tbl; SELECT '~'; SELECT * FROM tbl2; SELECT '~';" -o /path/to/results.csv -B --output_delimiter=',' --print_header -o
然后在 python 中访问它:
with open('results.csv', mode='r') as csv_file:
results = csv_file.read()
并使用自定义分隔符将结果拆分为单独的列表:
results = [i.split("\n") for i in im.split("~")]
推荐阅读
- python - 如何在 Oracle 11g toad 数据库点中的 yyyy-MM-ddTHH:mm:ss:SSSSSSSZ 中获取日期
- javascript - 运行 discord.js 机器人时出现错误
- r - 遍历数据框并根据条件向列添加增量值
- java - Gson 不序列化 mac 地址
- api - 将 Airtel Money API 集成到我们的网站
- assembly - 在汇编 x86 中对齐
- javascript - 动画螺栓装载机
- ansible - 如何在 ansible 中使用 fetch 模块
- python - 与服务器上运行的 python 脚本保持通信
- excel - 带有 word 文档附件的 VBA 宏电子邮件