<?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: Issue with Uploading CSV to Azure Storage Account from Fabric Python Notebook in Pipelines</title>
    <link>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3512877#M955</link>
    <description>&lt;P&gt;Hi&amp;nbsp;@&lt;SPAN class=""&gt;v-nikhilan-msft,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;Thank you for your response. I tried your suggested solution and it works when access is enabled from all networks, but as soon as I change the storage account access to "&lt;SPAN&gt;Enabled from selected virtual networks and IP addresses" it fails to upload the csv file. Any suggestions?&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;Thank you!&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 02 Nov 2023 18:49:51 GMT</pubDate>
    <dc:creator>banafsh</dc:creator>
    <dc:date>2023-11-02T18:49:51Z</dc:date>
    <item>
      <title>Issue with Uploading CSV to Azure Storage Account from Fabric Python Notebook</title>
      <link>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3510591#M947</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;We're working on a task to upload CSV files to an Azure storage account using Fabric Python notebooks. However, we've encountered an issue where the connection fails unless we grant public access.&lt;/P&gt;&lt;P&gt;Below is a brief of our approach:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;We generate random names using the Python Faker library.&lt;/LI&gt;&lt;LI&gt;These names are then structured into a Pandas DataFrame.&lt;/LI&gt;&lt;LI&gt;We aim to save this DataFrame as a CSV file directly to our Azure Storage container without having to save it locally.&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;Here's the code snippet:&lt;/P&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;import&lt;/SPAN&gt; &lt;SPAN&gt;pandas&lt;/SPAN&gt; &lt;SPAN&gt;as&lt;/SPAN&gt; &lt;SPAN&gt;pd&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;from&lt;/SPAN&gt;&lt;SPAN&gt; faker &lt;/SPAN&gt;&lt;SPAN&gt;import&lt;/SPAN&gt;&lt;SPAN&gt; Faker&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;import&lt;/SPAN&gt; &lt;SPAN&gt;io&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;from&lt;/SPAN&gt;&lt;SPAN&gt; azure.storage.blob &lt;/SPAN&gt;&lt;SPAN&gt;import&lt;/SPAN&gt;&lt;SPAN&gt; BlobServiceClient&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Generate Random Names using Faker&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;fake&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; Faker()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Number of names to generate&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;num_names&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;1557&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Initialize lists to store names and last names&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;names&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; []&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;last_names&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; []&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;for&lt;/SPAN&gt; &lt;SPAN&gt;_&lt;/SPAN&gt; &lt;SPAN&gt;in&lt;/SPAN&gt; &lt;SPAN&gt;range&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;num_names&lt;/SPAN&gt;&lt;SPAN&gt;&lt;span class="lia-unicode-emoji" title=":disappointed_face:"&gt;😞&lt;/span&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;names&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;append&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;fake&lt;/SPAN&gt;&lt;SPAN&gt;.first_name())&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;last_names&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;append&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;fake&lt;/SPAN&gt;&lt;SPAN&gt;.last_name())&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Create a Pandas DataFrame&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;data&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;SPAN&gt;'First Name'&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;names&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;'Last Name'&lt;/SPAN&gt;&lt;SPAN&gt;: &lt;/SPAN&gt;&lt;SPAN&gt;last_names&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;df&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;pd&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;DataFrame&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;data&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Authenticate with Azure Blob Storage&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;connection_string&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;"connectionstring"&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;blob_service_client&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt; BlobServiceClient.from_connection_string(&lt;/SPAN&gt;&lt;SPAN&gt;connection_string&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Get a client to interact with the 'testcontainer' container&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;container_client&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;blob_service_client&lt;/SPAN&gt;&lt;SPAN&gt;.get_container_client(&lt;/SPAN&gt;&lt;SPAN&gt;"testcontainer"&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Convert DataFrame to CSV in-memory&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;output&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;io&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;StringIO&lt;/SPAN&gt;&lt;SPAN&gt;()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;df&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;to_csv&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;output&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;index&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;False&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;csv_data&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;output&lt;/SPAN&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;SPAN&gt;getvalue&lt;/SPAN&gt;&lt;SPAN&gt;().&lt;/SPAN&gt;&lt;SPAN&gt;encode&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;'utf-8'&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;# Upload the CSV data to the blob in the 'testcontainer' container&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;blob_name&lt;/SPAN&gt; &lt;SPAN&gt;=&lt;/SPAN&gt; &lt;SPAN&gt;'random_names.csv'&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;container_client&lt;/SPAN&gt;&lt;SPAN&gt;.upload_blob(&lt;/SPAN&gt;&lt;SPAN&gt;name&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;blob_name&lt;/SPAN&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;SPAN&gt;data&lt;/SPAN&gt;&lt;SPAN&gt;=&lt;/SPAN&gt;&lt;SPAN&gt;csv_data&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;SPAN&gt;print&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN&gt;f&lt;/SPAN&gt;&lt;SPAN&gt;"Saved 1557 random names to '&lt;/SPAN&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;SPAN&gt;blob_name&lt;/SPAN&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;SPAN&gt;' in 'testcontainer'"&lt;/SPAN&gt;&lt;SPAN&gt;)&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;P&gt;The code runs without errors, but the upload fails unless we give the container public access. We'd like to avoid setting our container to public.&lt;/P&gt;&lt;P&gt;Any guidance on resolving this issue while maintaining the security of our storage account would be greatly appreciated.&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Wed, 01 Nov 2023 21:54:53 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3510591#M947</guid>
      <dc:creator>banafsh</dc:creator>
      <dc:date>2023-11-01T21:54:53Z</dc:date>
    </item>
    <item>
      <title>Re: Issue with Uploading CSV to Azure Storage Account from Fabric Python Notebook</title>
      <link>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3511790#M951</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="427563" data-lia-user-login="banafsh" class="lia-mention lia-mention-user"&gt;banafsh&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;Thanks for using Fabric Community.&lt;BR /&gt;You can ingest the dataframe into the Azure Storage account by creating a mountpoint. I have created a repro and attached the screenshots for your reference.&lt;BR /&gt;&lt;BR /&gt;1) Create a mountpoint by giving the names of your storage account and container.&lt;/P&gt;
&lt;LI-CODE lang="python"&gt;from notebookutils import mssparkutils  
mssparkutils.fs.mount(  
    "abfss://mycontainer@&amp;lt;accountname&amp;gt;.blob.core.windows.net")&lt;/LI-CODE&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;2) I have created a dataframe with some random names and ingested the data into storage account using &lt;STRONG&gt;df._csv()&lt;/STRONG&gt; function.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;3) The file got placed in the container.&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;4) To perform this make sure you have the RBAC - Storage Blob Data Contributor role enabled.&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Please refer to this document for more information: &lt;A href="https://learn.microsoft.com/en-us/fabric/data-engineering/microsoft-spark-utilities#file-mount-and-unmount" target="_blank" rel="noopener"&gt;Link1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;Hope this helps. Please let me know if you have any further questions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 02 Nov 2023 10:56:42 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3511790#M951</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2023-11-02T10:56:42Z</dc:date>
    </item>
    <item>
      <title>Re: Issue with Uploading CSV to Azure Storage Account from Fabric Python Notebook</title>
      <link>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3512877#M955</link>
      <description>&lt;P&gt;Hi&amp;nbsp;@&lt;SPAN class=""&gt;v-nikhilan-msft,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;Thank you for your response. I tried your suggested solution and it works when access is enabled from all networks, but as soon as I change the storage account access to "&lt;SPAN&gt;Enabled from selected virtual networks and IP addresses" it fails to upload the csv file. Any suggestions?&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;Thank you!&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 02 Nov 2023 18:49:51 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3512877#M955</guid>
      <dc:creator>banafsh</dc:creator>
      <dc:date>2023-11-02T18:49:51Z</dc:date>
    </item>
    <item>
      <title>Re: Issue with Uploading CSV to Azure Storage Account from Fabric Python Notebook</title>
      <link>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3513029#M957</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="427563" data-lia-user-login="banafsh" class="lia-mention lia-mention-user"&gt;banafsh&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;
&lt;P&gt;Apologies for the issue you have been facing.&lt;/P&gt;
&lt;P&gt;You cannot mount an Azure storage account without public access without using a private endpoint. Once you disable public access to a storage account, it can only be accessed from within a virtual network (VNet) using a private endpoint.&lt;/P&gt;
&lt;P&gt;Private endpoints provide a secure way to connect to Azure services from within a VNet. They use a private IP address from the VNet address space for each storage account service, and network traffic between the clients on the VNet and the storage account traverses over the VNet and a private link on the Microsoft backbone network.&lt;/P&gt;
&lt;P data-sourcepos="3:1-3:333"&gt;&lt;SPAN class=""&gt;Currently private endpoints are not supported in Fabric. But they are on road map.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P data-sourcepos="3:1-3:333"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;img /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-sourcepos="3:1-3:333"&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;You can refer to planned timeline&amp;nbsp;here &lt;A href="https://learn.microsoft.com/en-us/fabric/release-plan/admin-governance" target="_blank" rel="noopener"&gt;Link1&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P data-sourcepos="3:1-3:333"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-sourcepos="3:1-3:333"&gt;&lt;SPAN class=""&gt;&lt;SPAN&gt;Hope this helps. Please let us know if you have any further queries.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-sourcepos="3:1-3:333"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P data-sourcepos="3:1-3:333"&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 02 Nov 2023 20:01:13 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3513029#M957</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2023-11-02T20:01:13Z</dc:date>
    </item>
    <item>
      <title>Re: Issue with Uploading CSV to Azure Storage Account from Fabric Python Notebook</title>
      <link>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3513647#M958</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="javascript:void(0)" data-lia-user-mentions="" data-lia-user-uid="427563" data-lia-user-login="banafsh" class="lia-mention lia-mention-user"&gt;banafsh&lt;/a&gt;&amp;nbsp;,&lt;BR /&gt;Glad that your issue got resolved. Please continue using Fabric Community for any help regarding your queries.&lt;/P&gt;</description>
      <pubDate>Fri, 03 Nov 2023 04:43:38 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Pipelines/Issue-with-Uploading-CSV-to-Azure-Storage-Account-from-Fabric/m-p/3513647#M958</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2023-11-03T04:43:38Z</dc:date>
    </item>
  </channel>
</rss>

