将BQ查询的输出分配给变量

时间:2017-07-27 13:12:01

标签: mysql shell google-bigquery

我正在尝试查询BigQuery中分区的总数,并将结果存储在mysql表中。我这样做是为了监控目的。

#!/bin/sh
query1="bq query --format=csv 'SELECT COUNT(1) as Count FROM [dataset.tablename] WHERE _PARTITIONTIME = TIMESTAMP(\"$date\")'"
eval result=\$\($query1\)
echo "$result"

bq_insertquery="insert into <<table>>(<<column>>) values(${result})"
echo $bq_insertquery | mysql -u root -p <<dbname>>

在mysql表中插入时出错。这可能是因为变量$ result包括标题和值,即

变量$ result保持:带标题的值

如果我只得到值,看起来myquery将能够插入数据。 我应该如何仅为shell变量赋值,然后再使用它?

编辑:任何sql输出都包含column_name和values。我指定用于存储BigQuery值的变量也包含两者,即column_name和value。我正在寻找一些有助于提取唯一价值的东西。

2 个答案:

答案 0 :(得分:3)

只需添加--quiet标记(在作业运行时忽略状态更新),并将其传递给awk

query1="bq query --quiet --format=csv 'SELECT COUNT(1) as Count FROM [dataset.tablename] WHERE _PARTITIONTIME = TIMESTAMP(\"$date\")' | awk '{if(NR>1)print}'"

enter image description here

答案 1 :(得分:0)

我想使用 template<typename T, typename... Types> constexpr bool are_types_unique_v = (!std::is_same_v<T, Types> && ...) && are_types_unique_v<Types...>; template<typename T> constexpr bool are_types_unique_v<T> = true; 命令来解析查询的 json 输出。在此之前,您需要先安装 jq 命令。这是将计数放入

的方法
jq

它显示输出 result=$(echo -e "select 1 as col" | bq query --nouse_legacy_sql --format=json) echo $result 。现在是使用 [{"col":"1"}] 命令获取最终输出的时候了。

jq

一行:

count=$(echo $count | jq '.[0]' | jq '.col')
echo $count