Heute befassen wir uns eingehender mit der WHERE-Anweisung in BigQuery. In diesem zweiten Teil unserer kostenlosen BigQuery-Kursreihe zur Verwendung der WHERE-Anweisung werden wir uns mit fortgeschrittenen Filtertechniken wie der LIKE-Anweisung, dem Umgang mit NULL-Werten, der Verwendung logischer Operatoren und der Nutzung der REGEXP_CONTAINS-Funktion für genauere Abfragen befassen. Egal, ob Sie BigQuery noch nicht kennen oder Ihre Fähigkeiten verbessern möchten, diese Tipps helfen Ihnen dabei, Ihre Datenabfragen zu verfeinern, um bessere Einblicke zu erhalten. Wenn Sie den ersten Teil immer noch nicht gelesen haben, lesen Sie unbedingt „Die WHERE-Anweisung verstehen: Teil 1“.
Fangen wir mit der LIKE-Anweisung an. Die LIKE-Anweisung ist ein leistungsstarkes Tool für den Musterabgleich in SQL-Abfragen. Der Vorteil der LIKE-Anweisung besteht darin, dass Sie Zeilen anhand von Teilübereinstimmungen filtern können, indem Sie das Prozentzeichen (%) als Platzhalter verwenden.
SELECT *
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
WHERE name LIKE '%Fillmore St%'
ORDER BY name
Diese Abfrage wählt alle Spalten aus dem bike_share_station_info
Tabelle. Es filtert Zeilen, in denen Name
enthält „Filmore St“ an einer beliebigen Stelle in der Zeichenfolge. Das Ergebnis ist sortiert nach Name
Spalte.
SELECT *
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
WHERE name NOT LIKE '%Fillmore St%'
ORDER BY name
Diese Abfrage wählt alle Spalten aus dem bike_share_station_info
Tabelle, wo Name
enthält nirgends in der Zeichenfolge „Filmore St“.
In SQL stehen NULL-Werte für fehlende oder undefinierte Daten. Es ist wichtig, dass Sie NULLs in Ihren Abfragen richtig behandeln.
SELECT *
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
WHERE region_id IS NULL
ORDER BY name
Diese Abfrage wählt alle Spalten aus der Tabelle 'bike_share_station_info' aus und filtert Zeilen, in denen die 'region_id' NULL ist
Hinweis: Um nach NULL-Werten zu suchen, verwenden Sie 'IS NULL' statt '='
Eine Beispielabfrage für NOT NULL lautet:
SELECT *
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
WHERE region_id IS NOT NULL
ORDER BY name
Diese Abfrage wählt alle Spalten aus der Tabelle 'bike_share_station_info' aus und filtert Zeilen, in denen die 'region_id' nicht NULL ist
Logische Operatoren ermöglichen es Ihnen, mehrere Bedingungen in Ihrer WHERE-Klausel zu kombinieren. Die UND
Der Operator verlangt, dass alle Bedingungen wahr sind, während der ODER
Der Operator erfordert, dass mindestens eine Bedingung wahr ist.
Beispielabfrage mit UND:
SELECT *
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
WHERE region_id IS NULL
AND name LIKE '%st%'
ORDER BY name
Diese Abfrage wählt alle Spalten aus der Tabelle 'bike_share_station_info' aus und filtert Zeilen, in denen die region_id nicht NULL ist und der Name der Station die Enden „St“ enthält
Beispielabfrage mit ODER:
SELECT *
FROM `bigquery-public-data.san_francisco_bikeshare.bikeshare_station_info`
WHERE region_id IS NULL
OR name LIKE '%st%'
ORDER BY name
Diese Abfrage wählt alle Spalten aus dem'bike_share_station_info'
Tabelle und filtert Zeilen, entweder ist die region_id NULL oder der Stationsname enthält „ST“.
Das REGEXP_CONTAINS
Mit der Funktion in BigQuery können Sie reguläre Ausdrücke für den Mustervergleich verwenden. Dies kann leistungsfähiger und flexibler sein als die LIKE-Anweisung.
Beispielabfrage mit LIKE-Anweisung:
SELECT
order_number,
order_created_at,
customer_id,
product_sku,
product_last_name,
order_rank
FROM `dwh-udemy-course.3_dwh_ecommerce.order_item`
WHERE TRUE
AND product_last_name LIKE '%Hoodie%'
ORDER BY order_created_at
Beispielabfrage mit REGEX:
SELECT
order_number,
order_created_at,
customer_id,
product_sku,
product_last_name,
order_rank
FROM `dwh-udemy-course.3_dwh_ecommerce.order_item`
WHERE REGEXP_CONTAINS(product_last_name,'Hoodie')
ORDER BY order_created_at
Diese Abfrage wählt alle Spalten aus der Tabelle 'order_item' aus und filtert Zeilen, in denen 'product_last_name' die Zeichenfolge „hoodie“ enthält, mithilfe eines regulären Ausdrucks. Im Gegensatz zur LIKE-Anweisung erfordert 'REGEX_CONTAINS' kein Prozentzeichen, was es für komplexe Muster einfacher macht.
Wenn Sie beispielsweise ein Prozentzeichen mit REGEX_CONTAINS hinzufügen, wird der Prozentsatz als Teil der Zeichenfolge betrachtet, nicht als Sonderzeichen
Beispiel für eine Abfrage
SELECT
order_number,
order_created_at,
customer_id,
product_sku,
product_last_name,
order_rank
FROM `dwh-udemy-course.3_dwh_ecommerce.order_item`
WHERE REGEXP_CONTAINS(product_last_name,'%Hoodie')
ORDER BY order_created_at
Falls Sie Ergebniszeilen abfragen möchten, die das Wort 'Hoodie' nicht enthalten, mit REGEX_CONTAINS
SELECT
order_number,
order_created_at,
customer_id,
product_sku,
product_last_name,
order_rank
FROM `dwh-udemy-course.3_dwh_ecommerce.order_item`
WHERE REGEXP_CONTAINS(product_last_name,'%Hoodie') = FALSE
ORDER BY order_created_at
Sie können mehrere Bedingungen kombinieren, um Ihre Abfragen weiter zu verfeinern.
Hinweis: Vermeiden Sie es, AND und OR zusammen zu verwenden. Falls es unbedingt erforderlich ist, hilft die Verwendung von Klammern dabei, die Reihenfolge der Auswertung zu kontrollieren, wenn die Operatoren AND und OR gemischt werden.
Beispielabfrage:
SELECT
order_number,
order_created_at,
customer_id,
product_sku,
product_last_name,
order_rank
FROM `dwh-udemy-course.3_dwh_ecommerce.order_item`
WHERE REGEXP_CONTAINS(product_last_name,'%Hoodie') = FALSE
AND order_rank = 1
AND (product_sku LIKE 'FA%' OR product_sku LIKE 'FB%')
ORDER BY order_created_at
Diese Abfrage wählt alle Spalten aus der Tabelle order_item aus. Sie filtert Zeilen, in denen product_last_name nicht „Hoodie“ enthält, der order_rank 1 ist und die product_sku mit „FA“ oder „FB“ beginnt.
Die Verwendung von Klammern stellt sicher, dass die OR-Bedingung zusammen mit den AND-Bedingungen korrekt ausgewertet wird.
Für das Abfragen von Daten in BigQuery ist es entscheidend, die WHERE-Anweisung zu verstehen und effektiv zu verwenden. Die LIKE-Anweisung, die NULL-Werte verarbeitet, logische Operatoren und die REGEXP_CONTAINS-Funktion bieten leistungsstarke Möglichkeiten zum Filtern und Verfeinern Ihrer Daten. Durch die Kombination dieser Techniken können Sie präzisere und effizientere Abfragen schreiben, um bessere Erkenntnisse aus Ihren Datensätzen zu gewinnen. Weitere Tutorials und Tipps finden Sie auf unserem DAT-YouTube-Kanal. Vergessen Sie nicht, in unserem Blog auf Medium nach ausführlichen Artikeln zu BigQuery und anderen Datenthemen zu suchen. Viel Spaß beim Abfragen!