<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve in Data Engineering</title>
    <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/175899#M57069</link>
    <description>&lt;P dir="ltr"&gt;Hello &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/268132"&gt;@sudopradip&lt;/a&gt;, I took a look at both internal and external documentation and here is what I found.&lt;/P&gt;
&lt;P dir="ltr"&gt;Credit first. &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/192097"&gt;@SumeshKashyap&lt;/a&gt; had the practical answer early: write through &lt;CODE dir="ltr"&gt;/Volumes&lt;/CODE&gt; or the Files API from inside Databricks, don’t pin the public IP, and open a support ticket. &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/80957"&gt;@DATA&lt;/a&gt;_pulse’s AWS us-east-2 reproduction turned this from an East US oddity into a platform-wide pattern. And your own narrowing to catalogs on Databricks default storage is the piece that ties it together.&lt;/P&gt;
&lt;P dir="ltr"&gt;What’s happening. A connector &lt;CODE dir="ltr"&gt;PUT&lt;/CODE&gt; runs in two steps: the warehouse accepts the statement and returns a short-lived signed URL, then the Python process uploads the file to that URL from wherever it’s running. For a volume on default storage, that URL points at the regional default-storage gateway (&lt;CODE dir="ltr"&gt;eastus.storage.azuredatabricks.net&lt;/CODE&gt; on Azure, &lt;CODE dir="ltr"&gt;us-east-2.storage.cloud.databricks.com&lt;/CODE&gt; on AWS), the gateway the IP and domain docs cover for default storage. For a catalog on your own storage account, the signed URL points at your ADLS account and the gateway never comes into play, which is why the stock dlt load worked in your hybrid workspace. Inside serverless, the gateway hostname resolves to &lt;CODE dir="ltr"&gt;192.168.200.28&lt;/CODE&gt; and nothing answers on 443. The identical private address on two clouds suggests the serverless network plane steers that hostname internally on purpose, and whatever sits there doesn’t accept an upload signed for the internet zone (&lt;CODE dir="ltr"&gt;X-Databricks-Consumer-Network-Zone=internet&lt;/CODE&gt;). The &lt;CODE dir="ltr"&gt;/Volumes&lt;/CODE&gt; path, &lt;CODE dir="ltr"&gt;files.upload()&lt;/CODE&gt; through your workspace host, classic compute, and a laptop all succeed because none of them depend on that DNS answer.&lt;/P&gt;
&lt;P dir="ltr"&gt;On your questions. The docs list &lt;CODE dir="ltr"&gt;PUT INTO&lt;/CODE&gt;, &lt;CODE dir="ltr"&gt;GET&lt;/CODE&gt;, and &lt;CODE dir="ltr"&gt;REMOVE&lt;/CODE&gt; as connector-only commands for external tools, and the default storage page says external clients reach volumes on default storage through the Files API and tables through ODBC and JDBC. Nothing says yes or no about the connector’s &lt;CODE dir="ltr"&gt;PUT&lt;/CODE&gt; running inside serverless against default storage, and the serverless limitations page is silent too, so I’d treat it as unsupported until that changes. I don’t know of a fix or a public known-issue entry, and the default storage page was updated this week without one. Fresh default workspaces on two clouds showing the same private IP points at platform behavior, not your configuration. &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/250262"&gt;@data_pulse&lt;/a&gt; has answered the regions question for AWS us-east-2, with connector 4.4.0 and 4.8.0 both failing.&lt;/P&gt;
&lt;P dir="ltr"&gt;Workarounds. Inside a notebook you’re already in the workspace, so the connector isn’t needed to reach a volume:&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV dir="ltr" tabindex="0" role="group" aria-label="python code"&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;python&lt;/DIV&gt;
&lt;DIV&gt;
&lt;PRE&gt;&lt;CODE class="language-python"&gt;&lt;SPAN&gt;import shutil
shutil.copy("/tmp/file.csv", "/Volumes/&amp;lt;catalog&amp;gt;/&amp;lt;schema&amp;gt;/&amp;lt;volume&amp;gt;/file.csv")&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV dir="ltr" tabindex="0" role="group" aria-label="python code"&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;python&lt;/DIV&gt;
&lt;DIV&gt;
&lt;PRE&gt;&lt;CODE class="language-python"&gt;&lt;SPAN&gt;from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
with open("/tmp/file.csv", "rb") as f:
    w.files.upload("/Volumes/&amp;lt;catalog&amp;gt;/&amp;lt;schema&amp;gt;/&amp;lt;volume&amp;gt;/file.csv", f, overwrite=True)&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P dir="ltr"&gt;Keep &lt;CODE dir="ltr"&gt;PUT INTO&lt;/CODE&gt; for code that runs outside serverless. For dlt, your &lt;CODE dir="ltr"&gt;DatabricksLoadJob&lt;/CODE&gt; subclass overriding &lt;CODE dir="ltr"&gt;_handle_local_file_upload&lt;/CODE&gt; to call &lt;CODE dir="ltr"&gt;files.upload()&lt;/CODE&gt; is the cleanest no-infrastructure fix today, and your dlt issue #4606 proposing a &lt;CODE dir="ltr"&gt;volume_upload_method&lt;/CODE&gt; option is still open as of this week. @SumeshKashyap’s alternatives stand: host the dlt process on classic or job compute, or stage to an ADLS Gen2 external location and load with &lt;CODE dir="ltr"&gt;COPY INTO&lt;/CODE&gt;, which skips the gateway upload entirely. Don’t hardcode the public IP or override DNS in &lt;CODE dir="ltr"&gt;/etc/hosts&lt;/CODE&gt;; those addresses change and you’d be bypassing the routing serverless intends. Allowlisting the &lt;CODE dir="ltr"&gt;192.168.x.x&lt;/CODE&gt; address won’t help either, since the refusal happens at a Databricks-managed endpoint before anything reaches storage.&lt;/P&gt;
&lt;P dir="ltr"&gt;Getting it fixed. Open a support ticket so it’s tracked, and include:&lt;/P&gt;
&lt;UL dir="ltr"&gt;
&lt;LI&gt;both workspace IDs, the region and the &lt;CODE dir="ltr"&gt;sn=&lt;/CODE&gt; value&lt;/LI&gt;
&lt;LI&gt;the serverless environment version and the connector versions tested&lt;/LI&gt;
&lt;LI&gt;the private DNS answer inside serverless versus the public one elsewhere&lt;/LI&gt;
&lt;LI&gt;the minimal repro, plus confirmation that &lt;CODE dir="ltr"&gt;/Volumes&lt;/CODE&gt;, &lt;CODE dir="ltr"&gt;files.upload()&lt;/CODE&gt;, and classic compute all work&lt;/LI&gt;
&lt;LI&gt;that the catalog is on default storage and the same load works on a catalog in your own storage account&lt;/LI&gt;
&lt;LI&gt;your network policy and NCC state, and a link to &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/80957"&gt;@DATA&lt;/a&gt;_pulse’s AWS result&lt;/LI&gt;
&lt;/UL&gt;
&lt;P dir="ltr"&gt;Either outcome helps: a fix, or a line in the limitations docs so the next person doesn’t lose a weekend to it. If you hear back, please post the result here.&lt;/P&gt;
&lt;P dir="ltr"&gt;References:&lt;/P&gt;
&lt;UL dir="ltr"&gt;
&lt;LI&gt;PUT INTO (connector-only): &lt;A href="https://learn.microsoft.com/azure/databricks/sql/language-manual/sql-ref-syntax-aux-connector-put-into" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/sql/language-manual/sql-ref-syntax-aux-connector-put-into&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Default storage in Databricks: &lt;A href="https://learn.microsoft.com/azure/databricks/storage/default-storage" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/storage/default-storage&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;IP addresses and domains, including default storage gateways: &lt;A href="https://learn.microsoft.com/azure/databricks/resources/ip-domain-region" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/resources/ip-domain-region&lt;/A&gt; (Azure), &lt;A href="https://docs.databricks.com/aws/en/resources/ip-domain-region" target="_blank"&gt;https://docs.databricks.com/aws/en/resources/ip-domain-region&lt;/A&gt; (AWS)&lt;/LI&gt;
&lt;LI&gt;Work with files in Unity Catalog volumes: &lt;A href="https://learn.microsoft.com/azure/databricks/volumes/volume-files" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/volumes/volume-files&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Serverless compute limitations: &lt;A href="https://learn.microsoft.com/azure/databricks/compute/serverless/limitations" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/compute/serverless/limitations&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Databricks SDK for Python: &lt;A href="https://learn.microsoft.com/azure/databricks/dev-tools/sdk-python" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/dev-tools/sdk-python&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Databricks SQL Connector for Python: &lt;A href="https://docs.databricks.com/aws/en/dev-tools/python-sql-connector" target="_blank"&gt;https://docs.databricks.com/aws/en/dev-tools/python-sql-connector&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;dlt issue #4606: &lt;A href="https://github.com/dlt-hub/dlt/issues/4606" target="_blank"&gt;https://github.com/dlt-hub/dlt/issues/4606&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P dir="ltr"&gt;Regards,&lt;BR /&gt;Louis&lt;/P&gt;</description>
    <pubDate>Sat, 07 Nov 2026 17:45:37 GMT</pubDate>
    <dc:creator>Louis_Frolio</dc:creator>
    <dc:date>2026-11-07T17:45:37Z</dc:date>
    <item>
      <title>Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolves</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174623#M56881</link>
      <description>&lt;P&gt;From &lt;STRONG&gt;Azure Databricks serverless notebook compute (East US)&lt;/STRONG&gt;, uploading a file to a Unity Catalog volume with the Databricks SQL Connector PUT ... INTO '/Volumes/...' fails at TCP connect with [Errno 111] Connection refused. The warehouse accepts the PUT and returns a signed upload URL, but the client upload to the storage gateway fails.&lt;/P&gt;&lt;P&gt;I hit this via the open-source &lt;STRONG&gt;dlt (data load tool)&lt;/STRONG&gt; Databricks destination, whose "direct load" mode stages files with this exact PUT. I've reproduced it with the &lt;STRONG&gt;bare connector and no dlt&lt;/STRONG&gt;, in &lt;STRONG&gt;two separate workspaces&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Environment&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Cloud/region: Azure, East US (sn=az-eastus-c3 in the signed URL)&lt;/LI&gt;&lt;LI&gt;Compute: serverless notebook, environment version [...]&lt;/LI&gt;&lt;LI&gt;databricks-sql-connector 4.8.0&lt;/LI&gt;&lt;LI&gt;dlt [...] (not needed for the repro)&lt;/LI&gt;&lt;LI&gt;Warehouse: serverless SQL warehouse&lt;/LI&gt;&lt;LI&gt;Metastore: East US Unity Catalog metastore&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Network / egress configuration (checked in the account console)&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Network connectivity configuration (NCC): &lt;STRONG&gt;None&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Network policy: default-policy, egress &lt;STRONG&gt;"Allow access to all destinations"&lt;/STRONG&gt;&lt;/LI&gt;&lt;LI&gt;Compliance security profile: Disabled&lt;/LI&gt;&lt;LI&gt;system.access.outbound_network: no rows at all for the account, so no denied events are logged&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;Error&lt;/STRONG&gt;&lt;/P&gt;&lt;PRE&gt;HTTPSConnectionPool(host='eastus.storage.azuredatabricks.net', port=443): Max retries exceeded with url:&lt;BR /&gt;/api/2.0/fs/files/Volumes/CATALOG/SCHEMA/VOLUME/put_test.txt?...&amp;amp;X-Databricks-Consumer-Network-Zone=internet&amp;amp;sn=az-eastus-c3&amp;amp;...&lt;BR /&gt;(Caused by NewConnectionError(... [Errno 111] Connection refused))&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;What I found&lt;/STRONG&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Inside serverless, eastus.storage.azuredatabricks.net resolves to &lt;STRONG&gt;192.168.200.28&lt;/STRONG&gt; (private), which refuses port 443.&lt;/LI&gt;&lt;LI&gt;Outside Databricks, the same hostname resolves to &lt;STRONG&gt;52.234.168.242&lt;/STRONG&gt; (public).&lt;/LI&gt;&lt;LI&gt;From the same serverless compute, forcing the connection to 52.234.168.242 completes TLS and returns &lt;STRONG&gt;HTTP 400&lt;/STRONG&gt; (expected for an unsigned request), so the gateway itself is reachable and only the internal DNS answer is wrong.&lt;/LI&gt;&lt;LI&gt;The signed URL carries X-Databricks-Consumer-Network-Zone=internet, yet serverless routes that host to an internal IP.&lt;/LI&gt;&lt;LI&gt;From the same serverless compute, writing to the same volume works through:&lt;UL&gt;&lt;LI&gt;/Volumes/... FUSE (shutil.copy): &lt;span class="lia-unicode-emoji" title=":white_heavy_check_mark:"&gt;✅&lt;/span&gt;&lt;/LI&gt;&lt;LI&gt;Databricks SDK WorkspaceClient().files.upload() (workspace host): &lt;span class="lia-unicode-emoji" title=":white_heavy_check_mark:"&gt;✅&lt;/span&gt;&lt;/LI&gt;&lt;LI&gt;SQL connector PUT (storage gateway): &lt;span class="lia-unicode-emoji" title=":cross_mark:"&gt;❌&lt;/span&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;LI&gt;Reproduced in a &lt;STRONG&gt;brand-new serverless workspace with default settings&lt;/STRONG&gt;: the same private IP, the same error, the same az-eastus-c3.&lt;/LI&gt;&lt;LI&gt;The same PUT worked on &lt;STRONG&gt;classic compute&lt;/STRONG&gt; in the original workspace.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;STRONG&gt;Minimal repro (serverless notebook)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;In serverless notebooks, the built-in databricks package shadows the connector's databricks.sql, so the path patch is needed:&lt;/P&gt;&lt;PRE&gt;%pip install databricks-sql-connector&lt;/PRE&gt;&lt;PRE&gt;dbutils.library.restartPython()&lt;/PRE&gt;&lt;PRE&gt;import sys, os, socket, databricks
for p in sys.path:
    c = os.path.join(p, "databricks")
    if os.path.isdir(os.path.join(c, "sql")) and c not in databricks.__path__:
        databricks.__path__.append(c)
from databricks import sql

print(socket.gethostbyname("eastus.storage.azuredatabricks.net"))  # -&amp;gt; 192.168.200.28

ctx = dbutils.notebook.entry_point.getDbutils().notebook().getContext()
open("/tmp/t.txt", "w").write("hi")
with sql.connect(server_hostname="&amp;lt;workspace-host&amp;gt;",
                 http_path="/sql/1.0/warehouses/&amp;lt;id&amp;gt;",
                 access_token=ctx.apiToken().get(),
                 staging_allowed_local_path="/tmp") as conn:
    conn.cursor().execute(
        "PUT '/tmp/t.txt' INTO '/Volumes/&amp;lt;catalog&amp;gt;/&amp;lt;schema&amp;gt;/&amp;lt;volume&amp;gt;/t.txt' OVERWRITE")&lt;/PRE&gt;&lt;P&gt;&lt;STRONG&gt;Questions&lt;/STRONG&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Is SQL connector PUT from &lt;EM&gt;inside&lt;/EM&gt; serverless compute supported? The volume docs list PUT under external tools, and the serverless limitations page doesn't mention it either way.&lt;/LI&gt;&lt;LI&gt;If it is supported, is the private DNS answer for eastus.storage.azuredatabricks.net on serverless a known issue (East US / az-eastus-c3)?&lt;/LI&gt;&lt;LI&gt;Has anyone seen this in other regions?&lt;/LI&gt;&lt;/OL&gt;</description>
      <pubDate>Mon, 26 Oct 2026 10:15:10 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174623#M56881</guid>
      <dc:creator>sudopradip</dc:creator>
      <dc:date>2026-10-26T10:15:10Z</dc:date>
    </item>
    <item>
      <title>Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174634#M56882</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/268132"&gt;@sudopradip&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Short version: the SQL connector's PUT/GET is a staging path meant for external clients. From inside serverless, the storage-gateway hostname resolves through the serverless plane's private DNS to an endpoint that doesn't serve that traffic, so you can't fix it from your code. Inside Databricks, write to the volume through FUSE or the Files API (both already work for you), and open a support ticket for the DNS behaviour.&lt;/P&gt;&lt;P&gt;On your questions:&lt;/P&gt;&lt;P&gt;1. Supported from inside serverless? I couldn't find any doc that says it is. The volumes docs list PUT/GET INTO under connecting from external tools and drivers. For code running on Databricks compute, the documented options are the /Volumes FUSE path and the Files API (WorkspaceClient().files.upload). Your classic-compute success fits this: classic resolves the gateway through normal Azure DNS, while serverless resolves it inside the Databricks-managed network.&lt;/P&gt;&lt;P&gt;2. Private IP for eastus.storage.azuredatabricks.net: you've shown the gateway is reachable on its public IP and only the in-plane DNS answer is wrong, and it happens in a fresh default workspace with no NCC. That puts it on the platform side. Raise it with Azure Databricks support and include the workspace IDs, region/sn=az-eastus-c3, the 192.168.200.28 vs 52.234.168.242 resolution, and your minimal repro. Don't hardcode the public IP as a workaround: those IPs can change, and it bypasses whatever routing serverless intends.&lt;/P&gt;&lt;P&gt;3. Other regions: I haven't tested this outside East US.&lt;/P&gt;&lt;P&gt;Workarounds for the dlt load in the meantime:&lt;/P&gt;&lt;P&gt;- Run the dlt pipeline from classic (job) compute, where direct load works as you've seen.&lt;/P&gt;&lt;P&gt;- Or configure dlt staging to an ADLS Gen2 container that's a UC external location (filesystem staging with an az:// bucket_url plus staging credentials). The databricks destination then loads with COPY INTO from that location and never calls the PUT gateway.&lt;/P&gt;&lt;P&gt;- If you control the load code, write files with shutil.copy to /Volumes/... or files.upload(), then run COPY INTO / read_files from the volume path.&lt;/P&gt;&lt;P&gt;Docs: &lt;A href="https://learn.microsoft.com/azure/databricks/volumes/volume-files" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/volumes/volume-files&lt;/A&gt;&amp;nbsp;and &lt;A href="https://dlthub.com/docs/dlt-ecosystem/destinations/databricks" target="_blank"&gt;https://dlthub.com/docs/dlt-ecosystem/destinations/databricks&lt;/A&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 26 Oct 2026 11:52:24 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174634#M56882</guid>
      <dc:creator>SumeshKashyap</dc:creator>
      <dc:date>2026-10-26T11:52:24Z</dc:date>
    </item>
    <item>
      <title>Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174649#M56884</link>
      <description>&lt;P&gt;hello &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/268132"&gt;@sudopradip&lt;/a&gt;&amp;nbsp;, if the response was helpful, please accept the reply as answer so that it is beneficial for other community members&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 26 Oct 2026 14:06:21 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174649#M56884</guid>
      <dc:creator>SumeshKashyap</dc:creator>
      <dc:date>2026-10-26T14:06:21Z</dc:date>
    </item>
    <item>
      <title>Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174650#M56885</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;P&gt;Update: narrowed scope. It fails when the catalog is on &lt;STRONG&gt;Databricks-managed storage&lt;/STRONG&gt; (storage Databricks owns, outside our Azure subscription, which a serverless workspace uses for a catalog created with no location). In a hybrid workspace, the catalog Databricks creates automatically sits on the workspace's own storage account in our Azure subscription; with that catalog, the same stock dlt load from serverless compute works.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&amp;nbsp;&lt;BR /&gt;thanks&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/192097"&gt;@SumeshKashyap&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;that make sense&lt;BR /&gt;i think i will keep issue open until it's officially documented or confirmed&lt;/P&gt;</description>
      <pubDate>Mon, 26 Oct 2026 14:35:53 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174650#M56885</guid>
      <dc:creator>sudopradip</dc:creator>
      <dc:date>2026-10-26T14:35:53Z</dc:date>
    </item>
    <item>
      <title>Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174656#M56887</link>
      <description>&lt;P&gt;&lt;SPAN&gt;I tested this independently and was able to reproduce a &lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN&gt;very similar failure pattern on AWS us-east-2&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN&gt;, using a Databricks serverless.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Here are the results against the same UC Volume:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Upload method Result&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Direct /Volumes/.. write&lt;/TD&gt;&lt;TD&gt;&lt;SPAN&gt;PASS (byte readback verified)&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN&gt;Databricks SDK Files API (0.40.0)&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD&gt;&lt;SPAN&gt;PASS (byte readback verified)&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;SQL Connector 4.8.0 PUT INTO&lt;/TD&gt;&lt;TD&gt;&lt;SPAN&gt;FAIL (twice)&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;SQL Connector 4.4.0 PUT INTO&lt;/TD&gt;&lt;TD&gt;&lt;SPAN&gt;FAIL (twice)&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;SPAN&gt;SQL Connector 4.8.0 from local Windows&lt;/SPAN&gt;&lt;/TD&gt;&lt;TD&gt;&lt;SPAN&gt;PASS (twice, byte readback verified)&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;STRONG&gt;The interesting part is the gateway connectivity:&lt;/STRONG&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Inside the serverless notebook, us-east-2.storage.cloud.databricks.com resolved to 192.168.200.28, with TCP port 443 returning [Errno 111] Connection refused.&lt;/LI&gt;&lt;LI&gt;Warehouse authentication and simple SELECT succeeded, so the failure occurred later, during the connector's storage-gateway upload.&lt;/LI&gt;&lt;LI&gt;From local Windows, the same gateway resolved to public IP addresses, TCP 443 succeeded, and uploads to the same warehouse and Volume worked&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;SPAN&gt;This confirms that &lt;/SPAN&gt;&lt;STRONG&gt;similar symptoms &lt;/STRONG&gt;beyond Azure East US&lt;SPAN&gt;, including on AWS us-east-2.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;It also suggests the behaviour is not limited to SQL Connector 4.8.0.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The results point toward a storage gateway connectivity issue specific to the serverless execution environment, rather than general UC Volume permissions or SQL warehouse connectivity.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Hopefully this cross-cloud reproduction helps narrow down the investigation.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 26 Oct 2026 15:45:27 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174656#M56887</guid>
      <dc:creator>data_pulse</dc:creator>
      <dc:date>2026-10-26T15:45:27Z</dc:date>
    </item>
    <item>
      <title>Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174909#M56942</link>
      <description>&lt;P&gt;Thanks &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/250262"&gt;@data_pulse&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;span class="lia-unicode-emoji" title=":raising_hands:"&gt;🙌&lt;/span&gt; This helps a lot! We can now rule out my Databricks setup as the cause; it's a real but.&lt;/P&gt;&lt;P&gt;The fact that it works from Windows points to how the core service handles Databricks-managed storage access from notebooks, narrow down the issue.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 29 Oct 2026 06:13:01 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174909#M56942</guid>
      <dc:creator>sudopradip</dc:creator>
      <dc:date>2026-10-29T06:13:01Z</dc:date>
    </item>
    <item>
      <title>Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174918#M56946</link>
      <description>&lt;P&gt;Welcome&amp;nbsp;&lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/268132"&gt;@sudopradip&lt;/a&gt;&amp;nbsp;. Glad it helped to narrow down further.&lt;/P&gt;</description>
      <pubDate>Thu, 29 Oct 2026 08:41:55 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/174918#M56946</guid>
      <dc:creator>data_pulse</dc:creator>
      <dc:date>2026-10-29T08:41:55Z</dc:date>
    </item>
    <item>
      <title>Re: Serverless notebook: UC volume PUT via SQL connector fails *.storage.azuredatabricks.net resolve</title>
      <link>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/175899#M57069</link>
      <description>&lt;P dir="ltr"&gt;Hello &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/268132"&gt;@sudopradip&lt;/a&gt;, I took a look at both internal and external documentation and here is what I found.&lt;/P&gt;
&lt;P dir="ltr"&gt;Credit first. &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/192097"&gt;@SumeshKashyap&lt;/a&gt; had the practical answer early: write through &lt;CODE dir="ltr"&gt;/Volumes&lt;/CODE&gt; or the Files API from inside Databricks, don’t pin the public IP, and open a support ticket. &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/80957"&gt;@DATA&lt;/a&gt;_pulse’s AWS us-east-2 reproduction turned this from an East US oddity into a platform-wide pattern. And your own narrowing to catalogs on Databricks default storage is the piece that ties it together.&lt;/P&gt;
&lt;P dir="ltr"&gt;What’s happening. A connector &lt;CODE dir="ltr"&gt;PUT&lt;/CODE&gt; runs in two steps: the warehouse accepts the statement and returns a short-lived signed URL, then the Python process uploads the file to that URL from wherever it’s running. For a volume on default storage, that URL points at the regional default-storage gateway (&lt;CODE dir="ltr"&gt;eastus.storage.azuredatabricks.net&lt;/CODE&gt; on Azure, &lt;CODE dir="ltr"&gt;us-east-2.storage.cloud.databricks.com&lt;/CODE&gt; on AWS), the gateway the IP and domain docs cover for default storage. For a catalog on your own storage account, the signed URL points at your ADLS account and the gateway never comes into play, which is why the stock dlt load worked in your hybrid workspace. Inside serverless, the gateway hostname resolves to &lt;CODE dir="ltr"&gt;192.168.200.28&lt;/CODE&gt; and nothing answers on 443. The identical private address on two clouds suggests the serverless network plane steers that hostname internally on purpose, and whatever sits there doesn’t accept an upload signed for the internet zone (&lt;CODE dir="ltr"&gt;X-Databricks-Consumer-Network-Zone=internet&lt;/CODE&gt;). The &lt;CODE dir="ltr"&gt;/Volumes&lt;/CODE&gt; path, &lt;CODE dir="ltr"&gt;files.upload()&lt;/CODE&gt; through your workspace host, classic compute, and a laptop all succeed because none of them depend on that DNS answer.&lt;/P&gt;
&lt;P dir="ltr"&gt;On your questions. The docs list &lt;CODE dir="ltr"&gt;PUT INTO&lt;/CODE&gt;, &lt;CODE dir="ltr"&gt;GET&lt;/CODE&gt;, and &lt;CODE dir="ltr"&gt;REMOVE&lt;/CODE&gt; as connector-only commands for external tools, and the default storage page says external clients reach volumes on default storage through the Files API and tables through ODBC and JDBC. Nothing says yes or no about the connector’s &lt;CODE dir="ltr"&gt;PUT&lt;/CODE&gt; running inside serverless against default storage, and the serverless limitations page is silent too, so I’d treat it as unsupported until that changes. I don’t know of a fix or a public known-issue entry, and the default storage page was updated this week without one. Fresh default workspaces on two clouds showing the same private IP points at platform behavior, not your configuration. &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/250262"&gt;@data_pulse&lt;/a&gt; has answered the regions question for AWS us-east-2, with connector 4.4.0 and 4.8.0 both failing.&lt;/P&gt;
&lt;P dir="ltr"&gt;Workarounds. Inside a notebook you’re already in the workspace, so the connector isn’t needed to reach a volume:&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV dir="ltr" tabindex="0" role="group" aria-label="python code"&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;python&lt;/DIV&gt;
&lt;DIV&gt;
&lt;PRE&gt;&lt;CODE class="language-python"&gt;&lt;SPAN&gt;import shutil
shutil.copy("/tmp/file.csv", "/Volumes/&amp;lt;catalog&amp;gt;/&amp;lt;schema&amp;gt;/&amp;lt;volume&amp;gt;/file.csv")&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;
&lt;DIV dir="ltr" tabindex="0" role="group" aria-label="python code"&gt;
&lt;DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;DIV&gt;python&lt;/DIV&gt;
&lt;DIV&gt;
&lt;PRE&gt;&lt;CODE class="language-python"&gt;&lt;SPAN&gt;from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
with open("/tmp/file.csv", "rb") as f:
    w.files.upload("/Volumes/&amp;lt;catalog&amp;gt;/&amp;lt;schema&amp;gt;/&amp;lt;volume&amp;gt;/file.csv", f, overwrite=True)&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P dir="ltr"&gt;Keep &lt;CODE dir="ltr"&gt;PUT INTO&lt;/CODE&gt; for code that runs outside serverless. For dlt, your &lt;CODE dir="ltr"&gt;DatabricksLoadJob&lt;/CODE&gt; subclass overriding &lt;CODE dir="ltr"&gt;_handle_local_file_upload&lt;/CODE&gt; to call &lt;CODE dir="ltr"&gt;files.upload()&lt;/CODE&gt; is the cleanest no-infrastructure fix today, and your dlt issue #4606 proposing a &lt;CODE dir="ltr"&gt;volume_upload_method&lt;/CODE&gt; option is still open as of this week. @SumeshKashyap’s alternatives stand: host the dlt process on classic or job compute, or stage to an ADLS Gen2 external location and load with &lt;CODE dir="ltr"&gt;COPY INTO&lt;/CODE&gt;, which skips the gateway upload entirely. Don’t hardcode the public IP or override DNS in &lt;CODE dir="ltr"&gt;/etc/hosts&lt;/CODE&gt;; those addresses change and you’d be bypassing the routing serverless intends. Allowlisting the &lt;CODE dir="ltr"&gt;192.168.x.x&lt;/CODE&gt; address won’t help either, since the refusal happens at a Databricks-managed endpoint before anything reaches storage.&lt;/P&gt;
&lt;P dir="ltr"&gt;Getting it fixed. Open a support ticket so it’s tracked, and include:&lt;/P&gt;
&lt;UL dir="ltr"&gt;
&lt;LI&gt;both workspace IDs, the region and the &lt;CODE dir="ltr"&gt;sn=&lt;/CODE&gt; value&lt;/LI&gt;
&lt;LI&gt;the serverless environment version and the connector versions tested&lt;/LI&gt;
&lt;LI&gt;the private DNS answer inside serverless versus the public one elsewhere&lt;/LI&gt;
&lt;LI&gt;the minimal repro, plus confirmation that &lt;CODE dir="ltr"&gt;/Volumes&lt;/CODE&gt;, &lt;CODE dir="ltr"&gt;files.upload()&lt;/CODE&gt;, and classic compute all work&lt;/LI&gt;
&lt;LI&gt;that the catalog is on default storage and the same load works on a catalog in your own storage account&lt;/LI&gt;
&lt;LI&gt;your network policy and NCC state, and a link to &lt;a href="https://community.databricks.com/t5/user/viewprofilepage/user-id/80957"&gt;@DATA&lt;/a&gt;_pulse’s AWS result&lt;/LI&gt;
&lt;/UL&gt;
&lt;P dir="ltr"&gt;Either outcome helps: a fix, or a line in the limitations docs so the next person doesn’t lose a weekend to it. If you hear back, please post the result here.&lt;/P&gt;
&lt;P dir="ltr"&gt;References:&lt;/P&gt;
&lt;UL dir="ltr"&gt;
&lt;LI&gt;PUT INTO (connector-only): &lt;A href="https://learn.microsoft.com/azure/databricks/sql/language-manual/sql-ref-syntax-aux-connector-put-into" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/sql/language-manual/sql-ref-syntax-aux-connector-put-into&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Default storage in Databricks: &lt;A href="https://learn.microsoft.com/azure/databricks/storage/default-storage" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/storage/default-storage&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;IP addresses and domains, including default storage gateways: &lt;A href="https://learn.microsoft.com/azure/databricks/resources/ip-domain-region" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/resources/ip-domain-region&lt;/A&gt; (Azure), &lt;A href="https://docs.databricks.com/aws/en/resources/ip-domain-region" target="_blank"&gt;https://docs.databricks.com/aws/en/resources/ip-domain-region&lt;/A&gt; (AWS)&lt;/LI&gt;
&lt;LI&gt;Work with files in Unity Catalog volumes: &lt;A href="https://learn.microsoft.com/azure/databricks/volumes/volume-files" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/volumes/volume-files&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Serverless compute limitations: &lt;A href="https://learn.microsoft.com/azure/databricks/compute/serverless/limitations" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/compute/serverless/limitations&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Databricks SDK for Python: &lt;A href="https://learn.microsoft.com/azure/databricks/dev-tools/sdk-python" target="_blank"&gt;https://learn.microsoft.com/azure/databricks/dev-tools/sdk-python&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;Databricks SQL Connector for Python: &lt;A href="https://docs.databricks.com/aws/en/dev-tools/python-sql-connector" target="_blank"&gt;https://docs.databricks.com/aws/en/dev-tools/python-sql-connector&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;dlt issue #4606: &lt;A href="https://github.com/dlt-hub/dlt/issues/4606" target="_blank"&gt;https://github.com/dlt-hub/dlt/issues/4606&lt;/A&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P dir="ltr"&gt;Regards,&lt;BR /&gt;Louis&lt;/P&gt;</description>
      <pubDate>Sat, 07 Nov 2026 17:45:37 GMT</pubDate>
      <guid>https://community.databricks.com/t5/data-engineering/serverless-notebook-uc-volume-put-via-sql-connector-fails/m-p/175899#M57069</guid>
      <dc:creator>Louis_Frolio</dc:creator>
      <dc:date>2026-11-07T17:45:37Z</dc:date>
    </item>
  </channel>
</rss>

