Comment échapper les noms de colonne avec trait d'union dans Spark SQL
J'ai importé un fichier json dans Spark et convertd dans un tableau comme
myDF.registerTempTable("myDF")
Je veux exécuter des requêtes SQL sur cette table résultante
val newTable = sqlContext.sql("select column-1 from myDF")
Cependant, cela me donne une erreur à cause du tiret dans le nom de la colonne column-1
. Comment puis-je résoudre ce est Spark SQL?
Essayer de s'échapper avec des guillemets simples sqlContext.sql("select 'colonne, 1 "de myDF")
Qui ne fonctionne pas car il permettra de traiter 'colonne, 1" comme une chaîne, pas un nom de colonne.
Le SQL-99 standard spécifie que le guillemet double (") est utilisé pour délimiter des identificateurs. Essayez avec des guillemets peut-être de garder les extérieurs dans des guillemets simples
exécuter la requête comme
Qui ne fonctionne pas car il permettra de traiter 'colonne, 1" comme une chaîne, pas un nom de colonne.
Le SQL-99 standard spécifie que le guillemet double (") est utilisé pour délimiter des identificateurs. Essayez avec des guillemets peut-être de garder les extérieurs dans des guillemets simples
exécuter la requête comme
"""select "column-1" from myDF"""
OriginalL'auteur sfactor | 2015-06-17
Vous devez vous connecter pour publier un commentaire.
Backticks (`) semble fonctionner, de sorte
devrait faire l'affaire, au moins dans Spark v1.3.x.
yay!!! les œuvres du côlon.
OriginalL'auteur PermaFrost
A été à elle pendant un peu hier, il s'avère qu'il est un moyen d'échapper à la (:) et un (.) comme:
Seulement le champ contenant (:) a besoin d'être échappés avec des backticks
OriginalL'auteur GreenThumb
Je ne peux pas dire que j'ai moins de 50 reps
Lorsque vous faites référence à une structure json avec struct.struct.champ et il y a un espace de noms comme:
ns2:struct.struct.domaine les backticks(`) ne fonctionne pas.
pyspark.sql.utils.AnalysisException: u"ne peut pas résoudre '
sn2:AnyAddRq.AnyInfo.noInfo.someRef.myInfo.someData.Name
'Si je supprime le sn2: les champs, la requête s'exécute.
J'ai aussi essayé avec l'apostrophe ('), barre oblique inverse (\) et les guillemets("")
La seule façon dont il fonctionne si si j'enregistre une autre table temporaire sur le sn2: structure, je suis en mesure d'accéder aux champs de l'intérieur comme si
OriginalL'auteur GreenThumb