Aller au contenu principal

SQL

Renvoie un DataFrame représentant le résultat de la query donnée.

Lorsque kwargs est spécifié, cette méthode formate la chaîne donnée à l'aide de l'outil de formatage Python standard. La méthode lie les paramètres nommés aux littéraux SQL ou aux paramètres positionnels de args. Les parameters nommés et positionnels ne peuvent pas être mélangés dans la même SQL query.

Syntaxe

sql(sqlQuery, args=None, **kwargs)

parameter

parameter

Type

Description

sqlQuery

str

Chaîne de query SQL.

args

dictionnaire ou liste, facultatif

Un dictionnaire de noms de paramètres vers des objets Python, ou une liste d'objets Python qui peuvent être convertis en expressions littérales SQL. Utilisez la syntaxe :param_name pour les paramètres nommés ou ? pour les paramètres positionnels dans la chaîne de requête.

**kwargs

Facultatif

Variables qui peuvent être référencées dans la query à l'aide de la syntaxe de l'outil de formatage Python (par exemple, {varname}). Cette fonctionnalité est expérimentale et instable.

parameter

Type

Description

sqlQuery

str

Chaîne de query SQL.

args

dictionnaire ou liste, facultatif

Un dictionnaire de noms de paramètres vers des objets Python, ou une liste d'objets Python qui peuvent être convertis en expressions littérales SQL. Utilisez la syntaxe :param_name pour les paramètres nommés ou ? pour les paramètres positionnels dans la chaîne de requête.

**kwargs

Facultatif

Variables qui peuvent être référencées dans la query à l'aide de la syntaxe de l'outil de formatage Python (par exemple, {varname}). Cette fonctionnalité est expérimentale et instable.

Renvoie

DataFrame

Notes

Dans Spark Classic, une vue temporaire référencée dans spark.sql est résolue immédiatement. Dans Spark Connect, il est analysé de manière paresseuse, donc si une vue est supprimée, modifiée ou remplacée après spark.sql, l'exécution peut échouer ou générer des résultats différents.

Exemples

Python
# Execute a basic SQL query.
spark.sql("SELECT * FROM range(10) where id > 7").show()
# +---+
# | id|
# +---+
# | 8|
# | 9|
# +---+

# Use Python formatter variables.
spark.sql(
"SELECT * FROM range(10) WHERE id > {bound1} AND id < {bound2}", bound1=7, bound2=9
).show()
# +---+
# | id|
# +---+
# | 8|
# +---+

# Use named parameters with the : prefix.
from pyspark.sql.functions import create_map, lit
mydf = spark.createDataFrame([(1, 4), (2, 4), (3, 6)], ["A", "B"])
spark.sql(
"SELECT *, element_at(:m, 'a') AS C FROM {df} WHERE {df[B]} > :minB",
{"minB": 5, "m": create_map(lit('a'), lit(1))}, df=mydf).show()
# +---+---+---+
# | A| B| C|
# +---+---+---+
# | 3| 6| 1|
# +---+---+---+

# Use positional parameters marked by ?.
from pyspark.sql.functions import array
spark.sql(
"SELECT *, element_at(?, 1) AS C FROM {df} WHERE {df[B]} > ? and ? < {df[A]}",
args=[array(lit(1), lit(2), lit(3)), 5, 2], df=mydf).show()
# +---+---+---+
# | A| B| C|
# +---+---+---+
# | 3| 6| 1|
# +---+---+---+