当值不存在时,默认 sum 运算符为 0
Posted
技术标签:
【中文标题】当值不存在时,默认 sum 运算符为 0【英文标题】:Default sum operator to 0 when values dont exist 【发布时间】:2018-10-29 10:26:30 【问题描述】:我正在使用以下查询来计算 GKE 集群中节点的成本(为提高可读性而添加了新行)
sum(
kube_node_status_capacity_cpu_cores * on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labels
label_cloud_google_com_gke_preemptible = "true"
) * 5.10 +
sum(
kube_node_status_capacity_cpu_cores * on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labels
label_cloud_google_com_gke_preemptible = ""
) * 16.95
如果集群具有可抢占节点,则它可以工作,因为至少有一个节点具有label_cloud_google_com_gke_preemptible = "true"
,因此第一个 sum 运算符返回一个值。
当集群没有可抢占节点时失败,因为没有具有label_cloud_google_com_gke_preemptible = "true"
的节点,因此第一个总和没有返回值
是否可以修改查询以使第一个总和返回 0 值?
【问题讨论】:
【参考方案1】:如果一个值不存在,您可以使用or
插入一个值:
(
sum(
kube_node_status_capacity_cpu_cores
* on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labelslabel_cloud_google_com_gke_preemptible = "true"
) * 5.10
or
vector(0)
)
+
sum(
kube_node_status_capacity_cpu_cores
* on(node) group_left(label_cloud_google_com_gke_nodepool)
kube_node_labelslabel_cloud_google_com_gke_preemptible = ""
) * 16.95
【讨论】:
你,我的朋友,是个天才!以上是关于当值不存在时,默认 sum 运算符为 0的主要内容,如果未能解决你的问题,请参考以下文章