Использование Select-Object для изменения типа данных свойства и добавления вычисляемых свойств - PullRequest
1 голос
/ 25 марта 2020

Пытается получить детали от объекта и хочет сохранить его в SQL таблице.

$GetFiles `
    | Select-Object -Property  Name, Type `
    | Write-SqlTableData -ServerInstance $SQLServer -DatabaseName $SQLDatabase -SchemaName $SQLSchema -TableName $SQLTable -Credential $SQLCredential -Force

Que.1. Выше код завершается ошибкой. Удаление типа столбца работает. Но есть ли способ привести свойство Type к строке?

Write-SqlTableData: не найдено сопоставление между. Net типом «Microsoft. Azure .Commands.DataLakeStore.Models.DataLakeStoreEnums + FileType» и типом SQL для столбца «Тип». Попробуйте удалить столбец с этим типом и повторите операцию.

Que.2. Я также хочу добавить дополнительный столбец, скажем, RowInsertedDate, который будет иметь текущую метку времени, и еще один столбец с жестким кодом, скажем, LoadStatus, имеющий значение «Started». Как добавить это выбрать пункт?

Que.3. В любом случае обрезать эту таблицу и затем записать в нее данные?

1 Ответ

3 голосов
/ 25 марта 2020

Вам необходимо использовать вычисленные свойства с Select-Object, как описано в этом ответе :

Re 1 , преобразование Type значения свойств для строк ([string]):

$GetFiles |
  Select-Object -Property Name, @{ Name='Type'; Expression = { [string] $_.Type } }

Re 2 , добавление столбца RowInsertedDate с отметкой времени и столбца LoadStatus с фиксированное значение 'Started':

$timestamp = Get-Date
$GetFiles |
  Select-Object Name, 
                @{ Name='Type'; Expression = { $_.Type.ToString() } },
                @{ Name='RowInsertedDate'; Expression = { $timestamp } },
                @{ Name='LoadStatus'; Expression = { 'Started' } }

Примечание: позиционные аргументы неявно связываются с параметром -Property.


Re 3 , сначала обрезая целевую таблицу:

Я не могу лично это проверить, но я полагаю, что вам нужно использовать командлет Invoke-SqlCmd с
U- SQL TRUNCATE TABLE оператор (так как вы используете Azure озеро данных).

Что-то вроде следующих строк - очевидно, следует соблюдать осторожность , потому что усечение необратимо :

# UNTESTED. Note that TRUNCATE is IRREVERSIBLE.
Invoke-SqlCmd -Query "TRUNCATE TABLE $SQLSchema.$SQLTable" `
  -ServerInstance $SQLServer -Database $SQLDatabase -Credential $SQLCredential -Force
...