Introductie tot BigQuery
Matt Forrest
Field CTO
Er zijn drie hoofdregels voor optimalisatie:
SELECT *; selecteer alleen de kolommen die we nodig hebbenWHERE-clauseINT64-datatype.WITH filter_my_data AS (SELECT
-- Filter data eerst met
-- WHERE in de CTE
)
SELECT
-- Deze query draait
-- sneller met minder data
JOIN a USING (user_id)
Gebruik in BigQuery
BOOLINTFLOATDATE Datatypes met WHERE, STRING of BYTE zijn niet optimaal.
Niet optimaal
SELECT user_id, date_ordered
FROM dataset.table
WHERE product = 'shoes'
Optimaal
SELECT user_id, date_ordered
FROM dataset.table
WHERE product_id = 1234
ORDER BY altijd helemaal aan het einde van je queryORDER BY binnen een window clauseNiet optimaal
WITH order_total AS (SELECT
user_id,
sum(product_price) as order_sum
FROM orders
GROUP BY user_id
-- Order by staat niet aan het einde van de query
ORDER BY last_purchase_date
)
SELECT order_total.order_sum,
users.user_name
FROM dataset.users users
JOIN order_total USING (user_id);
Optimaal
WITH order_total AS (SELECT
user_id,
last_purchase_date
sum(product_price) as order_sum
GROUP BY user_id
)
SELECT order_total.order_sum,
users.user_name
FROM dataset.users users
JOIN a USING (user_id)
-- Order by hoort altijd aan het einde
ORDER BY orders_total.last_purchase_date;
EXISTSCOUNT voor deze usecaseSELECT EXISTS (
-- Schrijf de hoofdquery als subquery binnen de exists-aanroep
SELECT
user_id
FROM
dataset.table
WHERE
product_category = 'home_goods'
AND status = 'Closed Account'
);
APPROX_TOP_SUM of APPROX_COUNT_DISTINCT.WHERE-clause.Introductie tot BigQuery