【发布时间】:2017-04-01 09:10:21
【问题描述】:
我正在使用 U-SQL 来选择一个或多个形状内的所有对象。该代码有效,但确实很慢。有什么方法可以提高性能吗?
@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;
添加了有关我的问题的更多信息:
- 我已经注册了 Microsoft.SqlServer.Types.dll 和 SqlServerSpatial130.dll 以便能够在 U-SQL 中使用空间函数
- 我正在使用两个 AU 在 Data Lake Analytics 中运行我的工作。最初我使用了 10 个 AU,但“诊断”选项卡显示该作业过度分配了 8 个 AU,最大有用 AU 为 2。
- 使用下面的 UDT 代码运行该作业大约需要 27 分钟,而交叉连接几乎花费了所有时间
- 输入是一个 csv 文件 (66 Mb) 和一个 wkt 文件 (2.4 Mb)
- 我正在使用 Visual Studio 2015 和 Azure Data Lake Tools v2.2.5000.0
- 我尝试在 UDT 中封装一些空间代码,从而将性能提高到 27 分钟:
@rs1 =SELECT DISTINCT aisdata.imo,portshape.unlocodeFROM @lsaisdata AS aisdataCROSS JOIN@portsshape AS portshape
WHERE portshape.geoShape.GeoObject.STContains(SpatialUSQLApp.CustomFunctions.GetGeoPoint(aisdata.lon, aisdata.lat).GeoObject).IsTrue;
【问题讨论】:
-
请详细一点!你是在本地运行吗? “慢”有多长?多少数据?在 Azure 中拥有 200 个计算节点的工作怎么样?还是慢?什么版本的 Visual Studio?您安装了哪个版本的 Data Lake Tools?
标签: azure-data-lake u-sql