<?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>article How to migrate from mount points to Unity Catalog Volumes in Technical Blog</title>
    <link>https://community.databricks.com/t5/technical-blog/how-to-migrate-from-mount-points-to-unity-catalog-volumes/ba-p/64422</link>
    <description>&lt;P&gt;&lt;SPAN&gt;Mount points are a convenient pattern to facilitate data access in Databricks, while hiding the complexity of accessing cloud storage directly. Unity Catalog improves the governance of file-based cloud storage with Volumes. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;In this blog post, we use an example to discuss the steps involved in planning and migrating to Volumes.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN&gt;Mount points link remote storage to local storage&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN&gt;The Databricks &lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/en/dbfs/mounts.html" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;documentation&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt; explains mount points as enablers for users “to mount cloud object storage to the Databricks File System (DBFS) to simplify data access patterns for users that are unfamiliar with cloud concepts.” Now, imagine you need to access unstructured data from cloud storage managed by another team or another external party.&amp;nbsp;How would access control work in practice?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_0-1713540376458.png" style="width: 465px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7162iC70F9B482986CD49/image-dimensions/465x416?v=v2" width="465" height="416" role="button" title="lammic_0-1713540376458.png" alt="lammic_0-1713540376458.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Let’s take AWS and S3 storage as an example: Databricks clusters leverage IAM roles to access the different mount points. Therefore, any user on the Databricks workspace with access to the respective clusters can now access these mount points. In Azure, you create mount points via Microsoft Entra ID application service principals; once mounted, all users will have access to that storage account. When rotating the service principal secret, you must unmount and remount the storage.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Unity Catalog on the Databricks Intelligence Platform offers a higher, finer-grained level of governance compared to mount points. With mount points, access control is managed through compute configurations, typically overseen by central IT teams. This approach ties access to the compute resources rather than the data itself, affecting governance. By migrating to Unity Catalog Volumes, you can grant direct access to the data assets, enabling more decentralized governance.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN&gt;Unity Catalog governs volumes&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN&gt;To close this gap, Unity Catalog introduces the concept of &lt;/SPAN&gt;&lt;A href="https://www.databricks.com/blog/announcing-general-availability-unity-catalog-volumes" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;Volumes&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;. Volumes extend the governance layer in the lakehouse from tabular data to &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;any&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; data on storage. This is a critical capability when, for example, building AI applications that source various data shapes and formats.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_1-1713540376489.png" style="width: 705px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7164i8772C221EA8A3A7B/image-dimensions/705x369?v=v2" width="705" height="369" role="button" title="lammic_1-1713540376489.png" alt="lammic_1-1713540376489.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H1&gt;&lt;SPAN&gt;Migration process&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN&gt;Business fit and continuity need to be at the heart of every migration strategy, and good planning is therefore crucial. In times before Unity Catalog, mount points were often used for a twofold purpose:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;To read tabular data from paths to the object storage. In Unity Catalog, this pattern is covered by&amp;nbsp;&lt;/SPAN&gt;&lt;A href="https://docs.databricks.com/en/sql/language-manual/sql-ref-external-tables.html" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;external tables&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="font-weight: 400;" aria-level="1"&gt;&lt;SPAN&gt;To read unstructured data in the object storage. In Unity Catalog, this pattern is covered by the concept of &lt;A href="https://www.databricks.com/blog/announcing-general-availability-unity-catalog-volumes" target="_blank" rel="noopener"&gt;Volumes&lt;/A&gt;.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;In the following sections, we will explore in more detail how to&amp;nbsp;&lt;EM&gt;assess, plan, and execute&lt;/EM&gt; our migration from mounts to Unity Catalog Volumes.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE style="border-color: #FFF8DC; width: 100%; background-color: #fff8dc; border-style: hidden;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" height="166px"&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;BR /&gt;Tip!&lt;BR /&gt;&lt;/STRONG&gt;&lt;BR /&gt;Databricks Labs has released &lt;/SPAN&gt;&lt;A href="https://github.com/databrickslabs/ucx" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;UCX&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;, a companion tool for upgrading to Unity Catalog. UCX automates and simplifies migrations to Unity Catalog; UCX does not cover volumes yet (see this &lt;/SPAN&gt;&lt;A href="https://github.com/databrickslabs/ucx/issues/716" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;feature request&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;). Until that feature is available, please look at the steps outlined in the “execution” section below.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H2&gt;&lt;SPAN&gt;&lt;BR /&gt;Assessment&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;Before you migrate, you need a high-level overview of &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;what&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; to migrate. The assessment phase consists of collating information about the existing mount points including but not limited to: the underlying storage location, impacted code assets (e.g. notebooks, queries, etc.), and where each mount point is being used. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;You can get information about mount points via &lt;/SPAN&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;dbutils.fs.mounts()&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; or by running the UCX assessment. Listing the assets requires “grepping” (searching) across the code base.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Example output below:&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE style="width: 250px;" width="250"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="16.44325290437891%" height="50px"&gt;
&lt;P&gt;&lt;STRONG&gt;Mount point&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="39.946380697050934%" height="50px"&gt;
&lt;P&gt;&lt;STRONG&gt;Cloud storage location&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="43.52100089365505%" height="50px"&gt;
&lt;P&gt;&lt;STRONG&gt;Code assets impacted (notebooks, etc.)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.44325290437891%" height="80px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;/mnt/domainAimages&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="39.946380697050934%" height="80px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;s3://one-blog-post-mount-location-one/images/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="43.52100089365505%" height="80px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;/Workspace/Repos/michele@databricks.com/image-analysis&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.44325290437891%" height="80px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;/mnt/domainBdata&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="39.946380697050934%" height="80px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;abfss://domainb@oneblogpost.dfs.core.windows.net/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="43.52100089365505%" height="80px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;/Workspace/Repos/michele@databricks.com/read-raw-blobs&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.44325290437891%" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;…&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="39.946380697050934%" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;…&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="43.52100089365505%" height="51px"&gt;
&lt;P&gt;&lt;SPAN&gt;…&lt;/SPAN&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Planning&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;&lt;SPAN&gt;For each mount point, you will need to decide:&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;Whether you still need it! There’s no need to migrate mount points that are not in use anymore&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Whether the capability is better served and governed as an external table or volume in the Unity Catalog&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&lt;SPAN&gt;The discriminant is the content, whether it is structured or unstructured data. ​​For unstructured data, mark it as Volume (V); for structured data, mark it as External Table (ET).&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Depending on the number of mount points, storage locations, and business considerations, you may execute the migration in one step or multiple phases. For each mount point, indicate which phase you plan to migrate it in.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Example:&lt;BR /&gt;&lt;BR /&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;TABLE style="width: 100%;"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="183.828px" height="50px"&gt;
&lt;P&gt;&lt;STRONG&gt;Mount point&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="188.531px" height="50px"&gt;
&lt;P&gt;&lt;STRONG&gt;Target (ET / V / remove)&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="58.1406px" height="50px"&gt;
&lt;P&gt;&lt;STRONG&gt;Phase&lt;/STRONG&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="183.828px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;/mnt/domainAimages&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="188.531px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;V&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="58.1406px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;1&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="183.828px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;/mnt/domainBdata&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="188.531px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;ET&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="58.1406px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;2&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="183.828px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;…&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="188.531px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;…&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;TD width="58.1406px" height="51px"&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;…&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;&lt;SPAN&gt;Execution&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P&gt;To help illustrate the steps involved in migrating&amp;nbsp;from mounts to UC Volumes, let us paint the below scenario.&amp;nbsp;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;EM&gt;You have already built an LLM chatbot with RAG that leverages internal confidential documents stored in PDF format. These documents are available from an external location and are currently accessed as a DBFS mount point. &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;By migrating to UC Volumes, you will gain finer grained access control on these confidential documents and are able to (via&amp;nbsp;&lt;A href="https://docs.databricks.com/en/data-governance/unity-catalog/data-lineage.html" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;data lineage)&lt;/SPAN&gt;&lt;/A&gt;&amp;nbsp;audit the flow of information to keep track of how the PDF content feeds the LLM chatbot.&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;In the current configuration, the PDF documents are available under the mount point&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;/mnt/michele/&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;which is pointing to the Amazon S3 location&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;FONT face="courier new,courier"&gt;&lt;SPAN&gt;s3://one-blog-post-mount-location/michele/&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;TABLE style="border-color: #FFF8DC; width: 100%; background-color: #fff8dc; border-style: hidden;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" height="166px"&gt;&lt;SPAN&gt;&lt;STRONG&gt;Tip!&lt;BR /&gt;&lt;/STRONG&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;Use a table to keep track of mount points and their &lt;I&gt;new&lt;/I&gt; Volume equivalent. Keeping track of progress helps you programmatically test and update code sections later.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;SPAN&gt;You should also treat this as an opportunity to simplify access. &lt;/SPAN&gt;&lt;SPAN&gt;For example, if multiple mount points share the same root (at the storage level); you can re-use the same storage credential for multiple Volumes.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;1. Set up storage credentials&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;To migrate toward a UC Volumes, you need to first make sure you can access the data from the external cloud storage location. To do this, you create a &lt;A href="https://docs.databricks.com/en/sql/language-manual/sql-ref-storage-credentials.html" target="_self"&gt;storage credential&lt;/A&gt; as in the example below:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_2-1713540376490.png" style="width: 574px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7163i66E577498D3108ED/image-dimensions/574x676?v=v2" width="574" height="676" role="button" title="lammic_2-1713540376490.png" alt="lammic_2-1713540376490.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Here, you provide an authentication and authorization mechanism which is dependent on the cloud provider. On AWS you would use an AWS IAM role, on Azure a managed identity, or on Google Cloud a service account.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;2. Set up external locations&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Next, you need to create the relevant external locations, as in the example below:&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_3-1713540376392.png" style="width: 578px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7165i0EE60FD3A08F712F/image-dimensions/578x616?v=v2" width="578" height="616" role="button" title="lammic_3-1713540376392.png" alt="lammic_3-1713540376392.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Then, verify you can access the external location.&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_4-1713540376492.png" style="width: 589px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7166i8351E61B30070E4B/image-dimensions/589x324?v=v2" width="589" height="324" role="button" title="lammic_4-1713540376492.png" alt="lammic_4-1713540376492.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;3. Create UC Volume&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;Once connection has been established successfully, you can create the UC volume with:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_5-1713540376493.png" style="width: 572px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7167iC03BA1D51474AEA7/image-dimensions/572x580?v=v2" width="572" height="580" role="button" title="lammic_5-1713540376493.png" alt="lammic_5-1713540376493.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;And verify its creation:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_6-1713540376467.png" style="width: 400px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7168i36B25F1AA1C3FDB3/image-size/medium?v=v2&amp;amp;px=400" role="button" title="lammic_6-1713540376467.png" alt="lammic_6-1713540376467.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Notice that the UC volume location is a subfolder of the external location. You can reuse the same external location to create multiple volumes as subfolders. You can manage permissions for each volume separately, even though they share the same parent location.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE style="border-color: #d6eeee; width: 100%; background-color: #d6eeee; border-style: hidden;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" height="166px"&gt;&lt;SPAN&gt;&lt;STRONG&gt;Note!&lt;BR /&gt;&lt;BR /&gt;&lt;/STRONG&gt;The UC volume location is a subfolder of the external location. You can reuse the same external location to create multiple volumes as subfolders. You can then manage permissions for each volume separately, even though they share the same parent location.&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&lt;SPAN&gt;At this stage, you can access the same cloud storage location in S3 via mount point &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN&gt;and&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN&gt; UC (external volume). If you upload a file via UC volume, the file will be available via the mount point and vice versa. This allows you to migrate the mount points with zero downtime for your application.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;4. Adjust code and clean up&lt;/SPAN&gt;&lt;/H3&gt;
&lt;P&gt;&lt;SPAN&gt;With your volume in place, you now need to update your code to use the volume instead of the mount point. If there are only a few code artifacts, it might be simpler and quicker to do this manually.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Example:&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Reading the PDF file as Spark DataFrame with mount points:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;pdf_df = spark.read.format('binaryFile').load('/mnt/michele/TenThings_Supplemental.pdf')&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;After the migration to UC volume:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;pdf_df = spark.read.format('binaryFile').load('/Volumes/michele/default/externalvolume/TenThings_Supplemental.pdf')&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;However, if you have multiple notebooks and files in your workspace, please consider scanning all of them and replacing the respective paths until UCX implements the following &lt;/SPAN&gt;&lt;A href="https://github.com/databrickslabs/ucx/issues/391" target="_blank" rel="noopener"&gt;&lt;SPAN&gt;feature request&lt;/SPAN&gt;&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Use the mapping table you created during the planning phase to track your migration progress as you eliminate the need for each mount point, clean up permissions, and build storage credentials. Depending on your cloud provider, you will also need to ensure the IAM roles or Managed Identities have the &lt;EM&gt;least required privileges&lt;/EM&gt; to storage.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;It’s always good practice to use parameters in your code; it’s even more critical for UC volume paths.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;TABLE style="border-color: #d6eeee; width: 100%; background-color: #d6eeee; border-style: hidden;" border="1" width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="100%" height="166px"&gt;&lt;SPAN&gt;&lt;STRONG&gt;&lt;BR /&gt;Important!&lt;BR /&gt;&lt;/STRONG&gt;&lt;BR /&gt;Mount points have workspace-level scope, while UC volumes have metastore-level scope. For example, if your development, test, and production workspaces are bound to the same Unity Catalog metastore, their respective volumes must have different names.&amp;nbsp;&lt;BR /&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;H1&gt;&lt;SPAN&gt;&lt;BR /&gt;Conclusion&lt;/SPAN&gt;&lt;/H1&gt;
&lt;P&gt;&lt;SPAN&gt;We just walked through the basic steps for migrating from mount points to volumes in Unity Catalog. As opposed to the passthrough nature of mount points, volumes - like external tables - ensure fine-grained access control and provide enhanced data governance capabilities including lineage.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;You can also decentralize access control by moving it from a central team (in charge of infrastructure management) to the business teams (the actual data owners). By removing friction, you can reduce the time to market for your projects.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;As you plan your migration, put your platform users’ experience at the center of everything and ensure business continuity. Then, automate as much as possible when migrating and leveraging the UCX framework.&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 02 May 2024 12:58:34 GMT</pubDate>
    <dc:creator>lammic</dc:creator>
    <dc:date>2024-05-02T12:58:34Z</dc:date>
    <item>
      <title>How to migrate from mount points to Unity Catalog Volumes</title>
      <link>https://community.databricks.com/t5/technical-blog/how-to-migrate-from-mount-points-to-unity-catalog-volumes/ba-p/64422</link>
      <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="lammic_1-1713540376489.png" style="width: 999px;"&gt;&lt;img src="https://community.databricks.com/t5/image/serverpage/image-id/7164i8772C221EA8A3A7B/image-size/large?v=v2&amp;amp;px=999" role="button" title="lammic_1-1713540376489.png" alt="lammic_1-1713540376489.png" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 02 May 2024 12:58:34 GMT</pubDate>
      <guid>https://community.databricks.com/t5/technical-blog/how-to-migrate-from-mount-points-to-unity-catalog-volumes/ba-p/64422</guid>
      <dc:creator>lammic</dc:creator>
      <dc:date>2024-05-02T12:58:34Z</dc:date>
    </item>
  </channel>
</rss>

