使用 Select-Object 更改 属性 的数据类型并添加计算属性
Use of Select-Object to change a property's data type and to add calculated properties
正在尝试从对象中获取详细信息并希望将其保存到 SQL table。
$GetFiles `
| Select-Object -Property Name, Type `
| Write-SqlTableData -ServerInstance $SQLServer -DatabaseName $SQLDatabase -SchemaName $SQLSchema -TableName $SQLTable -Credential $SQLCredential -Force
问题 1。上面的代码因错误而失败。删除类型列有效。但是有什么方法可以将 Type 属性 转换为字符串?
Write-SqlTableData:找不到列 'Type' 的 .Net 类型 'Microsoft.Azure.Commands.DataLakeStore.Models.DataLakeStoreEnums+FileType' 和 SQL 类型之间的映射。
考虑删除具有该类型的列并重复该操作。
问题 2。我还想添加一个额外的列,例如 RowInsertedDate,它将具有当前时间戳和一个硬编码列,例如 LoadStatus,其值为 "Started"。如何添加select子句呢?
问题 3。无论如何要截断这个 table 然后向它写入数据?
您需要将 计算属性 与 Select-Object
一起使用,如 :
中所述
Re 1,将 Type
属性 值转换为字符串 ([string]
):
$GetFiles |
Select-Object -Property Name, @{ Name='Type'; Expression = { [string] $_.Type } }
Re 2,添加一个带时间戳的RowInsertedDate
列,和一个固定值'Started'
的LoadStatus
列:
$timestamp = Get-Date
$GetFiles |
Select-Object Name,
@{ Name='Type'; Expression = { $_.Type.ToString() } },
@{ Name='RowInsertedDate'; Expression = { $timestamp } },
@{ Name='LoadStatus'; Expression = { 'Started' } }
注意:位置参数隐式绑定到 -Property
参数。
Re 3,先截断目标table:
我无法亲自验证这一点,但我认为您需要将 Invoke-SqlCmd
cmdlet 与
一起使用
U-SQL TRUNCATE TABLE
statement(因为您使用的是 Azure Data Lake)。
以下内容 - 显然,请谨慎使用,因为截断是不可逆的:
# UNTESTED. Note that TRUNCATE is IRREVERSIBLE.
Invoke-SqlCmd -Query "TRUNCATE TABLE $SQLSchema.$SQLTable" `
-ServerInstance $SQLServer -Database $SQLDatabase -Credential $SQLCredential -Force
正在尝试从对象中获取详细信息并希望将其保存到 SQL table。
$GetFiles `
| Select-Object -Property Name, Type `
| Write-SqlTableData -ServerInstance $SQLServer -DatabaseName $SQLDatabase -SchemaName $SQLSchema -TableName $SQLTable -Credential $SQLCredential -Force
问题 1。上面的代码因错误而失败。删除类型列有效。但是有什么方法可以将 Type 属性 转换为字符串?
Write-SqlTableData:找不到列 'Type' 的 .Net 类型 'Microsoft.Azure.Commands.DataLakeStore.Models.DataLakeStoreEnums+FileType' 和 SQL 类型之间的映射。 考虑删除具有该类型的列并重复该操作。
问题 2。我还想添加一个额外的列,例如 RowInsertedDate,它将具有当前时间戳和一个硬编码列,例如 LoadStatus,其值为 "Started"。如何添加select子句呢?
问题 3。无论如何要截断这个 table 然后向它写入数据?
您需要将 计算属性 与 Select-Object
一起使用,如
Re 1,将 Type
属性 值转换为字符串 ([string]
):
$GetFiles |
Select-Object -Property Name, @{ Name='Type'; Expression = { [string] $_.Type } }
Re 2,添加一个带时间戳的RowInsertedDate
列,和一个固定值'Started'
的LoadStatus
列:
$timestamp = Get-Date
$GetFiles |
Select-Object Name,
@{ Name='Type'; Expression = { $_.Type.ToString() } },
@{ Name='RowInsertedDate'; Expression = { $timestamp } },
@{ Name='LoadStatus'; Expression = { 'Started' } }
注意:位置参数隐式绑定到 -Property
参数。
Re 3,先截断目标table:
我无法亲自验证这一点,但我认为您需要将 Invoke-SqlCmd
cmdlet 与
一起使用
U-SQL TRUNCATE TABLE
statement(因为您使用的是 Azure Data Lake)。
以下内容 - 显然,请谨慎使用,因为截断是不可逆的:
# UNTESTED. Note that TRUNCATE is IRREVERSIBLE.
Invoke-SqlCmd -Query "TRUNCATE TABLE $SQLSchema.$SQLTable" `
-ServerInstance $SQLServer -Database $SQLDatabase -Credential $SQLCredential -Force