gpt4 book ai didi

azure-synapse - 从专用 sql 池和无服务器 sql 池加入 Azure Synapse 中的数据

转载 作者:行者123 更新时间:2023-12-04 07:59:47 25 4
gpt4 key购买 nike

我在 AzureSynapse 无服务器池中定义了一个 View ,它使用 openrowset 获取数据。我在专用 sql 池中的表中也有数据。
我可以做一个连接这两个表的 sql 查询吗?

最佳答案

Azure Synapse Analytics 确实有三个独立的引擎(至少我是这么认为的),您的 SQL 查询必须从这些引擎之一执行,这为您提供了选择:

  • 从专用 SQL 池内部执行。您将有权访问您的专用表,具体取决于您的无服务器 SQL 池的定义 OPENROWSET查询,或许可以到转载 它在专用内,例如作为外部表。如果您已经在 serverless 中创建了一个 View ,那么此时无法直接从专用的引用它。 Dedicated 不像 serverless 那样支持 OPENROWSET(此时)。
  • 从无服务器内部执行。您将无法从专用表直接访问您的表,但您可以使用 CREATE EXTERNAL TABLE AS (CETAS) 将其转储出来。进入您的数据湖,然后您可以使用另一个 OPENROWSET 从无服务器读取它询问。
  • 从 Apache Spark 池执行。使用第三个引擎将其他两个引擎组合在一起。从 Azure Analytics Spark 笔记本中访问专用表就像运行 spark.read.synapsesql 一样简单名称由三部分组成。这是一个简单的例子(在 Scala 中)
    val dfNation = spark.read.synapsesql("tpch_ded.dbo.nation")

    dfNation.show

    dfNation.createOrReplaceTempView("nation")

  • 访问无服务器对象有点复杂,但我在 Jovan Popovich 的启发下得到了这个 Scala 示例 here :
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

    val jdbcHostname = "XXX-ondemand.sql.azuresynapse.net"
    val jdbcPort = 1433
    val jdbcDatabase = "master"

    //Create connection String
    val jdbcUrl = s"jdbc:sqlserver://${jdbcHostname}:${jdbcPort};database=${jdbcDatabase};encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=60;"

    import java.util.Properties
    val props = new Properties()
    val jdbcUsername = "someSQLUser"
    val jdbcPassword = "xxx"
    props.put("user", s"${jdbcUsername}")
    props.put("password", s"${jdbcPassword}")

    val driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    props.put("Driver", s"${driverClass}")

    val sqlQuery = """select top 10 *
    from openrowset(
    bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',
    format = 'parquet') AS rows"""


    // this worked but isn't using the prop object
    val df = spark.read.format("jdbc").
    option("url", jdbcUrl).
    option("user", s"${jdbcUsername}").
    option("password", s"${jdbcPassword}").
    option("Driver", s"${driverClass}").
    option("query", sqlQuery).
    load()

    df.show(false)
    因此,您可以使用 join 将两个数据帧放在笔记本中. Spark 池和无服务器 SQL 池也有 shared metadata model所以你可以在 Spark 中创建托管\非托管表,它们出现在无服务器中。更好的例子 here .
    我们目前正在考虑使用模式 2,它有重复的缺点,但有降低专用 SQL 池成本的优点,即使用专用来导入和处理数据,将其转储出来然后暂停它。
    感觉应该更简单吧?也许我遗漏了一些东西,或者这可能是为了改进路线图。

    关于azure-synapse - 从专用 sql 池和无服务器 sql 池加入 Azure Synapse 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66531172/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com