如何通过Curl语句获取InfluxDB的列名(Tags)?以及如何仅提取指定时间范围内使用的列名/标签?
嘿,我懂你的需求——你已经能通过curl把指定时间范围和条件的InfluxDB查询结果导出成CSV到test.txt,但现在只想拿到这个结果里用到的tags(或者你说的“列名”)对吧?下面给你两种实用的方法:
方法1:直接修改InfluxQL查询,只返回Tags/列名
这是最直接的方式,不用处理导出的文件,让InfluxDB直接返回你要的内容:
仅获取符合条件的Tags
如果你只想拿到满足articlenumber和时间范围的数据集里的tag键,把查询语句换成SHOW TAG KEYS即可,对应的curl命令调整为:
curl -G "http://myinfluxdb.com:123/query?u=admin&p=123" \ --data-urlencode "db=dbname" \ --data-urlencode "q=SHOW TAG KEYS FROM xy WHERE \"articlenumber\"=~ /12345678/ and time>='2021-10-30T10:00:00Z' and time<='2021-10-30T11:00:00Z'" \ --data-urlencode "format=csv" \ > used_tags.txt
注意:原来命令里的
-format='csv'写法有误,InfluxDB的查询参数是format,不用加前缀横杠,我已经帮你修正了。
同时获取Tags和字段(Fields)列名
如果你的“列名”还包含fields(非索引的数值字段),可以用SHOW FIELD KEYS,或者合并两个查询一次性返回:
curl -G "http://myinfluxdb.com:123/query?u=admin&p=123" \ --data-urlencode "db=dbname" \ --data-urlencode "q=SHOW TAG KEYS FROM xy WHERE \"articlenumber\"=~ /12345678/ and time>='2021-10-30T10:00:00Z' and time<='2021-10-30T11:00:00Z'; SHOW FIELD KEYS FROM xy WHERE \"articlenumber\"=~ /12345678/ and time>='2021-10-30T10:00:00Z' and time<='2021-10-30T11:00:00Z'" \ --data-urlencode "format=csv" \ > all_column_names.txt
方法2:从已导出的CSV文件中提取列名
如果你已经有了完整的test.txt导出文件,也可以直接用命令行工具快速提取:
提取所有列名(含Tags、Time、Fields)
CSV的第一行就是所有列名,用head命令就能直接获取:
head -n 1 test.txt > all_columns.txt
仅筛选出Tags列名
如果只想从列名里挑出tags,可以先获取该measurement的所有tag列表,再和CSV列名做交集:
# 先获取xy表的所有tag键 curl -G "http://myinfluxdb.com:123/query?u=admin&p=123" \ --data-urlencode "db=dbname" \ --data-urlencode "q=SHOW TAG KEYS FROM xy" \ --data-urlencode "format=csv" | tail -n +2 > all_tags.txt # 把CSV列名拆成每行一个 head -n 1 test.txt | tr ',' '\n' > csv_columns.txt # 取两个文件的交集,就是本次查询用到的tags comm -12 <(sort all_tags.txt) <(sort csv_columns.txt) > used_tags.txt
小提醒:InfluxDB里的
time是默认保留字段,既不是tag也不是field,如果你不需要它,可以手动从结果里排除。
内容的提问来源于stack exchange,提问作者Jason H
相关产品推荐
相关产品推荐

