将视图存储在 Azure Synapse Notebook 的数据框中

问题描述 投票:0回答:1

我尝试使用 Synapse Notebook 将视图的前 100 行从 SQL 数据库存储到数据帧。我尝试过使用这段代码:

%%pyspark
df = spark.sql("SELECT DataType, TableName, ColumnName FROM dbo.ExternalTableSchema LIMIT 100")
df.show()

但即使我已经确认视图名称是正确的,我仍然会收到以下错误。

enter image description here

我还尝试了上面代码的变体:

%%pyspark
df = spark.sql("SELECT TOP (100) [DataType], [TableName], [ColumnName] FROM [dbo].[ExternalTableSchema]")

df.show()

但是我收到了如下所示的不同错误。我不确定如何解决这个问题。任何帮助将不胜感激!

enter image description here

azure-synapse azure-synapse-analytics azure-notebooks
1个回答
0
投票

我尝试过以下方法:

from pyspark.sql import SparkSession
jdbcHostname = "dilisqlsrv.database.windows.net"
jdbcDatabase = "db02"
jdbcPort = "1433"
username = "dilip"
password = "Welcome@1"
jdbcUrl = "jdbc:sqlserver://{0}:{1};database={2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
query = "(SELECT * FROM DepartmentView) AS tmp"
df = spark.read \
    .format("jdbc") \
    .option("url", jdbcUrl) \
    .option("dbtable", query) \
    .option("user", username) \
    .option("password", password) \
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
    .load()
df.show()

结果:

+------+---------+-----------+---------------+
|DeptID| DeptName|   Location|        Manager|
+------+---------+-----------+---------------+
|     1|    Sales|   New York|     John Smith|
|     2|Marketing|Los Angeles|       Jane Doe|
|     3|  Finance|    Chicago|Michael Johnson|
|     4|       HR|    Houston|    Emily Brown|
+------+---------+-----------+---------------+

在上面的代码中我设置了JDBC连接参数 使用下推查询将数据读取到 DataFrame 中。

正如您提到的,您需要查询前 100 行,您可以使用以下内容

query = "(SELECT TOP 100 * FROM YourTableName) AS tmp"

以下是使用 Spark.sql 的方法

tableName = "DepartmentView"
spark.read \
    .format("jdbc") \
    .option("url", jdbcUrl) \
    .option("dbtable", tableName) \
    .option("user", username) \
    .option("password", password) \
    .option("driver", "com.microsoft.sqlserver.jdbc.SQLServerDriver") \
    .load() \
    .createOrReplaceTempView("temp_table")
    
top100_rows_df = spark.sql("SELECT * FROM temp_table LIMIT 100")
top100_rows_df.show()

结果:

+------+---------+-----------+---------------+
|DeptID| DeptName|   Location|        Manager|
+------+---------+-----------+---------------+
|     1|    Sales|   New York|     John Smith|
|     2|Marketing|Los Angeles|       Jane Doe|
|     3|  Finance|    Chicago|Michael Johnson|
|     4|       HR|    Houston|    Emily Brown|
+------+---------+-----------+---------------+

在上面的代码中,将 Azure SQL 数据库表注册为临时视图。 使用spark.sql执行SQL查询读取前100行

© www.soinside.com 2019 - 2024. All rights reserved.