SQL WHERE 子句不适用于数组

问题描述 投票:0回答:1

我目前使用名为 retool 的工具从我的 bigquery 实例查询数据。问题是很多字段名称使用数组,而我在

WHERE
子句中使用数组过滤字段名称时遇到了一些问题。

SQL语句如下:

SELECT
    principal.ip AS ip,
    target.resource.product_object_id AS instance_id,
    metadata.product_event_type,
    principal.resource.attribute.labels[0].value AS image_description,
    target.asset.attribute.cloud.vpc.id AS vpc,
    security_result[0].severity AS severity,
    security_result[0].description,
    principal.group.product_object_id AS account_id
FROM
    `bq.datalake.events`
WHERE
    metadata.product_name = "AWS GuardDuty"
    AND security_result[0].severity = "HIGH"
    AND UNIX_SECONDS(TIMESTAMP_SECONDS(metadata.event_timestamp.seconds)) < UNIX_SECONDS(TIMESTAMP "{{endingdate.value}}") 
    AND UNIX_SECONDS(TIMESTAMP_SECONDS(metadata.event_timestamp.seconds)) > UNIX_SECONDS(TIMESTAMP "{{startingdate.value}}");

这是错误消息:

参数类型的运算符 = 没有匹配的签名:INT64、STRING。支持的签名:ANY = ANY at [16:7]

我正在尝试过滤包含数组的字段名称

sql google-bigquery bigdata retool
1个回答
0
投票

您看到的错误消息,

参数类型的运算符=没有匹配的签名:INT64, 细绳。支持的签名:ANY = ANY at [16:7]

指出 SQL 查询中存在类型不匹配问题。当您尝试使用

=
运算符比较不同数据类型的值时,通常会发生此错误。在您的情况下,比较
security_result[0].severity = "HIGH"
可能是错误的根源,表明 security_result[0].severity 没有按预期返回字符串。您可以使用 BigQuery Web 控制台 验证
severity
字段的数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.