[英]How to Insert Data into table with select query in Databricks using spark temp table
我想使用 Azure Data Bricks 中的 SQL 將 Spark 表的結果插入到新的 SQL Synapse 表中。
我嘗試了以下解釋 [https://docs.microsoft.com/en-us/azure/databricks/spark/latest/spark-sql/language-manual/sql-ref-syntax-ddl-create-table-datasource ] 但我沒有運氣。
Synapse 表必須作為SELECT語句的結果創建。 源應該是 Spark / Data Bricks 臨時視圖或 Parquet 源。
例如臨時表
# Load Taxi Location Data from Azure Synapse Analytics
jdbcUrl = "jdbc:sqlserver://synapsesqldbexample.database.windows.net:number;
database=SynapseDW" #Replace "suffix" with your own
connectionProperties = {
"user" : "usernmae1",
"password" : "password2",
"driver" : "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}
pushdown_query = '(select * from NYC.TaxiLocationLookup) as t'
dfLookupLocation = spark.read.jdbc(url=jdbcUrl, table=pushdown_query, properties=connectionProperties)
dfLookupLocation.createOrReplaceTempView('NYCTaxiLocation')
display(dfLookupLocation)
例如源突觸 DW
服務器: synapsesqldbexample.database.windows.net
數據庫: [SynapseDW]
架構: [紐約]
表: [TaxiLocationLookup]
接收器/目標表(尚不存在):
服務器: synapsesqldbexample.database.windows.net
數據庫: [SynapseDW]
架構: [紐約]
新表: [TEST_NYCTaxiData]
我試過的 SQL 語句:
%sql
CREATE TABLE if not exists TEST_NYCTaxiLocation
select *
from NYCTaxiLocation
limit 100
如果使用 com.databricks.spark.sqldw 驅動程序,則需要一個 Azure 存儲帳戶和一個已設置的容器。 一旦到位,實際上很容易實現這一點。
在 Azure Databricks 中配置您的 BLOB 憑據,我采用筆記本中的方法
創建您的 JDBC 連接字符串和 BLOB
將您的 SELECT 語句讀入 RDD/Dataframe
使用 .write 函數將 Dataframe 下推到 Azure Synapse
spark.conf.set( "fs.azure.account.key..blob.core.windows.net", "")
jdbc = "jdbc:sqlserver://.database.windows.net:1433;database=;user=@;password=;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30; ” blob = "wasbs://@.blob.core.windows.net/"
df = spark.read
.format("com.databricks.spark.sqldw")
.option("url", jdbc)
.option("tempDir", blob)
.option("forwardSparkAzureStorageCredentials", "true")
.option("查詢", "SELECT TOP 1000 * FROM <> ORDER BY NEWID()")
。加載()
df.write
.format("com.databricks.spark.sqldw")
.option("url", jdbc)
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "YOURTABLENAME")
.option("tempDir", blob)
.mode("覆蓋")
。節省()
除了@JPVoogt 解決方案之外的另一個選項是在存儲帳戶中創建鑲木地板文件后在 Synapse 池中使用 CTAS。 您可以執行復制命令或外部表。
一些參考:
https://docs.microsoft.com/en-us/azure/synapse-analytics/sql/develop-tables-cetas https://docs.microsoft.com/en-us/azure/synapse-analytics/sql-data -倉庫/快速入門-bulk-load-copy-tsql
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.