我正在尝试查询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。我正在寻找一些有助于提取唯一价值的东西。
答案 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}'"
答案 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