Aller au contenu principal
Page traduite

Cette page a été traduite de l'anglais avec l'aide de l'IA. En cas de divergence, la version anglaise fait référence.

SELECT

Renvoie une ou plusieurs instances d'une ressource.

Voir aussi : [ Hiérarchie des ressources StackQL ] [WITH (CTE)] [Fonctions de fenêtrage]


Syntaxe​

selectStatement::=

withClauseSELECTDISTINCT'*'fullFieldNameASaliasfunctionCallASaliaswindowFunctionCallASaliasFROMresourceOUTERJOINresourceONexpressionWHEREexpressionGROUPBYgroupByItem','groupByItemWITHROLLUPHAVINGexpressionORDERBYfullFieldName','fullFieldNameASCDESCLIMITnumber';'

 
 

[ WITH [ RECURSIVE ] <cteName> [ ( <columnList> ) ] AS ( <selectStatement> ) [, ...] ]
SELECT { * | <fieldList> | <windowFunctionCall> [ AS <alias> ] }
FROM { <multipartIdentifier> | <joinStatement(s)> }
[ WHERE <expression> ]
[ GROUP BY <fieldList> ]
[ HAVING <expression> ]
[ WINDOW <windowName> AS ( <windowSpec> ) [, ...] ]
[ ORDER BY <fieldList> [ ASC | DESC ] ]
[ LIMIT <integer> ]
[ UNION <selectStatement> ];

Un JOIN sans clause ON est traité comme un CROSS JOIN ; la condition de jointure peut donc être indiquée dans la clause WHERE. Les versions de StackQL antérieures à v0.12.732 ne parviennent pas à planifier un JOIN sans condition.


Exemples​

Instruction SELECT de base​

Exécutez une instruction SELECT de base dans une session authentifiée.

-- Selecting all resources deployed within a service using a basic SELECT statement
SELECT * FROM google.compute.instances
WHERE project = 'stackql-demo'
AND zone = 'australia-southeast1-a';

Renvoyer des champs précis avec une instruction SELECT​

Exécutez une instruction SELECT avec une liste de colonnes pour renvoyer des champs précis d'une instance Compute Engine.

-- Selecting specified fields from a resource
SELECT id, name
FROM google.compute.instances
WHERE project = 'stackql-demo'
AND zone = 'australia-southeast1-a';

Renvoyer un jeu de résultats trié par une colonne dans l'ordre croissant avec la clause ORDER BY​

Exécutez une instruction SELECT pour renvoyer des champs de la ressource buckets de Cloud Storage, en triant les résultats dans l'ordre croissant (du plus ancien au plus récent).

-- Order a list of Cloud Storage buckets by creation time (in ascending order)
SELECT name, location, timeCreated
FROM google.storage.buckets WHERE project = 'stackql'
ORDER BY timeCreated;

Renvoyer un jeu de résultats trié par une colonne dans l'ordre décroissant avec la clause ORDER BY​

Exécutez une instruction SELECT pour renvoyer des champs de la ressource buckets de Cloud Storage, en triant les résultats dans l'ordre décroissant (du plus récent au plus ancien).

-- Order a list of Cloud Storage buckets by creation time (in descending order)
SELECT name, location, timeCreated
FROM google.storage.buckets WHERE project = 'stackql'
ORDER BY timeCreated DESC;

Obtenir le premier résultat d'une colonne avec les clauses ORDER BY et LIMIT​

Exécutez une instruction SELECT pour renvoyer le bucket Cloud Storage créé le plus récemment.

-- Find the most recently created bucket
SELECT name, location, timeCreated
FROM google.storage.buckets WHERE project = 'stackql'
ORDER BY timeCreated DESC LIMIT 1;

Utiliser la fonction COUNT avec les clauses GROUP BY et HAVING pour compter des ressources selon un regroupement et un filtre​

Exécutez une instruction SELECT avec une fonction COUNT, en utilisant les clauses GROUP BY et HAVING pour renvoyer le nombre de buckets dans chaque emplacement autre que l'Asie.

-- Return a count of the number of buckets in every location other than Asia
SELECT name, location, count(*) as num_buckets
FROM google.storage.buckets WHERE project = 'stackql'
GROUP BY location
HAVING location != 'ASIA';

Pour plus d'informations sur la fonction COUNT et les autres fonctions d'agrégation prises en charge par StackQL, consultez Fonctions d'agrégation.

Obtenir la liste des VM à la demande et de leur interface réseau à partir d'un VM Scale Set Azure​

Exécutez une instruction SELECT utilisant les fonctions SPLIT_PART et JSON_EXTRACT pour obtenir la liste des VM à la demande et de leurs cartes réseau. Notez que, sans qualificateur, subscription_id et resource_group_name s'appliquent aux trois ressources.

SELECT c.name AS vm_name,
SPLIT_PART(JSON_EXTRACT(c.properties,'$.networkProfile.networkInterfaces[0].id'), '/', -1) AS nic_name
FROM
azure.compute.virtual_machine_scale_sets a
INNER JOIN azure.compute.virtual_machine_scale_set_vms b
ON a.name = b.virtualMachineScaleSetName
INNER JOIN azure.compute.virtual_machines c
ON b.name = c.name
WHERE subscription_id = '0123456789'
AND resource_group_name = 'vmss-flex'
AND JSON_EXTRACT(c.properties,'$.priority') is null;

Pour plus d'informations sur les fonctions de fenêtrage, consultez Fonctions de fenêtrage.

Utiliser des expressions de table communes (CTE) avec WITH​

Les CTE permettent de définir des jeux de résultats temporaires nommés qui peuvent être référencés dans la requête principale.

-- Combine and rank contributors across multiple repositories
WITH all_contributors AS (
SELECT login, contributions, html_url
FROM github.repos.contributors
WHERE owner = 'stackql' AND repo = 'stackql'
UNION ALL
SELECT login, contributions, html_url
FROM github.repos.contributors
WHERE owner = 'stackql' AND repo = 'stackql-deploy'
UNION ALL
SELECT login, contributions, html_url
FROM github.repos.contributors
WHERE owner = 'stackql' AND repo = 'stackql-provider-registry'
)
SELECT
DENSE_RANK() OVER (ORDER BY SUM(contributions) DESC) as rank,
login,
SUM(contributions) as total_contributions,
MAX(html_url) as html_url
FROM all_contributors
GROUP BY login
ORDER BY total_contributions DESC;

Pour plus d'informations sur les CTE, consultez WITH (CTE).