# Databricks JDBC connection

**URL:** <https://discuss.dataengineercafe.io/t/databricks-jdbc-connection/398>\
**Category:** พูดคุยเกี่ยวกับ Data Tools ต่าง ๆ\
**Tags:** sql, python, data-pipeline, databricks\
**Created:** [September 2, 2022, 12:30pm UTC](https://discuss.dataengineercafe.io/t/databricks-jdbc-connection/398 "2022-09-02T12:30:55Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![premsurawut](https://avatars.discourse-cdn.com/v4/letter/p/df788c/32.png) [@premsurawut](https://discuss.dataengineercafe.io/u/premsurawut)\
**Post date:** [September 2, 2022, 12:30pm UTC](https://discuss.dataengineercafe.io/t/databricks-jdbc-connection/398/1 "2022-09-02T12:30:55Z")

</div>

สวัสดีครับ มีเรื่องมารบกวนสอบถามครับ

Pipeline situation:

Azure Blob =\> Azure Databricks =\> Azure SQL Server

…ไม่แน่ใจว่าเราสามารถใช้ Databricks ต่อ JDBC connection เพื่ออ่าน data จาก blob แล้วเขียนลงใน Azure SQL Server ได้ไหมครับ หรือถ้าในสถานการณ์นี้สามาถทำแบบไหนได้บ้างครับ

ขอบคุณล่วงหน้าครับ

---

<div class="post-metadata">

**Author:** ![kahnwong](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/kahnwong/32/295_2.png) [@kahnwong](https://discuss.dataengineercafe.io/u/kahnwong)\
**Post date:** [September 2, 2022, 2:17pm UTC](https://discuss.dataengineercafe.io/t/databricks-jdbc-connection/398/2 "2022-09-02T14:17:41Z")

</div>

ทำตามนี้เลย: [Apache Spark connector for SQL Server - Spark connector for SQL Server | Microsoft Docs](https://docs.microsoft.com/en-us/sql/connect/spark/connector?view=sql-server-ver16)

อย่าลืมใส่ jar file ก่อนนะ

azure databricks มันก็คือ spark, จะคุยกะ database ก็ต้องใช้ jdbc driver, ซึ่ง azure sql server จริงๆ แล้วไส้ในมันคือ sql server

ทีนี้ ไม่แน่ใจว่าคุณใช้ databricks ยังไง แต่ถ้าใช้ pyspark, ใช้ jdbc ได้  
แต่ถ้าใช้ pure python, อันนี้ต้องไปลง python library เพิ่มนอกรอบเอาเอง มันคุยกันคนละท่า

---

<div class="post-metadata">

**Author:** ![premsurawut](https://avatars.discourse-cdn.com/v4/letter/p/df788c/32.png) [@premsurawut](https://discuss.dataengineercafe.io/u/premsurawut)\
**Post date:** [September 3, 2022, 2:26pm UTC](https://discuss.dataengineercafe.io/t/databricks-jdbc-connection/398/3 "2022-09-03T14:26:00Z")

</div>

ขอบคุณมากครับ  
ขอโทษทีตอบกลับช้าครับ ตอนนี้สามารถต่อกับ sql server ได้แล้วครับ สามารถเขียน data กลับลงไปที่ sql server ได้แล้ว แต่ติดเรื่อง datatype ของ pyspark กับ spark sql ที่เหมือนจะต่างกันอยู่ครับ

ตอนนี้ใช้วิธีเขียน pyspark ต่อ sql server ด้วย jdbc ตามด้านล่างครับ  
โดยกำหนด datatype ตามนี้ครับ [PySpark StructType & StructField Explained with Examples - Spark by {Examples}](https://sparkbyexamples.com/pyspark/pyspark-structtype-and-structfield/)

columns = [“language”,“users\_count”]  
data = [(“Java”, “20000”), (“Python”, “100000”), (“Scala”, “3000”)]  
df = spark.createDataFrame(data).toDF(\*columns)

df.write.format(‘jdbc’).option(‘url’, url).option(‘user’, username).option(‘password’, password).option(‘table’, tablename).option(‘driver’, driver)

ถ้าจะเปลี่ยนไปใช้ sql จะสามารถคุย sql server ด้วย jdbc แล้วเขียน data กลับเข้าไปแบบ pyspark ข้างบนได้อย่างไงบ้างครับ ลองดูจาก docs แล้วก็ยังหาตัวอย่างไม่เจอครับ

---

<div class="post-metadata">

**Author:** ![kahnwong](https://yyz1.discourse-cdn.com/flex035/user_avatar/discuss.dataengineercafe.io/kahnwong/32/295_2.png) [@kahnwong](https://discuss.dataengineercafe.io/u/kahnwong)\
**Post date:** [September 3, 2022, 2:43pm UTC](https://discuss.dataengineercafe.io/t/databricks-jdbc-connection/398/4 "2022-09-03T14:43:12Z")

</div>

ตัดเรื่อง terminology ไปก่อน กันงง

spark เนี่ย มันคุยได้หลายท่า ถ้าใช้ python จะเรียกว่า pyspark

pyspark เอง สามารถใช้ได้สองแบบ:  
1: spark sql → `df.withColumn("col_name", df["col_name"].cast(IntegerType()))`  
2: sql

```python
df.createOrReplaceTempView("listing")
boundary.createOrReplaceTempView("boundary")

listing_w_province = spark.sql(
    """
    SELECT l.listing_id, l.latitude, l.longitude, b.province
    FROM listing as l, boundary as b
    WHERE l.latitude IS NOT NULL 
        AND l.longitude IS NOT NULL 
        AND ST_Intersects(ST_Point(l.longitude, l.latitude), ST_GeomFromWKT(geometry))
    """
)

```

ถามว่า จะเขียนดาต้าไปที่ sql server ยังไง ก็ต้อง:

1. อ่าน raw data ที่อยู่ใน blob storage → จะได้ spark dataframe มาตัวนึง ซึ่งตรงนี้ ถ้าไม่มีอะไรแปลกๆ ก็น่าจะ infer datatype ให้เองแล้ว
2. `df.write()` ลงไปที่ sql server

edit: fix typo

---

<div class="post-metadata">

**Author:** ![premsurawut](https://avatars.discourse-cdn.com/v4/letter/p/df788c/32.png) [@premsurawut](https://discuss.dataengineercafe.io/u/premsurawut)\
**Post date:** [September 4, 2022, 10:07am UTC](https://discuss.dataengineercafe.io/t/databricks-jdbc-connection/398/5 "2022-09-04T10:07:44Z")

</div>

ขอบคุณมากครับ ตอนนี้พอเข้าใจแล้วครับ ไปอ่าน docs เพิ่มเติมมา เดี๋ยวลองไปทำดูก่อน อาจจะมีมาถามเพิ่มเติมนะครับ ขอบคุณครับ
