【问题标题】:SQL query taking too long in azure databricksSQL 查询在 Azure Databricks 中花费的时间太长
【发布时间】:2020-07-10 05:04:35
【问题描述】:

我想使用 Azure Databricks 在 Azure SQL 托管实例中的数据库上执行 SQL 查询。我已使用 spark 连接器连接到 DB。

import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._

val config = Config(Map(
  "url"          -> "mysqlserver.database.windows.net",
  "databaseName" -> "MyDatabase",
  "queryCustom"  -> "SELECT TOP 100 * FROM dbo.Clients WHERE PostalCode = 98074" //Sql query
  "user"         -> "username",
  "password"     -> "*********",
))

//Read all data in table dbo.Clients
val collection = sqlContext.read.sqlDB(config)
collection.show()

我正在使用上述方法来获取数据(来自 MSFT 文档的示例)。在我的情况下,表大小超过 10M。我的问题是 Databricks 如何在这里处理查询?

以下是文档: Spark 主节点连接到 SQL 数据库或 SQL Server 中的数据库,并从特定表或使用特定 SQL 查询加载数据。 Spark 主节点将数据分发到工作节点进行转换。 Worker 节点连接到连接到 SQL Database 和 SQL Server 的数据库,并将数据写入数据库。用户可以选择使用逐行插入或批量插入。

它说主节点获取数据并稍后将工作分配给工作节点。在上面的代码中,在获取数据时,如果查询本身很复杂并且需要时间怎么办?它是否将工作分散到工作节点?或者我必须先将表数据提取到 Spark,然后运行 ​​SQL 查询以获得结果。您建议哪种方法?

【问题讨论】:

  • 如果答案对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记,将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢。

标签: apache-spark azure-sql-database databricks azure-databricks


【解决方案1】:

所以使用上述方法使用单个JDBC连接将表拉到Spark环境中。 如果你想在查询上使用下推谓词,那么你可以这样使用。

val pushdown_query = "(select * from employees where emp_no < 10008) emp_alias"
val df = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, 
properties=connectionProperties)
display(df)

如果您想提高性能而不是在阅读时管理并行性。 您可以根据数据集的列值提供分割边界。

这些选项指定读取时的并行度。如果指定了其中任何一个选项,则必须全部指定这些选项。 lowerBound 和 upperBound 决定分区步长,但不过滤表中的行。因此,Spark 对表中的所有行进行分区并返回。

以下示例使用 columnName、lowerBound、upperBound 和 numPartitions 参数在 emp_no 列上拆分跨执行程序读取的表。

val df = (spark.read.jdbc(url=jdbcUrl,
    table="employees",
    columnName="emp_no",
    lowerBound=1L,
    upperBound=100000L,
    numPartitions=100,
    connectionProperties=connectionProperties))
display(df)

更多详情:使用link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    相关资源
    最近更新 更多