база данных

Почему сравнение и условная агрегация не работают в BigQuery

Share this for your friends.

Почему сравнение и условная агрегация не работают в BigQuery

Почему сравнение и условная агрегация не удались в BigQuery?


BigQuery(BQ) очень полезен для анализа или обработки данных.

Он хорошо справляется с большими объемами данных. Он возвращает итоговый результат в короткие сроки.


Когда мы работаем с большими данными, иногда нам нужно извлечь или обобщить данные, отвечающие определенным условиям.

Обычно мы используем оператор сравнения, как показано ниже.

WHERE COLUMN1 = "A"
SUM(IF(COLUMN1 = "A",1,0)

Но в конкретном случае это не работает.

Почему это не сработало.

Итак, сегодня я расскажу о том, "почему сравнение и условное агрегирование не работает в BigQuery".

Author


Инженер среднего звена (ИИ, системы). Хорошо владеет Python и SQL.

Преимущество для чтения

Вы можете понять, «Почему сравнение и условная агрегация не работают в 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

No 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.

Если вы заинтересованы в них, пожалуйста, прочитайте их.


Share this for your friends.

If you felt this article is useful, please share.

にほんブログ村 IT技術ブログへ

-база данных
-,

© 2024 ITips