Google bigquery 不为空不为“;过滤“;在大查询中正确
我正在处理大查询,并按预期返回结果,只需一个小细节。尽管我的Google bigquery 不为空不为“;过滤“;在大查询中正确,google-bigquery,Google Bigquery,我正在处理大查询,并按预期返回结果,只需一个小细节。尽管我的不是空的限制,我仍然得到大量的NULL结果。据我所知,它正在检查错误的值是否为null 我要检查的是“firebase_screen”值是否为空。我试过以下方法: SELECT event_name, event_timestamp, event_date, ( SELECT value.string_value FROM UNNEST (event_params) WHERE key
不是空的
限制,我仍然得到大量的NULL
结果。据我所知,它正在检查错误的值是否为null
我要检查的是“firebase_screen”值是否为空。我试过以下方法:
SELECT
event_name,
event_timestamp,
event_date,
(
SELECT
value.string_value
FROM
UNNEST (event_params)
WHERE
key = "firebase_screen" and key IS NOT NULL) as app_screen,
FROM
`my_table_name`
WHERE
event_name = 'button_click'
并尝试:
SELECT
event_name,
event_timestamp,
event_date,
(
SELECT
value.string_value
FROM
UNNEST (event_params)
WHERE
key = "firebase_screen" and value.string_value IS NOT NULL) as app_screen,
FROM
`my_table_name`
WHERE
event_name = 'button_click'
你知道如何正确地“过滤”掉null
结果吗?
在这两种情况下,我得到的结果都是一样的
这是我从大查询中得到的原始JSON示例:
{
"key": "firebase_screen",
"value": {
"string_value": "home screen",
"int_value": null,
"float_value": null,
"double_value": null
}
}
下面是两个查询的相同输出示例
| event_name | event_timestampe | event_date | app_screen |
|--------------|------------------|------------|-------------------|
| button_click | 1593616723965003 | 20200701 | null |
| button_click | 1593616726265005 | 20200701 | null |
| button_click | 1593616806351000 | 20200701 | maintain_screen_1 |
因为您的app_screen字段是select子句中的一个子查询,所以如果该子查询的结果为null,您将在输出中选择null 考虑一下这样的情况:
select event_name, event_timestamp, event_date, value.string_value as app_screen
from `my_table_name`
left join unnest(event_params) ep
where event_name = 'button_click' -- main table logic
and ep.key = 'firebase_screen' and ep.value.string_value is not null -- unnested logic
这应该会让您更接近,但如果没有精确的表模式,我无法保证这正是您想要的。
key=“firebase\u screen”和key不为NULL
这是一个同义反复。如果它等于该字符串,则根据定义它不为null。你没有说要检查键,而是要检查值。当然你的意思是string\u值不为NULL
或类似值,以便按照你的要求检查值是否为NULL。正在修复。显示第二个SQL查询的所需和当前(错误)输出。您只显示了一条记录,其中的值不为null,但您抱怨包含null。它们在哪里?刚刚添加了一个示例@underline_dwy为什么您的输出有一个名为trvscreen
的列,但两个查询都没有?为什么它有一个值maintain\u screen\u 1
不在您的输入JSON中?谢谢!我得到了这个错误:字段名string\u value在[28:47]的STRUCT中不存在,它指的是值。string\u value
在上一个和
语句中,我进行了编辑。因为您没有提供模式,所以我不得不猜测一下key
和string\u value
的确切位置。如果我的编辑不起作用,查询的一般流程应该会起作用,您只需要检查前缀并验证字段的实际位置。这让我走上了正确的道路,解决了问题!谢谢你的帮助。