«Как избежать пяти распространенных ошибок в Google BigQuery / SQL»

Как избежать пяти распространенных ошибок в Google BigQuery / SQL и добиться успеха

В течение многих лет работы с BigQuery я наблюдал 5 проблем, которые часто возникают, даже у опытных data scientist

Фото от James Harrison на Unsplash

Google BigQuery популярен по многим причинам. Он невероятно быстрый, легкий в использовании, предоставляет полный набор GCP, заботится о вашей информации и помогает обнаруживать ошибки на ранних этапах. Кроме того, вы можете использовать стандартный SQL и некоторые очень полезные встроенные функции. Вкратце, это почти полный пакет!

Всегда предполагайте наличие ошибок и дубликатов, всегда!

Однако, подобно другим веб-сервисам и языкам программирования, при работе с BigQuery есть несколько вещей, о которых нужно знать, чтобы избежать попадания в ловушку. За годы работы я совершил много ошибок и понял, что практически каждый, кого я знаю, в какой-то момент сталкивался с теми же проблемами. Некоторые из этих проблем я хочу выделить здесь, потому что обнаружил их довольно поздно в своей карьере и также видел, что другие очень опытные data scientist сталкиваются с теми же проблемами.

Поэтому я предоставлю вам свой топ-5 потенциальных ошибок, которые почти каждый совершает в BigQuery в какой-то момент и о которых вы, возможно, даже не знаете. Так что убедитесь избегать их, потому что каждый из этих пунктов может иметь серьезные последствия, и помните правильное отношение к работе с данными: всегда предполагайте наличие ошибок и дубликатов, всегда!

1. Будьте осторожны при использовании “NOT IN”

Все происходит так быстро. Вы спешите и хотите быстро проверить две таблицы и увидеть, существует ли определенный элемент, упомянутый в одной из таблиц, также во второй таблице. Почему бы тогда не воспользоваться оператором NOT IN, так как он звучит так интуитивно?

Проблема в том, что NOT IN не работает так, как задумано, когда в вашей таблице есть значения NULL. В таком случае вы не получите желаемых результатов!

Убедитесь сами, взглянув на этот пример кода, в котором я пытаюсь найти категории из input_2, которые не содержатся в input_1:

WITH  input_1 AS (  SELECT    category  FROM (    SELECT      ["a", "b", CAST(NULL AS STRING), "d"] AS category),    UNNEST(category) category ),  input_2 AS (  SELECT…