簡體   English   中英

如何使用火花臨時表在 Databricks 中通過選擇查詢將數據插入表中

[英]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 存儲帳戶和一個已設置的容器。 一旦到位,實際上很容易實現這一點。

  1. 在 Azure Databricks 中配置您的 BLOB 憑據,我采用筆記本中的方法

  2. 創建您的 JDBC 連接字符串和 BLOB

  3. 將您的 SELECT 語句讀入 RDD/Dataframe

  4. 使用 .write 函數將 Dataframe 下推到 Azure Synapse

    配置 Blob 憑據

    spark.conf.set( "fs.azure.account.key..blob.core.windows.net", "")

    配置 JDBC 和 BLOB 路徑

    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/"

    將 SYNAPSE 中的數據讀入 DATAFRAME

    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()")
    。加載()

    將數據從 DATAFRAME 寫回 AZURE SYNAPSE

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM