我目前使用名为 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]
我正在尝试过滤包含数组的字段名称
您看到的错误消息,
参数类型的运算符=没有匹配的签名:INT64, 细绳。支持的签名:ANY = ANY at [16:7]
指出 SQL 查询中存在类型不匹配问题。当您尝试使用
=
运算符比较不同数据类型的值时,通常会发生此错误。在您的情况下,比较 security_result[0].severity = "HIGH"
可能是错误的根源,表明 security_result[0].severity 没有按预期返回字符串。您可以使用 BigQuery Web 控制台 验证 severity
字段的数据类型。