
BigQuery(BQ) очень полезен для анализа или обработки данных.
Он хорошо справляется с большими объемами данных. Он возвращает итоговый результат в короткие сроки.
Когда мы работаем с большими данными, иногда нам нужно извлечь или обобщить данные, отвечающие определенным условиям.
Обычно мы используем оператор сравнения, как показано ниже.
WHERE COLUMN1 = "A"
SUM(IF(COLUMN1 = "A",1,0)
Но в конкретном случае это не работает.
Почему это не сработало.
Итак, сегодня я расскажу о том, "почему сравнение и условное агрегирование не работает в BigQuery".
Author

Преимущество для чтения
Вы можете понять, «Почему сравнение и условная агрегация не работают в BigQuery». Тогда вам не нужно беспокоиться о сравнении и условной агрегации.
Данные
Сначала подготовьте данные.
Импортируйте этот CSV-файл как таблицу null_sample
.
Data
col1,col2,col3 a,b,c ,b,c ,,c a,b, a,,
Then you can see table like below.
Стол
Row | col1 | col2 | col3 |
1 | null | b | c |
2 | null | null | c |
3 | a | b | c |
4 | a | b | null |
5 | a | null | null |
Сравнение и условное агрегирование
Они являются прекрасным примером сравнения и условной агрегации.
Мы используем оператор =
.
SQL
SELECT * FROM test.null_sample WHERE col1 = "a"
Result
Row | col1 | col2 | col3 |
1 | a | b | c |
2 | a | b | null |
3 | a | null | null |
Чтобы получить условную сумму, мы можем использовать функции «СУММ» и «ЕСЛИ».
SQL
SELECT SUM(IF(col1="a",1,0)) as sum_col1_a FROM test.null_sample
Result
Row | sum_col1_a |
1 | 3 |
Пример отказа
Тогда они являются примерами неудач.
Они используют !=
, и его сравнение не работает.
SQL
SELECT * FROM test.null_sample WHERE col1 != "a"
Result
Даже при условной агрегации происходит сбой, как показано ниже.
SQL
SELECT SUM(IF(col1="a",1,0)) as sum_col1_a, SUM(IF(col1!="a",1,0)) as sum_col1_not_a, SUM(IF(col2!="a",1,0)) as sum_col2_not_a, SUM(IF(col3!="a",1,0)) as sum_col3_not_a FROM test.null_sample
Result
Row | sum_col1_a | sum_col1_not_a | sum_col2_not_a | sum_col3_not_a |
1 | 3 | 0 | 3 | 3 |
Образец таблицы имеет 5 записей.
В таблице, о количестве не-a
, должно быть 2 в столбце 1.
И это должно быть 5 в col2 или col3.
Почему не удалось собраться.
Почему сравнение и условная агрегация не работают в BigQuery
Причина, по которой сравнение и условная агрегация не работают в BigQuery, — «null».
null
– это специальный , который не возвращает true ни для =
, ни для !=
.
Поэтому, если вы хотите сравнить данные, вы должны заменить null другим значением на «IFNULL» или «COALESCE».
SQL
SELECT * FROM test.null_sample WHERE IFNULL(col1,"") != "a"
Result
Row | col1 | col2 | col3 |
1 | null | b | c |
2 | null | null | c |
Для условной агрегации мы должны использовать «IFNULL» или «COALESCE».
SQL
SELECT SUM(IF(IFNULL(col1,"")="a",1,0)) as sum_col1_a, SUM(IF(IFNULL(col1,"")!="a",1,0)) as sum_col1_not_a, SUM(IF(IFNULL(col2,"")!="a",1,0)) as sum_col2_not_a, SUM(IF(IFNULL(col3,"")!="a",1,0)) as sum_col3_not_a FROM test.null_sample
Result
Row | sum_col1_a | sum_col1_not_a | sum_col2_not_a | sum_col3_not_a |
1 | 3 | 2 | 5 | 5 |
В этом случае мы получили правильные не-a записи и количество не-a.
Заключение
Сегодня я рассказал о "почему сравнение и условное агрегирование не работает в BigQuery".
Причина, по которой сравнение и условная агрегация не работают в BigQuery, — «null».
Это не удается, когда мы пытаемся сравнить null
напрямую.
Решение такое.
Point
- Замените null на «IFNULL» или «COALESCE».

null
очень сложный.Есть и другие статьи о BigQuey.
Если вы заинтересованы в них, пожалуйста, прочитайте их.
Read more