如何从数据集或数据表上传到 Azure Blob
How to upload to azure blob from a dataset or a datatable
我目前在 Powershell
工作,试图从我的 Azure SQL Database
获取一些数据。我已经成功地将一些数据提取到数据集中。但是,我似乎无法弄清楚如何在不先将其保存为 csv 的情况下将其上传到 Azure blob storage
。
The dataset must be converted to csv and uploaded to the blob as a csv without saving it locally.
这是到目前为止的结果:
$SQLServer = "xxxxxxx"
$SQLDBName = "xxxxxx"
$uid ="xxxxxxxx"
$pwd = "xxxxxxx"
$SqlQuery = "SELECT * from Dim.xxxxxx;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = False; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$csv = $DataSet.Tables[0] | ConvertTo-Csv -Delimiter ";" -NoTypeInformation
Set-AzStorageBlobContent -File $csv -Context $context -Container "xxxxxx"
但是最后一行给我这个错误:
Set-AzStorageBlobContent : Cannot convert 'System.Object[]' to the
type 'System.String' required by parameter 'File'. Specified method is
not supported.
我知道我做错了什么,但我不知道如何转换数据集并同时上传它。或者也许还有其他方法?
根据 Set-AzStorageBlobContent 的文档,这是不可能的:
The Set-AzStorageBlobContent cmdlet uploads a local file to an Azure Storage blob.
您收到该错误消息的原因是因为该命令需要一个文件名,作为字符串,作为 -File 参数的值,而不是 blob 的内容。即使您将 Object[] 转换为字符串,它仍然无法工作,因为该命令将尝试查找具有该路径的文件。
我建议您使用 Blob 存储 REST API 来实现这一点,尤其是 Put Blob method。您将必须制作一个 HTTP 请求。
另一种选择是使用 Blob Storage .NET API,因为您可以从 Powershell 使用 .NET 类。
让 Databricks 管理它。 Databricks 的 SQL 数据仓库连接器将管理中间存储。只需加载您的数据框,然后使用 DW 连接器写入 DW。
https://docs.databricks.com/data/data-sources/azure/sql-data-warehouse.html
我找到的解决方案是在 Powershell
中创建一个临时文件。
首先,我用 New-TemporaryFile.
声明一个变量,然后我将 DataSet
导出到 $file
变量。完成后,我可以将其上传到我的 Azure Blob Storage
.
所以解决方案是:
$file = New-TemporaryFile
$DataSet.Tables[0] | Export-Csv -Path $file -Delimiter ";" -NoTypeInformation
Set-AzStorageBlobContent -File $file -Container "xxxxxx" -Context $context -blob "dataset" -Force
我目前在 Powershell
工作,试图从我的 Azure SQL Database
获取一些数据。我已经成功地将一些数据提取到数据集中。但是,我似乎无法弄清楚如何在不先将其保存为 csv 的情况下将其上传到 Azure blob storage
。
The dataset must be converted to csv and uploaded to the blob as a csv without saving it locally.
这是到目前为止的结果:
$SQLServer = "xxxxxxx"
$SQLDBName = "xxxxxx"
$uid ="xxxxxxxx"
$pwd = "xxxxxxx"
$SqlQuery = "SELECT * from Dim.xxxxxx;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = False; User ID = $uid; Password = $pwd;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SqlQuery
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$csv = $DataSet.Tables[0] | ConvertTo-Csv -Delimiter ";" -NoTypeInformation
Set-AzStorageBlobContent -File $csv -Context $context -Container "xxxxxx"
但是最后一行给我这个错误:
Set-AzStorageBlobContent : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'File'. Specified method is not supported.
我知道我做错了什么,但我不知道如何转换数据集并同时上传它。或者也许还有其他方法?
根据 Set-AzStorageBlobContent 的文档,这是不可能的:
The Set-AzStorageBlobContent cmdlet uploads a local file to an Azure Storage blob.
您收到该错误消息的原因是因为该命令需要一个文件名,作为字符串,作为 -File 参数的值,而不是 blob 的内容。即使您将 Object[] 转换为字符串,它仍然无法工作,因为该命令将尝试查找具有该路径的文件。
我建议您使用 Blob 存储 REST API 来实现这一点,尤其是 Put Blob method。您将必须制作一个 HTTP 请求。
另一种选择是使用 Blob Storage .NET API,因为您可以从 Powershell 使用 .NET 类。
让 Databricks 管理它。 Databricks 的 SQL 数据仓库连接器将管理中间存储。只需加载您的数据框,然后使用 DW 连接器写入 DW。
https://docs.databricks.com/data/data-sources/azure/sql-data-warehouse.html
我找到的解决方案是在 Powershell
中创建一个临时文件。
首先,我用 New-TemporaryFile.
声明一个变量,然后我将 DataSet
导出到 $file
变量。完成后,我可以将其上传到我的 Azure Blob Storage
.
所以解决方案是:
$file = New-TemporaryFile
$DataSet.Tables[0] | Export-Csv -Path $file -Delimiter ";" -NoTypeInformation
Set-AzStorageBlobContent -File $file -Container "xxxxxx" -Context $context -blob "dataset" -Force