我正在从Azure数据湖分析中查询Azure SQL数据库中的表,并且遇到效率低下的查询。
查询很简单,全部为SELECT * FROM EXTERNAL Datasource EXECUTE @"SELECT *FROM externalTable
。该表包含超过6000万行。
挑战在于,在执行u-sql脚本以检索所有这6000万行时,u-sql仅将这些操作拆分为一个顶点,从而无法扩展工作。
如果将查询分为X个其他“零件查询”,在每个零件查询中检索一部分总行,然后在末尾组合所有零件查询,则显然会得到X个顶点。
演示“部分查询”:
SELECT * FROM EXTERNAL Datasource EXECUTE @"SELECT *FROM externalTable
where registered >= GETDATE()-10000 and Registered !> GETDATE()-8000
union all
SELECT * FROM EXTERNAL Datasource EXECUTE @"SELECT *FROM externalTable where registered >= GETDATE()-7999 and Registered !> GETDATE()-6000
我的问题是,这是有效查询外部数据源的首选方法,还是我错过了一些东西?
答案 0 :(得分:0)
尝试将参与跨数据库查询的SQL Azure数据库服务器和Data Lake资源放在同一区域中,以提高性能。
您还可以通过在Azure SQL数据库端参数化弹性查询来批量检索所有这些数百万条记录。可以将参数化的操作推送到远程数据库,并在Azure数据湖侧进行远程评估。进一步了解here。