Public/duckdb/Initialize-SQLPipeline.ps1
|
function Initialize-SQLPipeline { <# .SYNOPSIS Opens a file-based DuckDB connection, initializes the metadata table, and sets it as the default connection for all subsequent DuckDB functions. .DESCRIPTION This function is only required when you want to use a persistent file-based DuckDB database. An in-memory database is initialized automatically when the module is imported, so calling this function is optional for in-memory use. After this call all DuckDB functions (Add-RowsToDuckDB, Get-DuckDBData, etc.) will use the file-based connection by default unless -Connection is specified explicitly. .PARAMETER DbPath Path to the DuckDB database file. The file is created if it does not exist. .PARAMETER EncryptionKey Optional encryption key (AES-256, requires DuckDB 1.4.0 or later). .EXAMPLE # File-based database Initialize-SQLPipeline -DbPath '.\pipeline.db' Import-Csv '.\orders.csv' | Add-RowsToDuckDB -TableName 'orders' Close-DuckDBConnection .EXAMPLE # Capture connection for explicit use $conn = Initialize-SQLPipeline -DbPath '.\pipeline.db' Import-Csv '.\orders.csv' | Add-RowsToDuckDB -Connection $conn -TableName 'orders' Close-DuckDBConnection -Connection $conn #> [CmdletBinding()] [OutputType([DuckDB.NET.Data.DuckDBConnection])] param( [Parameter(Mandatory)] [string]$DbPath, [string]$EncryptionKey ) $absolutePath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($DbPath) $params = @{ DbPath = $absolutePath } if ($EncryptionKey) { $params['EncryptionKey'] = $EncryptionKey } $conn = New-DuckDBConnection @params Initialize-PipelineMetadata -Connection $conn $Script:DefaultConnection = $conn Write-Information "SQLPipeline initialized: $absolutePath" # return $conn } |