Introduction à l'optimisation des coûts et des performances sur BigQuery
Vue d'ensemble
Vous trouverez ci-dessous l'ensemble des requêtes disponibles dans le dépôt GitHub associé à cette série d'articles, accompagnées d'une brève description. Pour chaque cas d'usage, une requête s'appuie sur les vues INFORMATION_SCHEMA, et deux autres sur les sinks d'audit logs BigQuery. Parmi ces dernières, la requête générale — identifiée par le suffixe _general dans le nom de fichier — parcourt l'ensemble des projets du sink, tandis que l'autre effectue la recherche projet par projet et ne porte aucun suffixe particulier.

Cette liste sera enrichie au fil des nouvelles requêtes. N'hésitez pas à formuler vos demandes en commentaire : elles seront ajoutées dès que possible.
Comment lire cette liste
Medium ne prenant pas en charge les tableaux nativement — alors que ce serait la façon la plus logique de présenter ces données —, j'ai opté pour une liste à puces, un compromis raisonnable entre lisibilité et élégance.
La première ligne indique le nom du fichier en gras et en italique, suivi sur la ligne suivante d'une description de la requête, puis des liens sous forme de puces.
La liste des requêtes
- billing_recommendation_per_query.sql
Renvoie chaque requête exécutée durant la période avec une recommandation indiquant si elle s'exécuterait plus efficacement avec une facturation au forfait (flat-rate) ou à la demande (on-demand). La recommandation s'appuie sur le nombre de slots et le volume d'octets analysés.
- concurrent_queries_by_minute.sql
Construit une série temporelle minute par minute sur l'intervalle et renvoie le nombre de requêtes concurrentes exécutées durant cette période.
- concurrent_queries_by_second.sql
Construit une série temporelle seconde par seconde sur l'intervalle et renvoie le nombre de requêtes concurrentes exécutées durant cette période.
- general_job_information.sql
Renvoie un sous-ensemble d'informations générales pour chaque job exécuté durant la période.
- load_job_information.sql
Renvoie des informations générales pour chaque load job exécuté durant la période.
- load_slots_per_minute.sql
Construit une série temporelle minute par minute sur l'intervalle et renvoie le nombre de slots utilisés par les load jobs exécutés durant cette période.
- load_slots_per_second.sql
Construit une série temporelle seconde par seconde sur l'intervalle et renvoie le nombre de slots utilisés par les load jobs exécutés durant cette période.
- longest_running_queries.sql
Renvoie toutes les requêtes exécutées durant l'intervalle ainsi que leurs données de tarification, classées de la plus longue à la plus courte.
- looker_job_information.sql
Renvoie des informations générales pour chaque job exécuté durant la période et associé à un compte de service Looker.
- query_counts.sql
Renvoie chaque requête exécutée durant la période avec son nombre d'exécutions, classée du plus grand au plus petit.
- query_job_information.sql
Renvoie des informations générales pour chaque query job exécuté durant la période.
- query_slots_per_minute.sql
Construit une série temporelle minute par minute sur l'intervalle et renvoie le nombre de slots utilisés par les query jobs exécutés durant cette période.
- query_slots_per_second.sql
Construit une série temporelle seconde par seconde sur l'intervalle et renvoie le nombre de slots utilisés par les query jobs exécutés durant cette période.
- slots_by_day.sql
Construit une série temporelle jour par jour sur l'intervalle et renvoie le nombre de slots utilisés par l'ensemble des jobs exécutés durant cette période.
- slots_by_hour.sql
Construit une série temporelle heure par heure sur l'intervalle et renvoie le nombre de slots utilisés par l'ensemble des jobs exécutés durant cette période.
- slots_by_minute.sql
Construit une série temporelle minute par minute sur l'intervalle et renvoie le nombre de slots utilisés par l'ensemble des jobs exécutés durant cette période.
- slots_by_minute_and_user.sql
Construit une série temporelle minute par minute sur l'intervalle et renvoie le nombre de slots utilisés par l'ensemble des jobs exécutés durant cette période, regroupés par utilisateur.
- slots_by_second.sql
Construit une série temporelle seconde par seconde sur l'intervalle et renvoie le nombre de slots utilisés par l'ensemble des jobs exécutés durant cette période.
- table_query_counts.sql
Renvoie le nombre de jobs ayant ciblé une table durant la période spécifiée. À noter qu'une table existante mais qui n'est ciblée par aucun job n'apparaîtra pas dans le résultat.
- top_billed_labels.sql
Renvoie les coûts par label appliqué aux jobs durant la période spécifiée, classés du label le plus coûteux au moins coûteux.
- top_billed_queries.sql
Renvoie les query jobs exécutés durant la période spécifiée, classés par coût facturé du plus élevé au plus faible.
À noter que des doublons peuvent apparaître si un même job est exécuté plusieurs fois avec les mêmes paramètres.
- top_billed_queries_deduplicated.sql
Renvoie les query jobs exécutés durant la période spécifiée, classés par coût facturé du plus élevé au plus faible.
À noter que cette requête déduplique les jobs et ne renvoie qu'une seule ligne par job. Elle s'exécute nettement plus lentement que la précédente.
- top_complex_queries.sql
Renvoie les query jobs classés du plus complexe au moins complexe. La complexité se mesure au nombre de slots mobilisés pour terminer le traitement.
- top_cost_users.sql
Renvoie les utilisateurs ayant lancé des jobs ainsi que le montant dépensé, classés du plus coûteux au moins coûteux. À noter que les comptes de service y figurent également.
- top_costly_queries.sql
Renvoie les query jobs exécutés durant la période spécifiée avec leur coût total, en intégrant les exécutions multiples dans le calcul. Les résultats sont classés du plus coûteux au moins coûteux.