J'utilise U-SQL pour sélectionner tous les objets qui se trouvent dans une ou plusieurs des formes. Le code fonctionne mais est vraiment lent. Y a-t-il un moyen de le rendre plus performant?Comparaison spatiale lente lors de l'utilisation de la jointure croisée
@rs1 =
SELECT DISTINCT aisdata.imo,
portshape.unlocode
FROM @lsaisdata AS aisdata
CROSS JOIN
@portsshape AS portshape
WHERE Geometry.STMPolyFromText(new SqlChars(portshape.shape.Replace("Z", "").ToCharArray()), 0).STContains(Geometry.Point(aisdata.lon, aisdata.lat, 0)).IsTrue;
a ajouté plus d'informations sur ma question:
- Je me suis inscrit Microsoft.SqlServer.Types.dll et SqlServerSpatial130.dll pour pouvoir utiliser les fonctions spatiales en U-SQL
- I J'exécute mon travail dans Data Lake Analytics en utilisant deux AU. Initialement, j'ai utilisé 10 AU, mais l'onglet Diagnostics indiquait que le travail était de 8 UAs alloué en excès et AU maximum était de 2.
- Le travail prend environ 27 minutes pour exécuter avec le code UDT ci-dessous et la jointure croisée prend presque tout de ce temps
- L'entrée est un fichier csv (66 Mo) et un fichier wkt (2.4 Mb)
- J'utilise Visual studio 2015 avec les outils Azure données Lac v2.2.5000.0
- J'ai essayé encapsulant une partie du code spatial dans les UDT et qui a amélioré la performance à 27 minutes:
@rs1 =
SELECT DISTINCT aisdata.imo,
portshape.unlocode
FROM @lsaisdata AS aisdata
CROSS JOIN
@portsshape AS portshape
WHERE portshape.geoShape.GeoObject.STContains(SpatialUSQLApp.CustomFunctions.GetGeoPoint(aisdata.lon, aisdata.lat).GeoObject).IsTrue;
Un peu plus de détails s'il vous plaît! L'exécutez-vous localement? Combien de temps est "lent"? Combien de données? Qu'en est-il en tant que travail dans Azure avec 200 nœuds de calcul? Toujours lent? Quelle version de Visual Studio? Quelle version de Data Lake Tools avez-vous installée? –